Moubus协议说明

1使用命令修改设备地址

首先可通过$id命令查询和修改moudbus协议的设备地址:

查询moubus协议设备地址:$id(设备出厂默认地址是48,16进制是0X30)

image-20240313154855454

修改moubus协议设备地址:$id=2

image-20240313154906713

符合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

image-20240313154922187

备注:修改波特率后需要对设备进行重启。

读取设备地址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进制为:image-20240313154956847,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