技术论坛

1200 TCP/TP自由口通讯传输速率,速度快会丢数据

作者 主题
侠士

经验值: 1693
发帖数: 236
精华帖: 2
主题:【求助】1200 TCP/TP自由口通讯传输速率,速度快会丢数据
精编帖 推荐帖


只看楼主 只看精编 楼主 2018-05-24 11:11:50

CPU 1212DC,项目要求用PLC控制伺服,并且每隔固定时间将其中某些数据传输给上位机做显示,形成时间波形。

这个时间间隔要求越小越好,要达到个位数MS级,WINCC试了下最快采集速度100MS不满足要求,并且上位机软件有现成的,Visual Studio编写的,PLC只是其中一小部分。

后来与软件测试了TCP/IP通讯,通讯做通了,但软件那边反馈有两个问题,

1延时,打个比方我这边一次性循环发100次后停止,我这边停了,软件那边延时好几秒,才发现停止接收数据。可能软件那边显示控件反应跟不上,先不做讨论。

2丢数据,我这边发送100次,那边接收总数会少几个。

然后建了一个新的最简单的项目,并且把通讯资源调到了50,专门来测试这个TCP/IP通讯,请大侠指正。

程序很简单,循环中断OB30,时间5MS,M2.0 5MS导通,5MS关闭,就是10MS发送一次,将浮点数1.0(16#3F 80 00 00)(4个字节),循环发送。并且计数发送次数。

发现计数10682次,接收到的字节为41812/4=10453个,少了200个。

然后我把OB30改为10MS,即每20MS发送一次,有改善,丢的数据很少。把OB35改为20MS,即每40MS发一次,就没有丢数据现象了。


本人PLC,通讯,原理都不甚了解。PLC控制部分尚没做好,上位机采集这块也不行,

请教各位大侠,我这样的方式是否正确,怎么才能优化改善每10MS发一次数据并且不丢失。之前用的232自由口通讯,数据更是丢的一大糊涂,换成TCP/IP依然没能做到完美。


 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1482467&b_id=50&s_id=0&num=19

至圣

经验值: 127368
发帖数: 22003
精华帖: 824
回复:1200 TCP/TP自由口通讯传输速率,速度快会丢数据
精编帖 推荐帖


只看楼主 只看精编 7楼 2018-05-28 11:18:41
最后要说,楼主的这种发送方式叫流,就是每次发送不管收到否,打上IP标扔出去就不管了。通常视频流才会这样用。
我的方式就是使用缓冲区,5毫秒的采样放入缓冲区。200个数据,每秒交换一次。
甚至更大的缓冲区。发送间隔更大一些。
在另一侧则用每5毫秒显示一个。

学而时习之,不亦说乎?温故而知新,不亦乐乎?
以下网友喜欢您的帖子:

  
至圣

经验值: 13749
发帖数: 2032
精华帖: 16
回复:1200 TCP/TP自由口通讯传输速率,速度快会丢数据


只看楼主 只看精编 1楼 2018-05-24 12:01:40

你不应该用TCP通讯,换成Libnodave。

10ms的话,不用profinet是很难实现的。


工控毁我青春!
以下网友喜欢您的帖子:

  
奇侠

经验值: 7405
发帖数: 1268
精华帖: 3
回复:1200 TCP/TP自由口通讯传输速率,速度快会丢数据


只看楼主 只看精编 2楼 2018-05-24 12:33:43

数据实时更新太快 还有上位机收发频率设置定时器是多少???


新手到来 多多指教
以下网友喜欢您的帖子:

  
侠士

经验值: 1693
发帖数: 236
精华帖: 2
回复:1200 TCP/TP自由口通讯传输速率,速度快会丢数据
精编帖


只看楼主 只看精编 楼主 3楼 2018-05-24 15:15:11

是这个速率问题,上位机收发频率我不清楚。所以我用了网络调试助手,这个助手的时钟频率我也不清楚,只是发现丢数据现象。不知道采用什么方案才能达到要求。


 
以下网友喜欢您的帖子:

  
游士

经验值: 172
发帖数: 4
精华帖: 0
回复:1200 TCP/TP自由口通讯传输速率,速度快会丢数据


只看楼主 只看精编 4楼 2018-05-28 08:44:09

印象中,调整完PLC通信资源占比需要重启PLC,是否已经这样做。先前我做过一个测试1215将通信比调整50%,可以完成PLC5ms内的通信发送。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 127368
发帖数: 22003
精华帖: 824
回复:1200 TCP/TP自由口通讯传输速率,速度快会丢数据
精编帖 推荐帖


只看楼主 只看精编 5楼 2018-05-28 10:53:12
TCP/IP有丢包是很可能的。完全看网络带宽。阻塞了就会被丢弃。一般只能保证数十毫秒的交换。所以高速采集要用一些方法。

学而时习之,不亦说乎?温故而知新,不亦乐乎?
以下网友喜欢您的帖子:

  
至圣

经验值: 127368
发帖数: 22003
精华帖: 824
回复:1200 TCP/TP自由口通讯传输速率,速度快会丢数据
精编帖 推荐帖


只看楼主 只看精编 6楼 2018-05-28 11:01:33
1200在ProfiNet下也仅只支持RT 10毫秒级的响应。更快的则需要专用的、能辨识PN报文的交换机了。
尽管你可能看到3-5毫秒的响应。但那是没谱的。只要有其他TCP通讯就会慢下来。

学而时习之,不亦说乎?温故而知新,不亦乐乎?
以下网友喜欢您的帖子:

  
侠士

经验值: 1693
发帖数: 236
精华帖: 2
回复:1200 TCP/TP自由口通讯传输速率,速度快会丢数据
精编帖


只看楼主 只看精编 楼主 8楼 2018-05-28 14:54:39

感谢大家回复,yming意思是,存储200次数据打包一次性发送,这样发送间隔增大了,每一次发送的数据量就多了,按照我的例子,一个数据4个字节,这样一次就要发800个字节,另外在上位机上显示就不是实时跟踪了,而是历史数据了。


 
以下网友喜欢您的帖子:

  
版主

经验值: 76250
发帖数: 19148
精华帖: 378
回复:1200 TCP/TP自由口通讯传输速率,速度快会丢数据
精编帖 推荐帖


只看楼主 只看精编 9楼 2018-05-28 23:50:27
以下是引用孤独天空在2018-05-28 14:54:39的发言 >8楼

感谢大家回复,yming意思是,存储200次数据打包一次性发送,这样发送间隔增大了,每一次发送的数据量就多了,按照我的例子,一个数据4个字节,这样一次就要发800个字节,另外在上位机上显示就不是实时跟踪了,而是历史数据了。

数字系统本来就是个滞后的系统,你看到的可都是“历史数据”,问题是这点滞后对你有多大的影响,我们能做到的一切也就是让滞后对你的影响减小。


一百个人都要在短时间内从A地到B地,是每个人依次各开一架飞机去呢,还是凑齐人数开一架飞机去呢?那就看你能容忍的最小的凑齐人数的时间了,以及航线等其他因素的承载能力了。


显然,楼主是每个人都开一架飞机去了,然后是有几架飞机找不到了............


Zane 注册自动化系统工程师 Always save before download
以下网友喜欢您的帖子:

  
游侠

经验值: 502
发帖数: 27
精华帖: 1
回复:1200 TCP/TP自由口通讯传输速率,速度快会丢数据


只看楼主 只看精编 10楼 2018-05-29 08:23:40

如果你要实现10ms级的TCP通讯,还要考虑的PC测试端是否有这么快的速度来触发接收,


发的快,收的慢,同样会丢数据,网络测试助手里面也有定时器触发的,

10ms级的TCP如果程序不大应该没多大问题,建议用抓包软件监控下试试。


Q:770477043
以下网友喜欢您的帖子:

  
奇侠

经验值: 7592
发帖数: 1989
精华帖: 0
回复:1200 TCP/TP自由口通讯传输速率,速度快会丢数据


只看楼主 只看精编 11楼 2018-05-30 11:00:00

你的数据采集频率这么高根本不适合用plc这种系统,你要采集什么数据到上位机,伺服的实时位置,压力或者其他什么?用plc缓存数据再发送是最好的办法了,1200的扫描时间一般也有几个毫秒,10毫秒的数据更新也是非常的勉强。

要求快,用板卡,别难为plc


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 8525
发帖数: 885
精华帖: 8
回复:1200 TCP/TP自由口通讯传输速率,速度快会丢数据


只看楼主 只看精编 12楼 2018-05-31 21:18:44

就上位机作为人机交互(操控、显示)作用而言,更快的响应速度并没有多大作用。因为人的反应速度跟不上。更快的速度反而会影响电脑主机的性能。所以像WinCC里最快刷新速度设为250ms是比较合理的。

如果非要实现超高速采集和响应,可以考虑 Labview + 专用高速采集卡 之类的组合。


个体职业者。
以下网友喜欢您的帖子:

  
至圣

经验值: 12573
发帖数: 2503
精华帖: 31
回复:1200 TCP/TP自由口通讯传输速率,速度快会丢数据
精编帖


只看楼主 只看精编 13楼 2018-05-31 23:26:41
1200系列CPU的速度是百纳秒级别,程序周期是1毫秒级别,真的处理不了这么高速的频繁通讯。要么打包发送要么别用PLC。
虽然是100M以太网接口,但是就算PLC作为客户机什么程序都不写数据交换速度到1M/S就顶天了。再快就PLC那弱鸡的72MHz主频绝对处理不过来。
PLC是有固件的,是居于低层系统运行的,并不像采集卡那样可以高速实时性的。再说了实时性这种说法,就连数字示波器都是采集缓存后显示的,你想用PLC、WinCC这种龟速软硬件来实现真是太天真。
你需要的是DSP……

最后…数据什么的都是用来分析的,缓存历史数据更有价值。
 
以下网友喜欢您的帖子:

  
版主

经验值: 76250
发帖数: 19148
精华帖: 378
回复:1200 TCP/TP自由口通讯传输速率,速度快会丢数据
精编帖


只看楼主 只看精编 14楼 2018-06-01 08:47:49
呵呵,方法不对,导致技术难度增加从而难以实现,建议参考yming版主的方案
Zane 注册自动化系统工程师 Always save before download
以下网友喜欢您的帖子:

  
至圣

经验值: 127368
发帖数: 22003
精华帖: 824
回复:1200 TCP/TP自由口通讯传输速率,速度快会丢数据
精编帖


只看楼主 只看精编 15楼 2018-06-01 09:13:02
以下是引用孤独天空在2018-05-28 14:54:39的发言 >8楼

感谢大家回复,yming意思是,存储200次数据打包一次性发送,这样发送间隔增大了,每一次发送的数据量就多了,按照我的例子,一个数据4个字节,这样一次就要发800个字节,另外在上位机上显示就不是实时跟踪了,而是历史数据了。

你想错了。

如果上位机是采集。这样做才不会丢数据。

如果上位机仅显示,只需按5毫秒显示一个数据即可。(这个5毫秒,我都存疑,显示器支持200Hz刷新么?),滞后的一秒是系统误差,而系统误差是可以矫正的。

你以为航天的检测是实时的呐?光发送到接受就要数秒,不是么?但只要知道 传输迟滞时间 就能预判 实际姿态。



学而时习之,不亦说乎?温故而知新,不亦乐乎?
以下网友喜欢您的帖子:

  
侠士

经验值: 1693
发帖数: 236
精华帖: 2
回复:1200 TCP/TP自由口通讯传输速率,速度快会丢数据
精编帖


只看楼主 只看精编 楼主 16楼 2018-06-01 09:53:32

感谢yming的指导,确实是目前最好的方案了。接下来试验下,怎么通过TCP/IP发送数组。TCP/IP通讯确实方便好用,PLC端组态配置一下就可以了,上位机变得更加灵活。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 127368
发帖数: 22003
精华帖: 824
回复:1200 TCP/TP自由口通讯传输速率,速度快会丢数据
精编帖


只看楼主 只看精编 17楼 2018-06-01 14:27:27
以下是引用孤独天空在2018-06-01 09:53:32的发言 >16楼

感谢yming的指导,确实是目前最好的方案了。接下来试验下,怎么通过TCP/IP发送数组。TCP/IP通讯确实方便好用,PLC端组态配置一下就可以了,上位机变得更加灵活。

嗯,最好有时标,比如放在数组【0】; 而且,要有适当的 重叠。

具体的应按照实际情况来决定。有些远程都是通过移动转联通;再到有线,中间不知到多少路由网关。只有ping过才知道大概其延迟,再决定缓冲区要多大合适。

慢慢研究吧,祝顺利!


学而时习之,不亦说乎?温故而知新,不亦乐乎?
以下网友喜欢您的帖子:

  
游士

经验值: 156
发帖数: 20
精华帖: 0
回复:1200 TCP/TP自由口通讯传输速率,速度快会丢数据


只看楼主 只看精编 18楼 2018-06-01 22:45:08

您遇到的“丢包”情况,我认为是这样的:

  1. 通过计数M2.0触发的次数,并非实际T_SEND指令完成发送状态,所以10682这个数据不妥。建议使用done来计数,更准确的计算实际发送多少个数据。

  2. 通信属于异步指令范畴,有时候需要好几个扫描周期才能结束。您也试了延长中断时间,从5ms-10ms-20ms,这个过程其实说明真正完成一次发送肯定超过5ms了。

以上是一点小建议


 
以下网友喜欢您的帖子:

  
游士

经验值: 156
发帖数: 20
精华帖: 0
回复:1200 TCP/TP自由口通讯传输速率,速度快会丢数据


只看楼主 只看精编 19楼 2018-06-01 22:48:39
以下是引用yming在2018-05-28 11:18:41的发言 >7楼:最后要说,楼主的这种发送方式叫流,就是每次发送不管收到否,打上IP标扔出去就不管了。通常视频流才会这样用。 我的方式就是使用缓冲区,5毫秒的采样放入缓冲区。200个数据,每秒交换一次。 甚至更大的缓冲区。发送间隔更大一些。 在另一侧则用每5毫秒显示一个。

另外,根据上面的理解,测试一下200个数据能否在1s内发完,如果不行,后面的遗留的数据就会把缓冲器里的数据覆盖掉了。但我觉得还是蛮‘实时’的一种策略了


 
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
1200 TCP/TP自由口通讯传输速率,速度快会丢数据
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。