签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
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
你不应该用TCP通讯,换成Libnodave。
10ms的话,不用profinet是很难实现的。
数据实时更新太快 还有上位机收发频率设置定时器是多少???
是这个速率问题,上位机收发频率我不清楚。所以我用了网络调试助手,这个助手的时钟频率我也不清楚,只是发现丢数据现象。不知道采用什么方案才能达到要求。
印象中,调整完PLC通信资源占比需要重启PLC,是否已经这样做。先前我做过一个测试1215将通信比调整50%,可以完成PLC5ms内的通信发送。
感谢大家回复,yming意思是,存储200次数据打包一次性发送,这样发送间隔增大了,每一次发送的数据量就多了,按照我的例子,一个数据4个字节,这样一次就要发800个字节,另外在上位机上显示就不是实时跟踪了,而是历史数据了。
数字系统本来就是个滞后的系统,你看到的可都是“历史数据”,问题是这点滞后对你有多大的影响,我们能做到的一切也就是让滞后对你的影响减小。
一百个人都要在短时间内从A地到B地,是每个人依次各开一架飞机去呢,还是凑齐人数开一架飞机去呢?那就看你能容忍的最小的凑齐人数的时间了,以及航线等其他因素的承载能力了。
显然,楼主是每个人都开一架飞机去了,然后是有几架飞机找不到了............
如果你要实现10ms级的TCP通讯,还要考虑的PC测试端是否有这么快的速度来触发接收,
发的快,收的慢,同样会丢数据,网络测试助手里面也有定时器触发的,
10ms级的TCP如果程序不大应该没多大问题,建议用抓包软件监控下试试。
你的数据采集频率这么高根本不适合用plc这种系统,你要采集什么数据到上位机,伺服的实时位置,压力或者其他什么?用plc缓存数据再发送是最好的办法了,1200的扫描时间一般也有几个毫秒,10毫秒的数据更新也是非常的勉强。
要求快,用板卡,别难为plc
就上位机作为人机交互(操控、显示)作用而言,更快的响应速度并没有多大作用。因为人的反应速度跟不上。更快的速度反而会影响电脑主机的性能。所以像WinCC里最快刷新速度设为250ms是比较合理的。
如果非要实现超高速采集和响应,可以考虑 Labview + 专用高速采集卡 之类的组合。
你想错了。
如果上位机是采集。这样做才不会丢数据。
如果上位机仅显示,只需按5毫秒显示一个数据即可。(这个5毫秒,我都存疑,显示器支持200Hz刷新么?),滞后的一秒是系统误差,而系统误差是可以矫正的。
你以为航天的检测是实时的呐?光发送到接受就要数秒,不是么?但只要知道 传输迟滞时间 就能预判 实际姿态。
感谢yming的指导,确实是目前最好的方案了。接下来试验下,怎么通过TCP/IP发送数组。TCP/IP通讯确实方便好用,PLC端组态配置一下就可以了,上位机变得更加灵活。
嗯,最好有时标,比如放在数组【0】; 而且,要有适当的 重叠。
具体的应按照实际情况来决定。有些远程都是通过移动转联通;再到有线,中间不知到多少路由网关。只有ping过才知道大概其延迟,再决定缓冲区要多大合适。
慢慢研究吧,祝顺利!
您遇到的“丢包”情况,我认为是这样的:
通过计数M2.0触发的次数,并非实际T_SEND指令完成发送状态,所以10682这个数据不妥。建议使用done来计数,更准确的计算实际发送多少个数据。
通信属于异步指令范畴,有时候需要好几个扫描周期才能结束。您也试了延长中断时间,从5ms-10ms-20ms,这个过程其实说明真正完成一次发送肯定超过5ms了。
以上是一点小建议
另外,根据上面的理解,测试一下200个数据能否在1s内发完,如果不行,后面的遗留的数据就会把缓冲器里的数据覆盖掉了。但我觉得还是蛮‘实时’的一种策略了
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录