polarimeter_software/docs/旋光仪Modbus通信协议规范.md
2025-09-30 10:37:23 +08:00

77 lines
6.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#### 版本说明
| 版本号 | 修改内容 | 日期 | 作者 |
| --- | --- | --- | --- |
| 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 |