艾默生PLC通讯应用讨论 | |
---|---|
(点击题目可以在互联网中搜索该题目的相关内容)日期:2007-6-25 22:20:17 来源: 作者: 点击: | |
以下讨论一个modbus通讯编程的问题。 由于对modbus指令执行时序、PLC扫描周期之间配合分析不足,经常出现这样的编程问题——不知道为何有的modbus指令不会执行。 如下图所示,PLC是EC10系列,这段程序是在子程序中,本意是调用子程序时,如LM0未置位,顺序执行前2条modbus指令,且当第2条modbus指令执行成功时,通过置位LM1(返回标志),返回主程序。但实际上第2条modbus指令不会被执行。 修改的程序如下。 实际上,上述情况是modbus指令最典型的编程问题。由于modbus指令指令是跨越了多个扫描周期才会完成的,SM124(串口1空闲标志)、还有SM135、SM136等都会在一定的时序上变化,多数编程人员往往忽略了这一点,陷入这样的时序问题中。 这个典型情况还会引发一个更难分析的问题是——modbus指令往往放在子程序中,这样的意外重复调用,由于在一个子程序中modbus指令被悄悄地多执行了一次,也就悄悄地占用了串口,导致其它子程序调用modbus指令时不能正确执行。这个冲突很隐蔽。 最好的办法是,尽量不用SM124等作为触发的主条件,只作为辅助条件。由于modbus指令实际上是上升沿触发的,因此尽量采用上升沿。(当然子程序中往往上升沿是不能用的,要注意)。如下图。 以下是对《艾默生PLC通讯应用讨论》的回复: 匿名用户: 希望楼主今后不断增加这种实用的编程指导! 匿名用户: 请问楼主: 1)这个M140的功能是什么? 2)这里的M135是否应该是SM135? 匿名用户: To 哈工大: 谢谢你的指正. 1、的确M135应为SM135。 2、这段程序是一个应用中开发的一个子程序,其目的主程序调用该子程序时先后执行两次modbus指令。这个M140只是起到区分两条modbus指令先后调用时序的作用——当M140为非时,执行第1条,完毕后置位M140,然后执行第2条。 3、本例是2条modbus指令同在一个子程序中。有许多情况下,一个工程中有多个子程序各含有1条modbus指令(比如对变频器读频率、写频率、启动停止、修改参数等功能分别编写了子程序),这样先后调用子程序时,也必须注意防止上述意外情况产生。 匿名用户: 修改后的示例图如下。 匿名用户: 学习学习 匿名用户: 顶! 匿名用户: 学习了,精辟 匿名用户: 使用EC20与TD3300通讯,哭了好几回了!有时能写入却不能读出,有时能读出却不能写入,真是痛苦啊. 匿名用户: TO柯山人 如果是这样的,请联系艾默生800电话看是什么问题. TD3000和TD3300应该是一样的.我也测试一下看. |
|
上一篇: 嵌入式远程测控终端与PLC通信的研究下一篇: 西门子自由口协议控制范例 |