S7-200的modbus RTU库里holdstart所指的地址,是主机读取从机保持寄存器的起始地址,如果主机要给从机发请求强置寄存器(M0dbus功能16),那从机把接收到的信息放在哪个起始地址中呢?
问题补充:
恩,谢谢LaoHuai。
我的程序是这样的:通讯程序采用的是ModbusRTU库,从机Holdstart设置为VB100,如果主机发送的请求报文中功能码为16,那么主机发送给从机的数据是否也放在VB100,若不是,放在哪?
如果主机发送的请求报文功能码为5或者15,是否直接强制QB的位值,若不是,是怎样的?
我是初学者,希望能得到大家的帮助,不胜感激, jugong,嘿嘿!
最佳答案
1、从机把接收到的信息放在哪个起始地址中呢?
答:
因为从站支持某种协议,所以它肯定要接受这种协议报文,至于接收后放到哪个寄存器里,恐怕只有设备生产商的设计人员知道。我们做工程应用的人只需要知道从站设备是否支持所选协议即可;关于从站是怎么处理接收报文,我们不需要知道。
但从站接收到报文后,大概的流程是这样的:
按照协议的规定,检测有无报文发送过来——>有的话——>判断是否符合本机支持的报文(比方说报文的头、校验数据是否符合协议)——>符合的话——>检查报文是否是发给本站的(只要看从站号)——>若是发给本站的——>那么检查发送过的指令(是读命令、写命令、读什么、写什么、怎么写)——>检查出具体的报文指令后——>检查这些指令要操作(读或写)哪些寄存器——>操作寄存器——>或从站做一个符合协议的报文反馈给主站。
2、主机发送给从机的数据是否也放在VB100,若不是,放在哪?
答:
不一定。你不需要知道从站把你主站发送过来的报文信息放在哪里,但必须知道主站是怎么发送的。
3、如果主机发送的请求报文功能码为5或者15,是否直接强制QB的位值,若不是,是怎样的?
答:
05 是写单个线圈;15是写多个线圈。
可以直接强制QB,但是有个前提条件:程序里没有对这个线圈进行写操作(置位或复位)。
提问者对于答案的评价:
谢谢!非常感谢!
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc345547.html