30001至39999是输入寄存器 当然用04功能码(读取输入寄存器)参考MODBUS协议文本
40001至49999是保持寄存器 用03/06/16功能码(读N个/预置1个/预置N个 保持寄存器)
00001至09999是对应PLC-Y/Q 用01/05/15功能码(读N个/预置1个/预置N个线圈状态)
10001至19999是对应PLC-X/I 用02功能码(读取输入状态)
另外注意各个元件地址对应从0x/1x/3x/4x0001开始,不是0x/1x/3x/4x0000开始
假设D0对应40001不是40000
具体看每个厂家给出的元件地址对应MODBUS通讯协议表格即可
另外要注意各个功能码对应的数据类型:
01/02/05/15功能码(即0x....和1x....)对应的是位 操作
03/04/06/16功能码(即3x....和4x....)对应的是8位字符型1字节 16位整型1字 32位浮点双字
比如:D0作为保持寄存器,其数据类型一般是16位整型
如果使用03或者06功能码操作D0,根据MODBUS的协议规则,必须分成高8bit和低8bit
最终凑成一个18bit整型代表D0寄存器
如果操作输入寄存器,比如04功能码进行模拟量的采集,根据精度要求可以选16bit整型或者32bit浮点,这样就要分成2个8bit或者4个8bit进行处理。
记住,MODBUS的数据处理是按一个字节8bit处理,关心你要操作的数据类型就OK
<此处内容被屏蔽>MODBUS功能码从01-255<此处内容被屏蔽>
回复内容:
对: cjj_f22 30001至39999是输入寄存器 当然用04功能码... 内容的回复!
由于PLC内部元件存在着置位复位、还有的既可以当做位元件,也存在着数据寄存的问题,
比如T既可以采集它的位状态,也可以设置T的具体K值,所以针对T元件可以使用01/02/03/05/06/15/16等功能码。
比如PLC的X/I,Y/Q虽然字面上理解可以分成输入元件和输出线圈,因为PLC元件存在着功能多元化,那么Y/Q同样可以由02功能码采集,而X/I同样可以由01/05/15功能码采集处理。
具体其他电器比如传感仪表、单片机等等具体元件怎么处理,都应当参考厂家提供的说明书因地制宜具体对待。