使用CR1000读取ModBus传感器 _Campbellsci论坛问答

你好

我有一个传感器作为ModBus从设备,支持ModBus功能3(hex 03)。

使用CR1000读取ModBus传感器
_Campbellsci论坛问答

我正在使用操作系统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(寄存器)。

但起始参数对我来说仍然很神秘。

新对话如下:

如果您从寄存器40000开始,那么40002是第三个寄存器,即0、1和2。这可能是因为传感器使用的是协议地址(基数为0)。

*最后更新人:Karl于2010年1月26日下午4:26*

分享到:

原文链接:,转发请注明来源!
海洋仪器网 仪器使用 使用CR1000读取ModBus传感器 _Campbellsci论坛问答
「使用CR1000读取ModBus传感器 _Campbellsci论坛问答」评论列表

发表评论