Files
ivfstation/ref/上位机与主控通信协议.md
2025-07-07 14:29:26 +08:00

316 lines
11 KiB
Markdown
Raw 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.

# 上位机与主控通信协议
## 1. 协议概述
**协议名称:** 上位机-主控通信协议
**协议版本:** V1.0
**通信方式:** 串口通信
**波特率:** 115200
**数据位:** 8位
**停止位:** 1位
**校验位:**
## 2. 基础消息格式
```
[头部][长度][消息类型][地址字段][参数][校验和][尾部]
|HEAD |LEN |MSG |ADDR |PARA |CHKSUM |END |
|2字节|4字节|1字节 |变长 |变长 |2字节 |1字节|
```
**地址字段格式:**
- **控制指令:** [控制地址] (1字节)
- **子设备指令:** [端口号][设备地址] (5字节)
**字段说明:**
- **HEAD头部** 固定值 0x7E7E
- **LEN长度** 从消息类型到校验和的字节数
- **MSG消息类型** 具体指令类型
- **ADDR地址字段** 根据指令类型变化
- **PARA参数** 指令参数,长度可变
- **CHKSUM校验和** 从消息类型到参数的所有字节累加和
- **END尾部** 固定值 0x0D
## 3. 指令集
### 3.1 控制指令0x5x系列
| 指令码 | 指令名称 | 参数格式 | 说明 |
|--------|----------|----------|------|
| 0x51 | 端口配置设置 | 变长 | 设置端口和设备配置 |
| 0x52 | 轮询配置设置 | 1字节 | 设置轮询模式 |
| 0x53 | 报警设置 | 2字节 | 设置报警参数 |
| 0x54 | UTC时间设置 | 4字节 | 设置系统时间 |
| 0x55 | 标签设置 | 变长 | 设置设备标签 |
| 0x56 | 配置清除 | 1字节 | 清除配置参数 |
| 0x57 | 混气机切换 | 0字节 | 触发混气机切换 |
| 0x58 | 混气机切换配置 | 变长 | 设置切换配置 |
| 0x59 | 重启指令 | 0字节 | 重启主控设备 |
| 0x5A | 轮询调试设置 | 变长 | 设置调试参数 |
### 3.2 舱室控制指令0x1x系列
| 指令码 | 指令名称 | 参数格式 | 说明 |
|--------|----------|----------|------|
| 0x11 | 温度设置 | 8字节 | 设置舱室温度 |
| 0x12 | PID参数设置 | 17字节 | 设置PID参数 |
| 0x13 | 状态设置 | 1字节 | 设置运行状态 |
| 0x14 | UTC时间设置 | 4字节 | 设置时间 |
| 0x15 | 温度校准设置 | 变长 | 设置温度校准 |
| 0x16 | 加热器开关 | 1字节 | 控制加热器 |
| 0x17 | 加热器功率 | 1字节 | 设置功率比例 |
| 0x18 | 配置设置 | 变长 | 设置配置参数 |
| 0x19 | 标签设置 | 变长 | 设置设备标签 |
| 0x1A | 配置清除 | 1字节 | 清除配置 |
| 0x1B | 重启指令 | 0字节 | 重启设备 |
| 0x1C | 超温设置 | 9字节 | 设置超温保护 |
### 3.3 混气机控制指令0x2x系列
| 指令码 | 指令名称 | 参数格式 | 说明 |
|--------|----------|----------|------|
| 0x21 | 温度设置 | 4字节 | 设置混气机温度 |
| 0x22 | CO2浓度设置 | 4字节 | 设置CO2浓度 |
| 0x23 | O2浓度设置 | 4字节 | 设置O2浓度 |
| 0x24 | 泵设置 | 2字节 | 设置泵参数 |
| 0x25 | UVC LED设置 | 1字节 | 控制UVC LED |
| 0x26 | 排气阀设置 | 1字节 | 控制排气阀 |
| 0x27 | 排气校准 | 1字节 | 排气阀校准 |
| 0x28 | UTC时间设置 | 4字节 | 设置时间 |
| 0x29 | 蜂鸣器设置 | 1字节 | 控制蜂鸣器 |
| 0x2A | 温度校准 | 变长 | 温度校准 |
| 0x2B | CO2校准 | 变长 | CO2校准 |
| 0x2C | O2校准 | 变长 | O2校准 |
| 0x2D | 配置设置 | 变长 | 设置配置 |
### 3.4 查询指令
| 指令码 | 指令名称 | 参数格式 | 说明 |
|--------|----------|----------|------|
| 0x1F | 舱室信息查询 | 0字节 | 查询舱室信息 |
| 0x2F | 混气机信息查询 | 0字节 | 查询混气机信息 |
| 0x5D | 所有信息查询 | 0字节 | 查询所有设备信息 |
| 0x5E | 配置查询 | 0字节 | 查询配置信息 |
| 0x5F | 主控信息查询 | 0字节 | 查询主控信息 |
### 3.5 日志指令0x4x系列
| 指令码 | 指令名称 | 参数格式 | 说明 |
|--------|----------|----------|------|
| 0x41 | 日志级别设置 | 2字节 | 设置日志级别 |
| 0x42 | 日志级别查询 | 0字节 | 查询日志级别 |
### 3.6 升级指令0x3x系列
| 指令码 | 指令名称 | 参数格式 | 说明 |
|--------|----------|----------|------|
| 0x31 | 版本查询 | 0字节 | 查询设备版本 |
| 0x32 | 升级开始 | 变长 | 开始升级 |
| 0x33 | 升级传输 | 变长 | 传输升级数据 |
| 0x34 | 升级结束 | 变长 | 结束升级 |
| 0x35 | 序列号查询 | 0字节 | 查询序列号 |
## 4. 响应格式
### 4.1 控制指令响应格式
```
[头部][长度][消息类型][控制地址][ACK][参数][校验和][尾部]
|HEAD |LEN |MSG |CTRL_ADDR|ACK |PARA |CHKSUM |END |
|2字节|4字节|1字节 |1字节 |1字节|变长 |2字节 |1字节|
```
### 4.2 子设备指令响应格式
```
[头部][长度][消息类型][端口][设备地址][ACK][参数][校验和][尾部]
|HEAD |LEN |MSG |PORT|DEV_ADDR |ACK |PARA |CHKSUM |END |
|2字节|4字节|1字节 |1字节|4字节 |1字节|变长 |2字节 |1字节|
```
**ACK字段说明**
- **0x00** DEVICE_OK - 命令执行成功
- **0x01** DEVICE_BUSY - 设备忙
- **0x02** DEVICE_CMD_ERR - 命令错误
- **0x03** DEVICE_ADDR_ERR - 地址错误
- **0x04** DEVICE_PARAM_ERR - 参数错误
- **0x05** DEVICE_CHKSUM_ERR - 校验错误
- **0x06** DEVICE_CMD_NOT_RSP - 包头包尾错误
- **0x07** DEVICE_DATA_PUT_ERR - 数据下发错误
- **0x08** DEVICE_DATA_GET_ERR - 数据获取错误
- **0x09** DEVICE_ISSUED_ERR - 命令处理错误
- **0x0A** DEVICE_UPGRADE_ERR - 升级错误
- **0xFF** DEVICE_UNKNOWN_ERR - 未知错误
## 5. 通信示例
### 5.1 设置舱室温度
**上位机发送:**
```
7E 7E 00 08 11 03 00000001 41 20 00 00 41 30 00 00 8A 0D
|头 |长 |类型|端口|设备地址 |上盖温度|底盖温度|校验|尾|
```
**主控响应:**
```
7E 7E 00 0B 11 03 00000001 00 01 00 02 00 8A 0D
|头 |长 |类型|端口|设备地址 |ACK |设备1|设备2|校验|尾|
```
### 5.2 查询所有舱室信息
**上位机发送:**
```
7E 7E 00 05 1F 03 00000001 25 0D
|头 |长 |类型|端口|设备地址 |校验|尾|
```
**主控响应:**
```
7E 7E 00 3F 1F 03 00000001 00 [舱室信息数据] 校验 0D
|头 |长 |类型|端口|设备地址 |ACK |数据(60字节) |校验|尾|
```
### 5.3 设置端口配置
**上位机发送:**
```
7E 7E 00 0C 51 AB 03 01 00000001 02 02 00000001 校验 0D
|头 |长 |类型|控制地址|端口配置数据 |校验|尾|
```
**主控响应:**
```
7E 7E 00 05 51 AB 00 校验 0D
|头 |长 |类型|控制地址|ACK |校验|尾|
```
## 6. 数据结构定义
### 6.1 端口配置格式
```c
typedef struct {
uint8_t port; // 端口号1-4
uint8_t type; // 设备类型1-舱室, 2-混气机
uint32_t addr; // 设备地址:位掩码
} port_config_t;
```
### 6.2 轮询模式配置
```c
typedef enum {
CONTROL_POLL_NONE = 0x00, // 不轮询
CONTROL_POLL_CABIN = 0x01, // 仅轮询舱室
CONTROL_POLL_GASMIX = 0x02, // 仅轮询混气机
CONTROL_POLL_ALL = 0x03, // 轮询所有设备
} control_poll_e;
```
### 6.3 主控信息结构
```c
typedef struct {
uint8_t addr; // 控制地址
uint8_t alarm_id; // 报警状态
uint8_t cabin_port; // 舱室端口
uint8_t gasmix_port; // 混气机端口
uint8_t led[16]; // LED显示状态
uint8_t swtch_state; // 切换状态
uint8_t state; // 主控状态
uint32_t ticks; // 运行时间
uint32_t utc; // UTC时间
} control_info_t;
```
## 7. 设备状态定义
### 7.1 舱室状态
```c
typedef enum {
CABIN_NOT_USED = 0X00, // 未使用
CABIN_RUNNING = 0x01, // 正常运行
CABIN_TEMP_DRIFT = 0X02, // 温度漂移
CABIN_OPEN_TOO_LONG = 0X03, // 开盖时间过长
CABIN_SELECTED = 0x04, // 被选中
CABIN_SENSOR_ERR = 0X05, // 传感器故障
CABIN_HEAT_POWER_ERR = 0X06, // 加热器故障
CABIN_CPU_POWER_ERR = 0X07, // CPU电源故障
CABIN_SENSOR_PWR_ERR = 0X08, // 传感器电源故障
CABIN_UNKNOWN_STATE = 0XFF // 未知状态
} cabin_state_e;
```
### 7.2 混气机状态
```c
typedef enum {
GASMIX_NOT_USED = 0X00, // 未使用
GASMIX_RUNNING = 0x01, // 正常运行
GASMIX_TEMP_EXCESS = 0X02, // 温度异常
GASMIX_PRESSURE_EXCESS = 0X03, // 压力异常
GASMIX_FLOW_EXCESS = 0X04, // 流量异常
GASMIX_O2_SOLUB_EXCESS = 0x05, // O2浓度异常
GASMIX_CO2_SOLUB_EXCESS = 0X06, // CO2浓度异常
GASMIX_SENSOR_ERR = 0X07, // 传感器故障
GASMIX_HEAT_POWER_ERR = 0X08, // 加热器故障
GASMIX_CPU_POWER_ERR = 0X09, // CPU电源故障
GASMIX_GAS_INPUT_OFF = 0X0A, // 气路关闭
GASMIX_TEMP_CTRL_OFF = 0X0B, // 温度控制关闭
GASMIX_SHUTDOWN = 0X0C, // 关机
GASMIX_UNKNOWN_STATE = 0XFF // 未知状态
} gasmix_state_e;
```
### 7.3 主控状态
```c
typedef enum {
CONTROL_RUNNING = 0X00, // 正常运行
CONTROL_UPGRADE = 0X01, // 升级状态
CONTROL_GASMIX_SWITCH = 0X02, // 混气机切换状态
CONTROL_CPU_POWER_ERR = 0XA0, // CPU电源异常
CONTROL_UNKNOWN_STATE = 0XFF // 未知状态
} app_control_state_e;
```
## 8. 错误处理
- **通信超时:** 上位机等待响应超时,应重发指令
- **校验错误:** 接收方检测到校验错误,不响应
- **参数错误:** 参数格式或范围错误返回DEVICE_PARAM_ERR
- **地址错误:** 设备地址不存在返回DEVICE_ADDR_ERR
## 9. 注意事项
1. **地址字段:** 控制指令使用1字节控制地址子设备指令使用5字节端口+设备地址)
2. **超时时间:** 建议上位机设置3-5秒响应超时
3. **重发机制:** 建议上位机实现指令重发机制
4. **状态同步:** 上位机应定期查询设备状态以保持同步
5. **错误恢复:** 通信异常时应能自动恢复
6. **并发控制:** 避免同时发送多个指令
7. **数据校验:** 所有数据都应进行校验和验证
## 10. 通信流程
### 10.1 基本通信流程
1. 上位机发送指令
2. 主控接收并解析指令
3. 主控执行相应操作
4. 主控返回执行结果
5. 上位机接收并处理响应
### 10.2 子设备指令流程
1. 上位机发送子设备指令
2. 主控接收并解析指令
3. 主控转发指令到子设备
4. 子设备执行并返回结果
5. 主控接收子设备响应
6. 主控处理并返回给上位机
### 10.3 查询指令流程
1. 上位机发送查询指令
2. 主控接收并解析指令
3. 主控查询本地数据或子设备
4. 主控打包查询结果
5. 主控返回数据给上位机