polarimeter_software/docs/旋光仪Modbus通信协议规范.md

77 lines
6.0 KiB
Markdown
Raw Permalink Normal View History

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