恭喜,你发布的帖子
发布于 2018-04-18 07:51:43
5楼
你的问题有如下几个需要确认:
1) 在“找答案”栏目那里我已经提示过你,在调用“MBUS_CTRL”指令的“EN”管脚时,你使用M0.0的真正目的是什么?在不完全理解指令的前提下,轻易不要“自作主张”,很多时候问题就是这样就此被埋下的。该指令是modbus通讯的初始化指令,常用SM0.0直接调用。如果需要控制modbus通讯的启、停完全可以在下面的轮询机制中进行。
2) 你用外部输入和模拟按钮启、停触发modbus通讯的方法这无可厚非,但缺失了与后面程序段的关联。当没有启动M0.0时,相当于你也没有定义modbus通讯初始化,但是,你且且在这时候反倒运行起“MBUS_MSG”指令,原因是你调用SM0.1标志位作为轮询开始的条件。Modbus通讯启动首要任务是先初始化modbus通讯参数且无错误后,才能启动通讯的读、写,但你且再次违背了协议使用的宗旨。你打开软件帮助F1,查找关键字应该有明确的规定说明。
3) 利用DONE位(判断指令的运行和结束位)来触发下一个通讯指令,该位为完成后值为1,这个思路没有问题,待到执行完最后一个指令的DONE位后,复位该指令并启动第一个指令实现闭合轮询机制,注意关联逻辑顺序,用好置位和复位指令。图示程序段缺失,不完整,如、M0.5的关联;读、写数据地址重叠40001
4) 程序能够精简的尽量精简,如、连续复位、置位2个以上的位操作,用置位、复位指令,在指令的下侧直接填入需要操作的起始位就可以了。
记得【深入 浅出200smart PLC】一书中官方有例子,你可以参考一下。
另外,200smart帮助手册中也有官方轮询例子可以参考一下。
请填写推广理由:
分享
只看
楼主