我的PLC的地址从I0.0到I4.7,ABB做modbus主站来读我的数据,我给它定义的起始地址从10001开始,PLC程序里面MAXIQ里是128个位,要他读128个位,但是主站读上去的全是0,这是为什么了?他说要给他寄存器地址,但是我没有用到保持寄存器啊,还能给他什么了?请教大家这是出在什么问题上了?
问题补充:
我的触摸屏上有状态位显示啊,按说读上来的不应该都是0,想请教的是:
1.我的modbus的起始地址是多少?难道是10001?
2.我要主站读的是实际输入状态,寄存器的地址那是什么了?
最佳答案
说要给他寄存器地址,但是我没有用到保持寄存器啊,还能给他什么了?
用保持寄存器:
1.在子程序MBUS_INIT中设置参数:
MaxHold=3
HoldStart =&VB0
其他参数略。
2.在OB1程序中编程,将IB0至IB4(即I0.0到I4.7)送入VB0至VB4中。在主站读modbus地址40001即为VB0与VB1的数据(IB0与IB1),40002即为VB2与VB3的数据(IB2与IB3),40003即为VB4的数据(IB4)。
注意:由子程序参数HoldStart和MaxHold指定的保持寄存器区,是在S7-200 CPU的V数据存储区中分配,此数据区不能和库指令数据区有任何重叠,否则在运行时会产生错误,不能正常通信。注意modbus 中的保持寄存器区按“字”寻址,即MaxHold规定的是VW而不是VB的个数。
规定了 modbus 保持寄存器区从 VB0 开始,并且保持寄存器为10个字(MaxHold=3),因保持寄存器以字(两个字节)为单位,实际上这个通信缓冲区占用了VB0~VB5共6个字节。因此分配库指令保留数据区时至少要从VB6开始。当然保持区不一定要从VB0开始。
提问者对于答案的评价:
谢谢
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc348085.html