MODBUS 入门请教

电池通过MODBUS   读取电量,使用SMART200自带的485的九针口,调用库程序,
1.很纠结引脚填写,MBUS_MSG的ADDR地址到底怎么填写,比如电池厂商给出电量的地址是22,是不是SMART200就要填写40001+22=40023,才可以读取?
2.现在MBUS_CRTL  一直报警代码为3,什么原因?
把电池的技术参数跟程序也截图到附件,谢谢 大家。。。

问题补充:
MBUS_MSG引脚RW只能写0或者1,3或者6不能写,但是有的说明书3是读取呀,6写入

图片说明:

MODBUS  入门请教    MODBUS  入门请教    MODBUS  入门请教    MODBUS  入门请教   

最佳答案

1、从最后一张图可以看出:读功能码03、写功能码06,都是对寄存器的读写,03读多个寄存器,06写单个寄存器。因此给MBUS_MSG指令的ADDR引脚赋值一定是4开头。你说的40001+22=40023可能是对的(若电池的寄存器是从0开始编址的),也有可能是40022(本身和西门子一样是从1开始编址的。)
2、主站初始化指令显示错误代码3:3= 超时无效。
从你的程序看:9600波特率、无奇偶校验,使用了PLC CPU自带的RS485。与你的电池保护板一致。是正确的。排查问题建议:
       a,查看接线是否可靠。可以交换A、B两根电缆,试一试。不同公司的产品定义AB极性可能不一致。
       b,建议查看库指令使用,看看库存储器区有没有和其它应用有重叠。
3、关于补充问题:
    添加到通信报文的功能码,是根据你操作的寄存器类型(是以0开头离散输出,还是1离散输入、或者3模拟量输入、4保持性寄存器开头)以及是读取还是写入共同决定的。这由指令自己内部完成,用户只需要告诉指令读写那些内容即可。也就是说,你上面提到的读多个寄存器内容功能码是由于你赋值RW=0,Addr=40023而由指令内部讲功能码03添加到通信报文的。

提问者对于答案的评价:
回答  都很好谢谢

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年10月30日
下一篇 2020年10月30日

相关推荐