技术论坛

西门子1200 Modbus RTU速率太慢问题,是否是背板通讯太慢造成?

作者 主题
侠圣

经验值: 2331
发帖数: 382
精华帖: 3
主题:【探讨】西门子1200 Modbus RTU速率太慢问题,是否是背板通讯太慢造成?
精编帖 推荐帖


只看楼主 只看精华 只看精编 楼主 2021-04-17 10:02:00

Modbus RTU有完全开放和经济的特点,但显然不是一种完全实时的协议,需要用户程序来驱动。


但是感觉Modbus速率在S7-1200下实在是太慢了,作为主站100ms才能更新一次,如果使用嵌入式系统就好很多,测量方法是通过1200内置的trace功能,




而且Modbus超时时间最短为1s,而好多嵌入式系统超时时间是100ms,请问大家遇到过吗?


我监测的是modbus master的背景DB (Modbus_Master [FB641] 3.2)

按照这个速率,读写一次相关Modbus从站就需要200ms左右了 有些相对精确的控制就需要换成别的通讯方式了。

波特率我已经调整到最高了,这个参数和波特率似乎没有太大关系。

大家Modbus轮询周期一般是多久?


更新:

有网友提示done 和req等待时间太长,我之前确实加了延时,因为考虑到周期采集。更新无等待一个截图。

模块是CM 1241 (RS422/485) S7-1200 中

截图是57600,No parity, 8 bits, 1 stop。

只有一个从站 直连 因从站配置无终端电阻困难,DP总线头终端电阻未启用。





为保证测试正确,使用了计算机模拟Modbus Slave(Modbus Slave 7.3.1 )效果相似 相同


工艺第一& 我所说的一切均代表个人意见
以下网友喜欢您的帖子:

  
重要声明:

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

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

版主

经验值: 76203
发帖数: 19145
精华帖: 378
回复:西门子1200 Modbus RTU速率太慢问题,是否是背板通讯太慢造成??
精编帖 推荐帖


只看楼主 只看精华 只看精编 1楼 2021-04-17 11:20:22

通信速度的快慢与下列因素有关

1) 通信波特率的高低

2) 通信数据的的多少

3) 扫描周期的长短,因为通信是异步执行的,实际通信完成到查询到DONE标志位的时间是有一定间隔的

4) 通信的逻辑控制

5) 从站的响应速度

6) 线路上的干扰


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

  
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
回复:西门子1200 Modbus RTU速率太慢问题,是否是背板通讯太慢造成??
精编帖 推荐帖


只看楼主 只看精华 只看精编 2楼 2021-04-17 11:29:50

通讯正常前提下:主要看从站数量、通讯数据长度。

通讯波特率我之前还真的单独测试过,比如用9600与19.2K比较,并不能够理解为通讯速率快一半的概念,频率越高通讯数据交换越快,但不是与通讯频率呈线性关系的。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 12573
发帖数: 2503
精华帖: 31
回复:西门子1200 Modbus RTU速率太慢问题,是否是背板通讯太慢造成??
精编帖


只看楼主 只看精华 只看精编 4楼 2021-04-17 17:56:59

看trace图,人家库运行没任何问题啊。

1、你的Req并不是Done的下一个周期触发?或者主程序周期过长?反正趋势图很明显的看到主要就是这两个原因造成的通讯事务过慢。

2、根据串口通讯波特率与Modbus RTU数据帧计算,9600波特率下,100ms是否读/写超过35个保持寄存器? 120ms是否读/写超过40个保持寄存器?320ms是否读/写超过120个保持寄存器?从Busy可以看出很长的时间都是消耗在通讯事务上了,要么是操作寄存器太多,要么是波特率太低。


最后,感觉都是你的问题啊。。。。




 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2331
发帖数: 382
精华帖: 3
回复:西门子1200 Modbus RTU速率太慢问题,是否是背板通讯太慢造成??
精编帖


只看楼主 只看精华 只看精编 楼主 5楼 2021-04-18 10:13:56
以下是引用Zaxife在2021-04-17 17:56:59的发言 >4楼

看trace图,人家库运行没任何问题啊。

