艾默生PLC通讯应用讨论-PLC技术网(www.plcjs.com)-可编程控制器技术门户


艾默生PLC通讯应用讨论

(点击题目可以在互联网中搜索该题目的相关内容)
日期:2007-6-25 22:20:17     来源:   作者: 点击:
点击【】,可以选择字体的大小,以便你阅读.
艾默生EC系列PLC支持modbus协议、自由协议,还有艾默生ECbus协议。

以下讨论一个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通信的研究
下一: 西门子自由口协议控制范例