我才用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