|
|
使用CP341完成Modbus通讯的心得与疑问 |
|
水先生 发表于 2006-11-19 10:50:00 | 需要使用CP341模块,通过modbus协议(CP341为master),完成与某公司的机组状态在线监测系统的如下任务:送在线监测系统666个机组温度量,取回132个振摆度过大报警信号。本以为这项工作一个晚上可以完成,结果不断出现问题,又多干了一天。
1、使用modbus功能码16,分6次送温度量,每次111个。在线监测系统每次都能正确接收和显示,但每次CP341都报错,OK_counter始终为零,Error_counter每次加1。某公司检查了reply message的内容、顺序都是对的,问题何在?想起FB8(P_SND_RK)和FB7(P_RCV_RK)的Status输出能显示错误代码,顺着代码(08 30H)查相关资料,解释为“reply monitoring time has elapsed”。跑到屏柜后面的CP341细看收发灯,发现每次发信灯闪亮后,大约3秒左右收信灯才会亮。又检查CP341的设置,其中一项为reply monitoring time,缺省为2000ms,原来如此!
对于111个温度量的报文,该公司的系统为何回答得如此慢,我不得而知。后来,某公司修改了modbus通讯程序,再试后OK了,从灯上判断,对方的reply延时短于一秒,明显加快了。
2、使用modbus功能码1,分6次取报警开关量,每次22个。每次CP341都报错,并且读上来的状态都是off。这回有经验了,直接察看错误代码,这回是从站应答错误。某公司检查了程序源码,果然发现错误,说是长度计算有误,修改后再试OK。
3、通讯正常后,在我这边的监控系统上定义报警信号,完成后又发现与某公司的定义编号对不上,仔细核对发现同一个word中的两个byte是反的,对方的0-7实际放在我的高字节,而8-15又在我的低字节里。我已无心恋战,埋头在自己的PLC程序中将两个字节交换过来。我查看了modbus协议文本,在reply message中应该将同一个word中的低字节放前,高字节置后,不知某公司的程序是不是这样做的。如果他们是对的,问题又出在哪里呢?
唉,说句长洋人威风的话,每当我使用老外的产品与国内的系统调通讯时,错的总是在国内的系统,我们自己的通讯程序总会有想象不到的问题。另一方面,西门子软件模块设计的诊断代码确实对查找原因大有帮助。
|
| 阅读全文() | 回复(2) | 引用通告() | 编辑 |
| Re:使用CP341完成Modbus通讯的心得与疑问 |
|
liwenqun发表评论于2007-7-10 15:21:00 | 300 400 的高低字节需要注意滴
|
| 个人主页 | 引用 | 返回 | 删除 |
| Re:使用CP341完成Modbus通讯的心得与疑问 |
|
kiss发表评论于2006-12-26 22:24:00 | 嘿嘿,西门子的TDC与S7 300 通讯时高低位也是反的。
|
| 个人主页 | 引用 | 返回 | 删除 |
发表评论:
|