Moubus协议说明
1使用命令修改设备地址
首先可通过$id命令查询和修改moudbus协议的设备地址:
查询moubus协议设备地址:$id
修改moubus协议设备地址:$id=2
符合ModBus标准协议规范,具体请参见Modbus协议介绍。
2读写寄存器
采集器支持两种功能码: 0x03-读取寄存器 0x10-写入寄存器。
读取寄存器的指令如下(16进制表示):
地址码 | 功能码 | 起始地址 高字节 | 起始地址 低字节 | 寄存器数量高字节 | 寄存器数量低字节 | CRC校验低字节 | CRC校验高字节 |
---|---|---|---|---|---|---|---|
30 | 03 | 00 | 00 | 00 | 04 |
其中,地址码表示采集器的地址;起始地址表示读取寄存器的起始地址;寄存器数量表示该指令需要读取的寄存器数量。
写入寄存器的指令如下(16进制表示):
地址码 | 功能码 | 起始地址 高字节 | 起始地址 低字节 | 寄存器数量高字节 | 寄存器数量低字节 | 字节数 | 寄存器数据高字节 | 寄存器数据低字节 | CRC校验低字节 | CRC校验高字节 |
---|---|---|---|---|---|---|---|---|---|---|
30 | 10 | 00 | 09 | 00 | 01 | 02 | 00 | 01 |
以设备地址为0x30举例说明:
修改波特率(9600)(16进制):301000150001022580E634
请求
地址码 | 1字节 | 30 |
---|---|---|
功能码 | 1字节 | 10 |
起始地址 | 2字节 | 0015 |
寄存器数量 | 2字节 | 0001 |
字节数 | 1字节 | 02 |
寄存器值 | N*2字节 | 2580 |
CRC校验 | 2字节 | E634 |
N-设置的寄存器个数,这里N=1。
应答
地址码 | 1字节 | 30 |
---|---|---|
功能码 | 1字节 | 10 |
起始地址 | 2字节 | 00 15 |
寄存器数量 | 2字节 | 0001 |
CRC校验 | 2字节 | 14 2C |
备注:修改波特率后需要对设备进行重启。
读取设备地址0x30的平均风向值
问询帧
地址码 | 功能码 | 起始地址 | 数据长度 | 校验码低位 | 校验码高位 |
---|---|---|---|---|---|
0x30 | 0x03 | 0x00 0x01 | 0x00 0x01 | 0XD1 | 0xEB |
应答帧(例如读到平均风向为183°)
地址码 | 功能码 | 字节数 | 平均风向值 | 校验码低位 | 校验码高位 |
---|---|---|---|---|---|
0x30 | 0x03 | 0x02 | 0x00 0XB7 | 0x85 | 0XF6 |
平均风向:
00B7H(十六进制)=183=>平均风向=183°
读取设备地址0x30的最大风向值
问询帧
地址码 | 功能码 | 起始地址 | 数据长度 | 校验码低位 | 校验码高位 |
---|---|---|---|---|---|
0x30 | 0x03 | 0x00 0x02 | 0x00 0x01 | 0X21 | 0xEB |
应答帧(例如读到最大风向为183°)
地址码 | 功能码 | 字节数 | 最大风向值 | 校验码低位 | 校验码高位 |
---|---|---|---|---|---|
0x30 | 0x03 | 0x02 | 0x00 0xB7 | 0x85 | 0XF6 |
最大风向:
00B7H(十六进制)=183=>最大风向=183°
读取设备地址0x30的最小风速值
问询帧
地址码 | 功能码 | 起始地址 | 数据长度 | 校验码低位 | 校验码高位 |
---|---|---|---|---|---|
0x30 | 0x03 | 0x00 0x03 | 0x00 0x01 | 0X70 | 0x2B |
应答帧(例如读到最小风速为2.4m/s)
地址码 | 功能码 | 字节数 | 最小风速值 | 校验码低位 | 校验码高位 |
---|---|---|---|---|---|
0x30 | 0x03 | 0x02 | 0x00 0x18 | 0XC5 | 0x8A |
最小风速:
0018H(十六进制)=24=>最小风速=2.4m/s
读取设备地址0x30的平均风速值
问询帧
地址码 | 功能码 | 起始地址 | 数据长度 | 校验码低位 | 校验码高位 |
---|---|---|---|---|---|
0x30 | 0x03 | 0x00 0x04 | 0x00 0x01 | 0XC1 | 0xEA |
应答帧(例如读到平均风速为2.7m/s)
地址码 | 功能码 | 字节数 | 平均风速值 | 校验码低位 | 校验码高位 |
---|---|---|---|---|---|
0x30 | 0x03 | 0x02 | 0x00 0x1B | 0x85 | 0x8B |
平均风速:
001BH(十六进制)=27=>平均风速=2.7m/s
读取设备地址0x30的最大风速值
问询帧
地址码 | 功能码 | 起始地址 | 数据长度 | 校验码低位 | 校验码高位 |
---|---|---|---|---|---|
0x30 | 0x03 | 0x00 0x05 | 0x00 0x01 | 0X90 | 0x2A |
应答帧(例如读到最大风速为2.7m/s)
地址码 | 功能码 | 字节数 | 最大风速值 | 校验码低位 | 校验码高位 |
---|---|---|---|---|---|
0x30 | 0x03 | 0x02 | 0x00 0x1B | 0x85 | 0x8B |
最大风速:
001BH(十六进制)=27=>最大风速=2.7m/s
读取设备地址0x30的大气温度值
问询帧
地址码 | 功能码 | 起始地址 | 数据长度 | 校验码低位 | 校验码高位 |
---|---|---|---|---|---|
0x30 | 0x03 | 0x00 0x06 | 0x00 0x01 | 0X60 | 0x2A |
应答帧(例如读到大气温度为18.1℃)
地址码 | 功能码 | 字节数 | 大气温度值 | 校验码低位 | 校验码高位 |
---|---|---|---|---|---|
0x30 | 0x03 | 0x02 | 0x00 0xB5 | 0x04 | 0x37 |
大气温度:
00B5H(十六进制)=181=>大气温度=18.1℃
读取设备地址0x30的大气湿度值
问询帧
地址码 | 功能码 | 起始地址 | 数据长度 | 校验码低位 | 校验码高位 |
---|---|---|---|---|---|
0x30 | 0x03 | 0x00 0x07 | 0x00 0x01 | 0X31 | 0xEA |
应答帧(例如读到大气湿度为17.7%RH)
地址码 | 功能码 | 字节数 | 大气湿度值 | 校验码低位 | 校验码高位 |
---|---|---|---|---|---|
0x30 | 0x03 | 0x02 | 0x00 0XB1 | 0x05 | 0xF4 |
大气湿度:
00B1H(十六进制)=177=>大气湿度=17.7%RH
读取设备地址0x30的大气气压值
问询帧
地址码 | 功能码 | 起始地址 | 数据长度 | 校验码低位 | 校验码高位 |
---|---|---|---|---|---|
0x30 | 0x03 | 0x00 0x08 | 0x00 0x01 | 0X01 | 0xE9 |
应答帧(例如读到大气气压为1024.4hpa)
地址码 | 功能码 | 字节数 | 大气气压值 | 校验码低位 | 校验码高位 |
---|---|---|---|---|---|
0x30 | 0x03 | 0x02 | 0x28 0x04 | 0xDA | 0x43 |
大气气压:
2804H(十六进制)=10244=>大气气压=1024.4hpa
读取设备地址0x30的雨量值
问询帧
地址码 | 功能码 | 起始地址 | 数据长度 | 校验码低位 | 校验码高位 |
---|---|---|---|---|---|
0x30 | 0x03 | 0x00 0x09 | 0x00 0x01 | 0X50 | 0x29 |
应答帧(例如读到雨量为0.1mm)
地址码 | 功能码 | 字节数 | 雨量值 | 校验码低位 | 校验码高位 |
---|---|---|---|---|---|
0x30 | 0x03 | 0x02 | 0x00 0x01 | 0X04 | 0x40 |
雨量:
0001H(十六进制)=1=>雨量=0.1mm
读取设备地址0x30总辐射值
问询帧
地址码 | 功能码 | 起始地址 | 数据长度 | 校验码低位 | 校验码高位 |
---|---|---|---|---|---|
0x30 | 0x03 | 0x00 0x0A | 0x00 0x01 | 0XA0 | 0x29 |
应答帧(例如读到总辐射为27.0W/m2)
地址码 | 功能码 | 字节数 | 总辐射值 | 校验码低位 | 校验码高位 |
---|---|---|---|---|---|
0x30 | 0x03 | 0x02 | 0x01 0x0E | 0X45 | 0XD4 |
总辐射:
0000H(十六进制)=270=>总辐射=27.0W/m2
读取设备地址0x30紫外强度值
问询帧
地址码 | 功能码 | 起始地址 | 数据长度 | 校验码低位 | 校验码高位 |
---|---|---|---|---|---|
0x30 | 0x03 | 0x00 0x0B | 0x00 0x01 | 0XF1 | 0XE9 |
应答帧(例如读到紫外强度为5I)
地址码 | 功能码 | 字节数 | 紫外强度值 | 校验码低位 | 校验码高位 |
---|---|---|---|---|---|
0x30 | 0x03 | 0x02 | 0x00 0x05 | 0X05 | 0x83 |
紫外强度:
0005H(十六进制)=5=>紫外强度=5I
MODBUS寄存器说明 版本:V2.1
1 地址:1~100(十进制)。
2 寄存器说明:
地址 | 名称 | 数据长度 | 描述 |
---|---|---|---|
0 | 最小风向 | 2 Bytes | 只读; 无符号整数, |
1 | 平均风向 | 2 Bytes | 只读; 无符号整数, |
2 | 最大风向 | 2 Bytes | 只读; 无符号整数, |
3 | 最小风速 | 2 Bytes | 只读; 无符号整数,读数需缩小10倍; |
4 | 平均风速 | 2 Bytes | 只读; 无符号整数,读数需缩小10倍; |
5 | 最大风速 | 2 Bytes | 只读; 无符号整数,读数需缩小10倍; |
6 | 大气温度 | 2 Bytes | 只读; 有符号整数,读数需缩小10倍; |
7 | 大气湿度 | 2 Bytes | 只读; 无符号整数,读数需缩小10倍; |
8 | 大气气压 | 2 Bytes | 只读; 无符号整数,读数需缩小10倍; |
9 | 雨量 | 2 Bytes | 只读; 无符号整数,读数需缩小10倍; |
10 | 总辐射 | 2 Bytes | 只读; 无符号整数,读数需缩小10倍; |
11 | 紫外强度 | 2 Bytes | 只读; 无符号整数; |
20 | 设备地址 | 2 Bytes | 读写;默认地址:0x30 |
21 | 波特率值 | 2 Bytes | 读写;4800、9600、19200、38400 |
22 | 风速平均时间 | 2 Bytes | 读写;无符号整数;单位:秒,取值:1-3600 |
23 | 温湿度更新时间 | 2 Bytes | 读写;无符号整数;单位:秒; 取值:1-3600,建议不小于10 |
24 | 雨量电源控制 | 2 Bytes | 读写;无符号整数;0关闭;1打开; |
25 | 雨量复位 | 2 Bytes | 只写; 1为复位 |
26 | 软件复位 | 2 Bytes | 只写; 1为复位 |
27 | 恢复出厂设置 | 2 Bytes | 只写; 1为恢复出厂设置(会造成校准参数归零,谨慎使用) |
29 | 雨量强度 | 2 Bytes | 只读; 无符号整数,扩大10倍; |
59 | 坡度 | 2 Bytes | 只读;有符号整形,扩大10倍 |
60 | 纬度整数部分值 | 4 Bytes | 只读; 浮点型,原值,单位:° |
62 | 纬度小数部分值 | 4 Bytes | 只读; 浮点型,原值,单位:° |
64 | 经度整数部分值 | 4 Bytes | 只读; 浮点型,原值,单位:° |
66 | 经度小数部分值 | 4 Bytes | 只读; 浮点型,原值,单位:° |
注解:
1、有符号整型数16进制转换为10进制的方法为:换算为2进制,如果最高位为1,说明温度值为负数,对整体取反,然后加1,然后换算为10进制,最高位为0,则直接换算为10进制。
例:当前温度16进制为:,0xFF8B转换为2进制:0b1111 1111 1000 1011,最高位为1,表示温度为负数,取反变成:0b0000 0000 01110100,加1,变成:0b0000 0000 0111 0101,变成10进制为117,则当前温度值为-11.7℃。
2、其中长整型占用两个寄存器,long AB CD,其中低地址寄存器表示高位,高地址寄存器表示低位
3、其中浮点型占用两个寄存器,采用float DC BA 格式显示:
4、通信接口默认如下:
串口波特率:19200
起始位:1
停止位:1
数据位:8
校验位:无
默认地址:0X30