西门子200 Modbus_MSG 指令DONE完成位的困惑

程序如图,自己是按照循环周期来分析的程序,
周期1:M0.1置1,在网络7执行一次MBUS_MSG,这时VB801,VD802,VW806,还没有被赋值,应该默认为0,M0.3为1,将网络9中M0.2置1,进入第二扫描周期。
周期2:M0.3为1,C0计数一次,执行网络5进行赋值,在网络7中,M0.1已失效,用上周期被置位的M0.2执行一次MBUS_MSG,进行读数据,此时的DONE(m0.3)是上周期的1还是别的?就这个知识点弄不清,导致后续分析不对。网络8是如何执行的?网络8执行后M0.1 M0.2被置位,第三个周期及以后周期程序是如何循环进行读写的?
在论坛查询了一下DONE的问题,小弟愚钝,还是没看明白,求教各位师傅了,谢谢。

问题补充:
非常感谢WWCWWC老师的回答,通过200PLC做实验,已经理解了,将程序贴上来,希望帮助像我一样有困惑的朋友。

图片说明:

西门子200  Modbus_MSG 指令DONE完成位的困惑    西门子200  Modbus_MSG 指令DONE完成位的困惑   

最佳答案

关于done位的含义是指当该读、写指令完成后,一直为ON;需要等待下一个msg指令被执行时才会OFF。
此时done位值是前一次执行msg时的。
网络8的程序是执行msg期间的状态标志,是被复位。因为modbus rtu是轮询扫描机制,所以这个M0.1是作为第一次轮询周期的开始位,等第二次周期开始时失效了的。
当第二次扫描周期时,执行读,第三次扫描周期时,执行写,如此循环。

提问者对于答案的评价:
非常感谢.

专家置评

modbusRTU主站,与多个从站通讯或者与一个从站进行多个读写操作
建议:调用多个MSG,使用轮询方式,本个MSG的done位触发下一个MSG,并且复位本身MSG的触发条件
参考https://support.industry.siemens.com/cs/cn/zh/view/84175754
路径:s7-200plc–>通信章节–>modbus通信

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

(5)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年6月27日
下一篇 2017年6月27日

相关推荐