1、你的Req并不是Done的下一个周期触发?或者主程序周期过长?反正趋势图很明显的看到主要就是这两个原因造成的通讯事务过慢。

2、根据串口通讯波特率与Modbus RTU数据帧计算,9600波特率下,100ms是否读/写超过35个保持寄存器? 120ms是否读/写超过40个保持寄存器?320ms是否读/写超过120个保持寄存器?从Busy可以看出很长的时间都是消耗在通讯事务上了,要么是操作寄存器太多,要么是波特率太低。


最后,感觉都是你的问题啊。。。。



感谢回复

回应1.

更新了一下截图,done结束后立即req。

只调用Modbus程序,不调用用户程序了。

之前有延时是因为既然时间差这么多,那我相对固定一个周期采集把。

只有一个从站。





回应2.

读取Modbus 10个words,这个应该不算数据量大吧?

当然为了保证测试无干扰,用PC软件模拟主站(Modbus Slave)效果相同。


如果谁手头有1500 的模块,可否一起测试一下1500的Modbus RTU速率?


工艺第一& 我所说的一切均代表个人意见
以下网友喜欢您的帖子:

  
侠圣

经验值: 4427
发帖数: 913
精华帖: 2
回复:西门子1200 Modbus RTU速率太慢问题,是否是背板通讯太慢造成?


只看楼主 只看精华 只看精编 6楼 2021-04-20 10:38:11

正常100-200ms就能通信完,看看是不是一直在频繁发读命令导致的应答方没机会回复。


我的世界我做主!1
以下网友喜欢您的帖子:

  
至圣

经验值: 12573
发帖数: 2503
精华帖: 31
回复:西门子1200 Modbus RTU速率太慢问题,是否是背板通讯太慢造成?
精编帖


只看楼主 只看精华 只看精编 8楼 2021-04-20 21:04:40
嗯,看到你说的是跟电脑通讯调试…
这样的话基本上明白了…而且你肯定也是用Win10系统吧?并且还是不知名品牌的RS485数据线吧?
原因在于Win10电脑的串口通讯数据更新周期基本上都是15~100ms之间,再加上你的不知名品牌USB转RS485估计是软模拟串口,通讯延迟50ms以上妥妥的…所以你测试的结果都是电脑的锅。
你应该拿两个PLC来测试,然后USB转RS485线并到PLC间的数据线上,打开电脑的串口调试助手就可以看到通讯数据流,用秒表计时10秒的数据流,然后自己分析数据帧就知道通讯数据帧间隔时间了。

记得以前WinXP的串口数据流可以做到2~3ms一次中断、Win7可以做到10~15ms一次中断,到了反~人~类的Win10就糟糕透顶20ms~100ms………烂系统一大堆无用的系统服务在后台浪费系统资源。
给你个参考:我的Win7系统,Smart200仅ModbusS库,9600波特率读取电脑ModbusSlave10个寄存器,一秒钟大概读取了13~14,也就是70ms一次。用115200波特率也就17~18次。通讯时间大概可以算出来的。9600波特率时PLC请求3 + 4 + 8 = 15ms、电脑响应处理反馈数据(10~15) + (3~10) + 26 =40ms、PLC检验返回数据10ms,一共15+40+10也就65ms以上。波特率增加到57600后减少的是通讯帧时间,帧间隔等待数据检验等时间是没法减小的,时间大概10+20+10也就40ms以上,所以只要是跟电脑扯淡都不会快到哪里去的。
算了,我都不知道我乱说些什么了………
 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2331
发帖数: 382
精华帖: 3
回复:西门子1200 Modbus RTU速率太慢问题,是否是背板通讯太慢造成?
精编帖


