MODBUS指令库的应用

我才用CPU222与智能仪表自由口通讯,但是对于地址对应有些疑问。
 智能仪表给出了详细的数据帧格式:地址,功能,数据,校验
 但是该仪表的数据存储地址编址是从0000H到9999H的,而200PLC给出的保持寄存器地址编码为40001——49999。咨询过该仪表厂家,没有具体对应关系,就是编码从0000H到9999H的。
 那么我在利用modbus协议库指令进行编程时,地址该如何设置呢?比如我要读取仪表0025H中的数据,我在modbus指令中分别尝试将地址设成0025、40025、40026、40038(十进制)、0037等,在调试结果中都是出现错误码3。
 请教一下,我的问题出在了哪里?

问题补充:
我是尝试用PLC的485口连接20几个仪表的,现在调试时先只连了一个仪表。写了几行最简单的程序来调试。程序代码如下:

 网络1
 LD     SM0.0
 =      L60.0
 LD     SM0.0
 =      L63.7
 LD     L60.0
 CALL   MBUS_CTRL:SBR1, L63.7, 9600, 0, 2000, M10.1, VB100
 网络2
 LD     SM0.0
 =      L60.0
 LD     SM0.1
 =      L63.7
 LD     L60.0
 CALL   MBUS_MSG:SBR2, L63.7, 12, 0, 40038, 1, &VB200, M10.2, VB102

 状态表里监视到的结果为
 VB200 无符号 0
 VB102 无符号 3
 VB100 无符号 0
 SM10.1 位 2#1
 SM10.2 位 2#1

 设置的波特率以及从站地址均正确,请教一下问题的原因。谢谢!
 

最佳答案

用40038应该是可以的。VB102=3表示接收超时,从站无响应。

  第一步是使PLC发出的数据符合通讯侦的格式(仪表的通讯协议),将程序下载后,用串口软件接收PLC发的数据.
  如果串口软件收不到数据,那就检查程序,如果数据不符合格式,那再调整库的输入参数,如果符合侦格式,那看能不能把仪表数据读上来,然后再和所有的仪表连接起来,再调试.
  
  有多少仪表?不用库,自己写通讯程序也不麻烦。
  主站库支持超过9999的保持寄存器地址,地址范围为400004-465536。只需在调用MSG子程序时给Addr赋值即可。

提问者对于答案的评价:
谢谢!

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc354092.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月5日 上午1:45
下一篇 2021年7月5日

相关推荐

发表回复

登录后才能评论