#### 版本说明 | 版本号 | 修改内容 | 日期 | 作者 | | --- | --- | --- | --- | | V1.0 | 协议修改为modbus | 2025-07-29 | 吴兆华 | | V1.1 | 1. 修改浮点格式为MODBUS ABCD;
2. 完善控制指令业务逻辑描述;
3. 修复错误; | 2025-09-24 | 吴兆华 | | V1.2 | 1. 修复异常码长度错误 | 2025-09-25 | 吴兆华 | ## 一、基本协议参数 | 参数 | 说明 | | --- | --- | | 通信模式 | Modbus RTU(异步串行通信) | | 从机地址 | 0x01(支持1-247,可通过专用指令修改) | | 波特率 | 115200bps(默认) | | 数据格式 | 8位数据位,1位停止位,无校验(8N1) | | 校验方式 | Modbus CRC16(多项式0xA001) | | 浮点数传输 | ABCD顺序 | | 超时时间 | 200ms(通信无响应超时) | ## 二、寄存器地址映射 采用Modbus标准编号:保持寄存器=3xxxx,输入寄存器=4xxxx; ### 1. 保持寄存器(**40001=0000H**,可读写) | 相对地址(十进制) | 功能描述 | 数据类型 | 单位 | 说明 | | --- | --- | --- | --- | --- | | 0000 | 系统控制命令 | U8 | - | 1:设备初始化
2:开始测量
3:停止测量
4:数据清零
5:开始控温
6:停止控温
详细见《系统控制命令定义》; | | 0001 | 测量模式设置 | U8 | - | 测量模式:
0:旋光度模式;
1:比旋度模式;
2:浓度模式;
3:国际糖度模式; | | 0002-0003 | 目标温度设置 | float | ℃ | 单位°C,范围暂定10°C~60°C | | 0004 | 旋光管长度设置 | U16 | mm | 单位分米,范围暂定100mm~300mm | | 0005 | 测量精度设置 | U8 | - | 暂定:
0:快速测量
1:高精度测量
对应得逻辑待定 | | 0006 | 自动测量次数设置 | U8 | 次 | 暂定1~10 | ### 2. 输入寄存器(30001=0000H,只读) | 相对地址(十进制) | 功能描述 | 数据类型 | 单位 | 说明 | | --- | --- | --- | --- | --- | | 0000-0001 | 实时温度数据 | float | ℃ | | | 0002-0003 | 实时旋光度 | float | ° | | | 0004 | 测量结果-模式代码 | U8 | - | 同测量模式(0x00-0x03) | | 0005-0006 | 测量结果-数值 | float | 取决于模式 | 32位浮点数(旋光度/比旋度:°;浓度:g/100mL;糖度:°Z) | | 0007-0008 | 测量结果-温度 | float | ℃ | 测量时的实际温度 | | 0009 | 设备运行状态 | U8 | - | 低 8 位有效,高 8 位保留:
+ 0x00:准备中(初始化、控温)
+ 0x01:空闲
+ 0x02:校准中
+ 0x03:准备就绪
+ 0x04:测量中 | | 0010~0011 | 异常码 | U32 | - | 每个比特位表示一种异常,对应比特位为1表示有异常,该寄存器为0表示无异常:
bit0:温度异常
bit1:编码器故障
bit2:TEC故障
bit3:电机故障 | | 0012 | 测量完成标志 | U8 | - | 0=未完成,1=完成(自动测量结束后置1) | | 0013-0014 | 设备型号 | U8[4] | - | ASCII码,不足4字符以0x00填充(例:"P1"存储为0x50 0x31 0x00 0x00) | | 0015-0016 | 固件版本 | U8[4] | - | 主版本 + 次版本 + 修订版 + 构建号
按字节依次为主版本、次版本、修订版、构建号(例:0x01 0x02 0x03 0x04表示V1.02.03.04) | ## 三、功能码与命令映射 #### 1. 系统控制命令(写入保持寄存器30001,功能码0x06) | **命令码(U8)** | **功能描述** | **说明** | | | --- | --- | --- | --- | | 1 | 设备初始化 | 1. 设备状态、变量、测量结果等清零/复位,设备切换到校准状态;
2. 设备开始查找零点,并且停止在零点位置,切换到READY状态;
3. 查找零点的结果通过_读设备状态,_获取; | | | 2 | 开始测量 | 1. 设备需要先检查当前状态是否处于READY。否则返回modbus异常码4。 | | | 3 | 停止测量 | 1. 不过处于何种状态,都立即停止;
2. 测量过程中得数据清零,状态复位; | | | 4 | 数据清零 | 1. 测量结果清空 | | | 5 | 开始控温 | 1. 下位机开始控温;
2. 上位机间隔读取温度; | | | 6 | 停止控温 | 1. 下位机停止控制温度; | | ## 四、Modbus标准错误码与设备错误映射 | **错误码 (十进制)** | **错误名称** | **映射描述** | | --- | --- | --- | | 1 | 非法功能 | 请求的功能码未被从设备识别或不支持;
+ 请求得子命令不支持; | | 2 | 非法数据地址 | 数据地址不在设备的可访问范围内
+ 保持原释义 | | 3 | 非法数据值 | 请求中包含的数值不在从设备的允许值范围内
+ 设置目标温度、模式、炫光管长度等; | | 4 | 从设备故障 | 从设备在执行请求时发生了无法修复的故障
+ 编码器故障、电机故障、TEC故障等 | | 5 | 确认 | 从设备已接收请求,但需要更多时间来完成操作
+ 初始化操作,设备找零点、测量操作设备找零点 | | 6 | 从设备忙 | 从设备正忙于处理其他命令,客户端应稍后重新发送请求
+ 设备正在找零点 | | 7 | 否定确认 | 从设备无法执行请求的程序功能
+ 保持原释义 | | 8 | 内存奇偶错误 | 从设备尝试读取扩展内存时检测到奇偶校验错误
+ 保持原释义 | | 10 | 网关路径不可用 | 网关无法为请求分配内部通信路径
+ 无映射 | | 11 | 网关目标设备无响应 | 网关未从目标设备获得响应
+ 无映射1 |