# Moubus协议说明 ## 1使用命令修改设备地址 首先可通过$id命令查询和修改moudbus协议的设备地址: **查询*moubus***协议设备地址:$id(设备出厂默认地址是48,16进制是0X30) ![image-20240313154855454](static/image-20240313154855454.png) **修改moubus协议设备地址**:$id=2 ![image-20240313154906713](static/image-20240313154906713.png) 符合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](static/image-20240313154922187.png) 备注:修改波特率后需要对设备进行重启。 **读取设备地址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](static/image-20240313154956847.png),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