S7-1200需要读取10个Modbus设备的数据,现在出现一个问题,单独调用一路是每秒可以循环25次,但是同时调用超过1路后,每秒只能进行10次通讯(10路循环一次,2路循环5次)。实验反应这么几个问题:
1:只通讯任何一路时,通讯非常正常无任何故障。
2:通讯多路时,通讯速度明显变慢,且还不如将从站断电无接受信号时的速度快。我将超时时间设置为50ms。将从站全部断电后,发送灯反而比从站正常通讯速度还快。
3:更改波特率几乎没有影响。变更超时时间有影响,但在50ms时达到最快,低于30ms开始出现故障。其他参数看不太明白,瞎设了以下,没任何影响。
4:是否是S1200的发送,和终止机制有什么要求,变换通道地址后,需要什么处理延迟了发送?
5:我现在需要将10从站一秒巡检两次。请大虾帮忙。
我采用的通讯模块是6ES7 241-1CH32-0XB0
最佳答案
1、MODBUS通信是一主多从方式,主站轮询访问从站,访问每个从站都需要一定时间,这个时间取决于通信波特率和通信的字数,所以从站越多,一个轮询需要的时间就越长,这是正常的
2、通信超时时间是指主站发送后等待从站发来响应数据的时间,通信正常的时候,主站只要接到从站响应就会复位“busy"状态位,这有通信非正常的时候(通信中断或干扰)才会一直等待从站响应的数据,直到达到规定的超时时间才会置位故障状态位,和复位busy位,才可能接受新的通信请求。如果通信中断,主站肯定是每个通信超时都去发送新的请求,所以发送状态灯会不停的闪,要注意这么快的LED响应,肉眼判断往往不是很准确
2、由于modbus TRU采用的是用信号中断间隔来判断一个通信贞是否完成,由于这个间隔时间的存在,所以通信波特率调高后,虽然通信速度肯定提高,但是一个通信周期所需要的总时间并没有减少很明显,通信字数少的时候更是如此。如果超时时间太短,不能使一个正常的通信完成,就会出现通信故障
4、modbus 是标准的通信协议,只要支持这个协议的所有设备,运行机制都相同,没有区别
5、要降低轮询时间有以下几个措施:
用较好的屏蔽通信双绞线(注意485通信网络的两个端头要有终端电阻),降低通信干扰,尽量提高波特率
如果从站过多,可以用两个或三个主站模块,降低每个通道的从站数量
如果允许,对于写从站的指令,程序中可以变更发送请求方式,只在需要发送(数据有变更)的时候才发送