求教:S7-1200 ModBus RTU 通信问题

用CM1241进行ModBus RTU 通信,开机用MB_COMM_LOAD初始,用MB_MASTER轮寻对两个变频器发送或接收数据,一般情况下正常。但运行中需要改变通信参数,如波特率,在编程时没有注意到当正在忙于通信时,出错,BUSY位置1,不会进行超时报错,通信一直停在BUSY。后来加了判别BUSY位,只有当不在通信时,再修改参数执行MB_COMM_LOAD,正常。现在想请教的是,如何复位BUSY位置?万一在运行中又出现通信一直停在BUSY状态,又不报错如何?
试过能判别BUSY位当一直保持1的状态,但就是没有办法复位,进行重信通信。

最佳答案

MB_COMM_LOAD指令在OB100里调用一次就行了。
运行中修改通信口的参数,可以用PORT_CFG指令

图片说明:

求教:S7-1200 ModBus RTU 通信问题  求教:S7-1200 ModBus RTU 通信问题  

提问者对于答案的评价:
谢谢

专家置评

通过MB_MASTER的状态位实现该modbus通信完成后,可以使用MB_COMM_LOAD 对端口重新做设置,设置状态位表示成功后,可以使用MB_MASTER工作,但是这个时序一定要控制好,不然会导致1241死机。就像楼主目前出现的busy这样的状态(死机),没有任何报错,也无法进行复位。所以一定要小心,注意时序问题。
PORT_CFG,是在协议ASCII中使用,不能给modbus协议使用。如果楼主使用ASCII自编modbus,可以使用该PORT_CFG,但是功能块就不是使用MB_MASTER。

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc191547.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年8月3日 上午1:33
下一篇 2017年8月3日 上午1:33

相关推荐