Modbus数据帧都是16进制的,而组态王中的寄存器地址是10进制的,因此需要对数据帧中的地址位做一个从16进制到10进制的转换,比如地址1004对应的就4100,前面再加上功能码对应的寄存器,从而构成变量的寄存器地址。下面以成都乔存的一款比例放大器为例,使用ModbusRTU协议与组态王通讯。
主机发送 03 03 00 04 00 01 C4 9
从机回复 03 03 02 03 EB C1 3A
下面对数据帧进行解析:
其中03 E8是数据,转换成10进制后为1000,即读得该设备的心跳时间为1000。0004对应的10进制就是4,在组态王中还需要做一个地址偏移,即寄存器地址需要加1,就是0005,前面再加上功能码对应的寄存器4,即40005,因此在组态王中的寄存器地址就是40005,如图2所示。
主机发送:03 06 10 04 01 F4 CD 3E
从机回复:03 06 10 04 01 F4 CD 3E
对数据帧进行解析如下:
其中01 F4是数据,转换成10进制后为500,即主机写给该设备的心跳时间为500。1004对应的10进制就是4100,在组态王中还需要做一个地址偏移,即寄存器地址需要加1,就是4101,前面再加上功能码对应的寄存器4,即44101,因此在组态王中的寄存器地址就是44101,如图3所示。