你好
我有一个传感器作为ModBus从设备,支持ModBus功能3(hex 03)。
我正在使用操作系统17的CR1000。
CR1000 Com1通信参数为9600波特,8个数据位,1个停止位,无奇偶校验。
传感器ModBus地址为1。(十六进制01)
第一个寄存器为40002-40000=2。(十六进制02)
要读取的寄存器数量为2。(十六进制02)
正确的十六进制ModBus字符串是:
01(从设备地址)
03(功能)
00 02(起始寄存器)
00 02(寄存器大小)
65立方厘米(CRC)
我认为相应的ModBusMaster指令应该是这样的:
ModBusMaster(ResCode,Com19600,1,3,ModByte,2,2,3100)
但使用此命令,CR1000将这些字节发送到传感器:01 03 00 01 00 04 15 C9
起始寄存器是“0”;00 01”时;而不是“;00 02〃;,并且寄存器大小为“0”;00 04〃;安装的“;00 02”;。
但当我使用这个命令时,其中ModBusStart是“;3〃;并且ModBusLength是“0”;1〃:
ModBusMaster(结果,Com19600,1,3,ModbusData(),3,1,3100)
然后从CR1000到传感器的输出是正确的:
01 03 00 02 00 02 65立方英尺
有人能解释一下吗?
*最后更新者:蒙特于2010年1月26日下午2:28*
我在CRBasic帮助文件中找到了寄存器大小prameter的解释:
";浮点ModBus数需要两个寄存器。ModbusMaster指令负责询问寄存器的正确数量。请求要从ModBus从设备检索的实际值数。
如果读取或写入浮点值,Length是浮点变量的数量,而不是ModBus寄存器的数量(是变量数量的两倍)";
因此,请求1(fp值)等于2(寄存器)。
但起始参数对我来说仍然很神秘。