只看楼主 只看精华 只看精编 楼主 9楼 2021-04-21 09:59:49
以下是引用Zaxife在2021-04-20 21:04:40的发言 >8楼:嗯,看到你说的是跟电脑通讯调试… 这样的话基本上明白了…而且你肯定也是用Win10系统吧?并且还是不知名品牌的RS485数据线吧? 原因在于Win10电脑的串口通讯数据更新周期基本上都是15~100ms之间,再加上你的不知名品牌USB转RS485估计是软模拟串口,通讯延迟50ms以上妥妥的…所以你测试的结果都是电脑的锅。 你应该拿两个PLC来测试,然后USB转RS485线并到PLC间的数据线上,打开电脑的串口调试助手就可以看到通讯数据流,用秒表计时10秒的数据流,然后自己分析数据帧就知道通讯数据帧间隔时间了。 记得以前WinXP的串口数据流可以做到2~3ms一次中断、Win7可以做到10~15ms一次中断,到了反~人~类的Win10就糟糕透顶20ms~100ms………烂系统一大堆无用的系统服务在后台浪费系统资源。 给你个参考:我的Win7系统,Smart200仅ModbusS库,9600波特率读取电脑ModbusSlave10个寄存器,一秒钟大概读取了13~14,也就是70ms一次。用115200波特率也就17~18次。通讯时间大概可以算出来的。9600波特率时PLC请求3 + 4 + 8 = 15ms、电脑响应处理反馈数据(10~15) + (3~10) + 26 =40ms、PLC检验返回数据10ms,一共15+40+10也就65ms以上。波特率增加到57600后减少的是通讯帧时间,帧间隔等待数据检验等时间是没法减小的,时间大概10+20+10也就40ms以上,所以只要是跟电脑扯淡都不会快到哪里去的。 算了,我都不知道我乱说些什么了………

感谢回复

现场不具备两个485 通讯的条件,等有空回到办公室可以测试。


用计算机测试的时候计算机是win7. USB转串口用的还是不错的,工控机也自带串口,我暂时未测试。

USB转串口同样曾用于与嵌入式设备直接通讯,速率远低于50ms。



工艺第一& 我所说的一切均代表个人意见
以下网友喜欢您的帖子:

  
至圣

经验值: 12573
发帖数: 2503
精华帖: 31
回复:西门子1200 Modbus RTU速率太慢问题,是否是背板通讯太慢造成?
精华帖精华帖星级3级 精编帖


只看楼主 只看精华 只看精编 10楼 2021-04-29 10:11:38

今天测量了Smart200与Modbus Slave 7.1.3、单片机 做9600通讯测试读取6个保持寄存器、写3个保持寄存器。

从测试中可以看出,用Modbus Slave模拟从站与PLC通讯,PLC每秒能够进行13~14次通讯;

而与实际的单片机做通讯,PLC每秒能够进行22~23次通讯;

从这可以看出来,Win7系统的串口通讯Api是做不到每1ms中断接收处理数据的。所以,PLC与PC通讯的时间是不可能达到modbus rtu协议中定义的最小间隔时间的。


这是PLC与PC仿真的通讯次数,每秒大概13~14次:


这是PLC与单片机的通讯次数,每秒大概22~23次:




 
以下网友喜欢您的帖子:

  
侠士

经验值: 1926
发帖数: 181
精华帖: 0
回复:西门子1200 Modbus RTU速率太慢问题,是否是背板通讯太慢造成?


只看楼主 只看精华 只看精编 11楼 2021-10-20 08:35:48

满满得干货,学习了


工控菜鸟
以下网友喜欢您的帖子:

  
至圣

经验值: 37446
发帖数: 5133
精华帖: 47
回复:西门子1200 Modbus RTU速率太慢问题,是否是背板通讯太慢造成?


只看楼主 只看精华 只看精编 12楼 2022-04-14 19:10:51

是如下因素导致的:

(备注:波特率就不重复说了)

主要原因如下:

1:CPU硬件属性里面设置一下通讯负载,建议要求通讯响应快时设置为最大的50%。

2:导致通讯速度慢的原因还有TIA的PC在线时导致通讯带宽占用,所以你实际上电脑不在线监控时你的RTU通讯速度比你在线看到的还要快50%左右的。


建议:

不要在线监控曲线图作为判断通讯质量的好坏,建议监控MB通讯的背景数据的时间作为判断,例如>    50ms就置位输出Q0.0这样不需要在线也可以看到某一个时间段内的通讯有没有超出阀值。






工业起重机防摇摆 QQ:404136820 AntiSwayControl
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
西门子1200 Modbus RTU速率太慢问题,是否是背板通讯太慢造成?
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。