第一次用smart200的modbus主站功能,研究一宿,心得如下(大部分是基于以前型号PLC使用上的区别)
1、MBUS_MSG模块的DONE信号,只要EN保持为True,那么DONE信号会一直持续到First引脚下次激活。
2、DONE信号类似Set,即使EN和First信号变为False,Done引脚关联的变量依然是True,除非对其进行Reset。
3、MBUS_CTRL功能块的Timeout决定了通讯失败时多长时间返回通讯超时信号。
如果通信超时的情况下,Smart200会连续发送三次报文。
——————————————————————————————————————————
前两条与施耐德的Read_var,AB的msg的done信号完全不同,所以,在通过一个功能块进行轮询的时候,就无法用done的反作为通讯功能块的是触发信号(AB的msg指令典型用法),而且涉及到扫描周期和执行顺序的原因,折腾一宿,搞定用一个功能块实现周期轮询(基于done信号,非定时轮询),后续考虑用状态机实现,探索中。代码如下:
支持上电自动运行。
-----------------------------------------------------------------------------------
第3条,可能是系统默认设置,通讯超时重发3次,在施耐德的模块配置中支持配置是否重发,samrt中没有找到配置的地方。
附一下,抓取的报文: