艾默生PLC通讯应用讨论 点击:3375 | 回复:13



彬彬

    
  • 精华:1帖
  • 求助:0帖
  • 帖子:6帖 | 70回
  • 年度积分:0
  • 历史总积分:167
  • 注册:2002年2月03日
发表于:2007-05-22 23:55:00
楼主
艾默生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指令实际上是上升沿触发的,因此尽量采用上升沿。(当然子程序中往往上升沿是不能用的,要注意)。如下图。




Yorktown

  • 精华:1帖
  • 求助:0帖
  • 帖子:13帖 | 532回
  • 年度积分:0
  • 历史总积分:768
  • 注册:2002年6月28日
发表于:2007-06-15 15:47:00
1楼
希望楼主今后不断增加这种实用的编程指导!

Yorktown

  • 精华:1帖
  • 求助:0帖
  • 帖子:13帖 | 532回
  • 年度积分:0
  • 历史总积分:768
  • 注册:2002年6月28日
发表于:2007-06-20 11:01:00
2楼
请问楼主: 1)这个M140的功能是什么? 2)这里的M135是否应该是SM135?

彬彬

  • 精华:1帖
  • 求助:0帖
  • 帖子:6帖 | 70回
  • 年度积分:0
  • 历史总积分:167
  • 注册:2002年2月03日
发表于:2007-06-20 11:58:00
3楼
To 哈工大:
谢谢你的指正.
1、的确M135应为SM135。
2、这段程序是一个应用中开发的一个子程序,其目的主程序调用该子程序时先后执行两次modbus指令。这个M140只是起到区分两条modbus指令先后调用时序的作用——当M140为非时,执行第1条,完毕后置位M140,然后执行第2条。
3、本例是2条modbus指令同在一个子程序中。有许多情况下,一个工程中有多个子程序各含有1条modbus指令(比如对变频器读频率、写频率、启动停止、修改参数等功能分别编写了子程序),这样先后调用子程序时,也必须注意防止上述意外情况产生。

彬彬

  • 精华:1帖
  • 求助:0帖
  • 帖子:6帖 | 70回
  • 年度积分:0
  • 历史总积分:167
  • 注册:2002年2月03日
发表于:2007-06-20 12:04:00
4楼
修改后的示例图如下。

水中的蓝天

  • [版主]
  • 精华:1帖
  • 求助:3帖
  • 帖子:55帖 | 1688回
  • 年度积分:0
  • 历史总积分:13063
  • 注册:2004年4月02日
发表于:2007-06-22 10:59:00
5楼
学习学习

LN2000分散控制系统

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 228回
  • 年度积分:0
  • 历史总积分:448
  • 注册:2005年4月20日
发表于:2007-06-22 14:11:00
6楼
学习了,精辟

柯山人

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 299回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2007-06-22 16:11:00
7楼
使用EC20与TD3300通讯,哭了好几回了!有时能写入却不能读出,有时能读出却不能写入,真是痛苦啊.

彬彬

  • 精华:1帖
  • 求助:0帖
  • 帖子:6帖 | 70回
  • 年度积分:0
  • 历史总积分:167
  • 注册:2002年2月03日
发表于:2007-06-22 22:27:00
8楼
TO柯山人

如果是这样的,请联系艾默生800电话看是什么问题.
TD3000和TD3300应该是一样的.我也测试一下看.

也可以发邮件给我。tycb@tom.com

艾默生PLC_交流

  • 精华:0帖
  • 求助:0帖
  • 帖子:11帖 | 60回
  • 年度积分:0
  • 历史总积分:119
  • 注册:2006年9月07日
发表于:2007-07-08 19:24:00
9楼
会不会是因为有时候串口不空闲导致通讯时灵时不灵呢?打800电话索取相关例程也许能帮助你,TEL:800-820-6510。

EMERSON-PLC

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 23回
  • 年度积分:0
  • 历史总积分:39
  • 注册:2005年5月22日
发表于:2008-04-30 12:56:01
10楼

我看这个程序只能执行一次之后就第一条MODBUS指令就不能执行了啊?

浪子无情

  • 精华:0帖
  • 求助:0帖
  • 帖子:10帖 | 102回
  • 年度积分:100
  • 历史总积分:2852
  • 注册:2007年7月21日
发表于:2008-05-21 09:19:43
11楼

学习了,谢谢,很好的东西。

ling723

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 73回
  • 年度积分:0
  • 历史总积分:140
  • 注册:2007年10月22日
发表于:2008-07-05 11:58:59
12楼
学习了,之前用modbus的指令总感觉好烦的!

果冻

  • 精华:1帖
  • 求助:0帖
  • 帖子:17帖 | 107回
  • 年度积分:0
  • 历史总积分:314
  • 注册:2005年7月14日
发表于:2011-07-06 15:58:57
13楼
MODRW指令比较简单

热门招聘
相关主题

官方公众号

智造工程师