电池通过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写入
图片说明:
最佳答案
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