初始提交
This commit is contained in:
316
ref/上位机与主控通信协议.md
Normal file
316
ref/上位机与主控通信协议.md
Normal file
@ -0,0 +1,316 @@
|
||||
# 上位机与主控通信协议
|
||||
|
||||
## 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. 主控返回数据给上位机
|
232
ref/主控与舱室通信协议.md
Normal file
232
ref/主控与舱室通信协议.md
Normal file
@ -0,0 +1,232 @@
|
||||
# 主控与舱室通信协议
|
||||
|
||||
## 1. 协议概述
|
||||
|
||||
**协议名称:** 主控-舱室通信协议
|
||||
**协议版本:** V1.0
|
||||
**通信方式:** 串口通信
|
||||
**波特率:** 115200
|
||||
**数据位:** 8位
|
||||
**停止位:** 1位
|
||||
**校验位:** 无
|
||||
|
||||
## 2. 基础消息格式
|
||||
|
||||
```
|
||||
[头部][长度][消息类型][设备地址][参数][校验和][尾部]
|
||||
|HEAD |LEN |MSG |ADDR |PARA |CHKSUM |END |
|
||||
|2字节|4字节|1字节 |1字节 |变长 |2字节 |1字节|
|
||||
```
|
||||
|
||||
**字段说明:**
|
||||
- **HEAD(头部):** 固定值 0x7E7E
|
||||
- **LEN(长度):** 从消息类型到校验和的字节数
|
||||
- **MSG(消息类型):** 具体指令类型
|
||||
- **ADDR(设备地址):** 舱室设备地址(1-32)
|
||||
- **PARA(参数):** 指令参数,长度可变
|
||||
- **CHKSUM(校验和):** 从消息类型到参数的所有字节累加和
|
||||
- **END(尾部):** 固定值 0x0D
|
||||
|
||||
## 3. 指令集
|
||||
|
||||
### 3.1 舱室控制指令(0x1x系列)
|
||||
|
||||
| 指令码 | 指令名称 | 参数格式 | 说明 |
|
||||
|--------|----------|----------|------|
|
||||
| 0x11 | 温度设置 | 8字节 | 设置上盖和底盖温度 |
|
||||
| 0x12 | PID参数设置 | 17字节 | 设置PID控制参数 |
|
||||
| 0x13 | 状态设置 | 1字节 | 设置舱室运行状态 |
|
||||
| 0x14 | UTC时间设置 | 4字节 | 设置UTC时间戳 |
|
||||
| 0x15 | 温度校准设置 | 变长 | 设置温度传感器校准 |
|
||||
| 0x16 | 加热器开关 | 1字节 | 控制加热器开关 |
|
||||
| 0x17 | 加热器功率 | 1字节 | 设置加热器功率比例 |
|
||||
| 0x18 | 配置设置 | 变长 | 设置舱室配置参数 |
|
||||
| 0x19 | 标签设置 | 变长 | 设置设备标签 |
|
||||
| 0x1A | 配置清除 | 1字节 | 清除配置参数 |
|
||||
| 0x1B | 重启指令 | 0字节 | 重启舱室设备 |
|
||||
| 0x1C | 超温设置 | 9字节 | 设置超温保护参数 |
|
||||
|
||||
### 3.2 混气机控制指令(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字节 | 设置UTC时间 |
|
||||
| 0x29 | 蜂鸣器设置 | 1字节 | 控制蜂鸣器 |
|
||||
| 0x2A | 温度校准 | 变长 | 温度传感器校准 |
|
||||
| 0x2B | CO2校准 | 变长 | CO2传感器校准 |
|
||||
| 0x2C | O2校准 | 变长 | O2传感器校准 |
|
||||
| 0x2D | 配置设置 | 变长 | 设置混气机配置 |
|
||||
|
||||
### 3.3 查询指令
|
||||
|
||||
| 指令码 | 指令名称 | 参数格式 | 说明 |
|
||||
|--------|----------|----------|------|
|
||||
| 0x1F | 舱室信息查询 | 0字节 | 查询舱室状态信息 |
|
||||
| 0x2F | 混气机信息查询 | 0字节 | 查询混气机状态信息 |
|
||||
|
||||
## 4. 响应格式
|
||||
|
||||
### 4.1 成功响应格式
|
||||
|
||||
```
|
||||
[头部][长度][消息类型][设备地址][ACK][参数][校验和][尾部]
|
||||
|HEAD |LEN |MSG |ADDR |ACK |PARA |CHKSUM |END |
|
||||
|2字节|4字节|1字节 |1字节 |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 - 未知错误
|
||||
|
||||
### 4.2 查询响应数据格式
|
||||
|
||||
**舱室信息响应(0x1F):**
|
||||
```c
|
||||
typedef struct {
|
||||
float temp_up; // 上盖温度
|
||||
float temp_dw; // 底盖温度
|
||||
float tmp117; // TMP117温度
|
||||
float pid_ctrl_up; // 上盖PID输出
|
||||
float pid_ctrl_dw; // 底盖PID输出
|
||||
uint8_t heater_power; // 加热器开关状态
|
||||
uint8_t heater_ratio; // 加热器功率比例
|
||||
uint8_t swtch; // 舱室开关状态
|
||||
uint8_t state; // 舱室运行状态
|
||||
uint8_t stage; // 运行阶段
|
||||
uint8_t addr; // 设备地址
|
||||
uint32_t err_flag; // 错误标志
|
||||
uint32_t ticks; // 运行时间
|
||||
uint32_t utc; // UTC时间
|
||||
} cabin_info_t;
|
||||
```
|
||||
|
||||
**混气机信息响应(0x2F):**
|
||||
```c
|
||||
typedef struct {
|
||||
gasmixing_gas_t gas; // 气体信息
|
||||
gasmixing_pump_t pump; // 泵信息
|
||||
gasmixing_cumsum_t cumsum; // 累计信息
|
||||
gasmixing_adc_t adc; // ADC信息
|
||||
uint8_t ev_return; // 排气阀状态
|
||||
uint8_t ev_calib; // 排气校准状态
|
||||
uint8_t uvc_led; // UVC LED状态
|
||||
uint8_t beep; // 蜂鸣器状态
|
||||
uint8_t power_12v; // 12V电源状态
|
||||
uint8_t state; // 运行状态
|
||||
uint32_t ticks; // 运行时间
|
||||
uint32_t utc; // UTC时间
|
||||
} gasmixing_info_t;
|
||||
```
|
||||
|
||||
## 5. 通信示例
|
||||
|
||||
### 5.1 设置舱室温度
|
||||
|
||||
**主控发送:**
|
||||
```
|
||||
7E 7E 00 08 11 01 41 20 00 00 41 30 00 00 8A 0D
|
||||
|头 |长 |类型|地址|上盖温度|底盖温度|校验|尾|
|
||||
```
|
||||
|
||||
**舱室响应:**
|
||||
```
|
||||
7E 7E 00 05 11 01 00 8A 0D
|
||||
|头 |长 |类型|地址|ACK |校验|尾|
|
||||
```
|
||||
|
||||
### 5.2 查询舱室信息
|
||||
|
||||
**主控发送:**
|
||||
```
|
||||
7E 7E 00 05 1F 01 25 0D
|
||||
|头 |长 |类型|地址|校验|尾|
|
||||
```
|
||||
|
||||
**舱室响应:**
|
||||
```
|
||||
7E 7E 00 3F 1F 01 00 [舱室信息数据] 校验 0D
|
||||
|头 |长 |类型|地址|ACK |数据(60字节) |校验|尾|
|
||||
```
|
||||
|
||||
## 6. 状态管理
|
||||
|
||||
### 6.1 轮询状态(SUBDEV_POLL_STATE_POLL)
|
||||
- 用于周期性查询设备状态
|
||||
- 超时时间:100ms
|
||||
- 队列:g_subdev_poll_queue
|
||||
|
||||
### 6.2 指令状态(SUBDEV_POLL_STATE_ISSUE)
|
||||
- 用于下发控制指令
|
||||
- 超时时间:3000ms
|
||||
- 队列:g_subdev_issue_queue
|
||||
|
||||
## 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;
|
||||
```
|
||||
|
||||
## 8. 错误处理
|
||||
|
||||
- **通信超时:** 主控等待响应超时,应重发指令
|
||||
- **校验错误:** 接收方检测到校验错误,不响应
|
||||
- **参数错误:** 参数格式或范围错误,返回DEVICE_PARAM_ERR
|
||||
- **地址错误:** 设备地址不存在,返回DEVICE_ADDR_ERR
|
||||
|
||||
## 9. 注意事项
|
||||
|
||||
1. **地址范围:** 设备地址范围为1-32
|
||||
2. **超时时间:** 轮询100ms,指令3000ms
|
||||
3. **重发机制:** 建议实现指令重发机制
|
||||
4. **状态同步:** 主控应定期轮询设备状态
|
||||
5. **错误恢复:** 通信异常时应能自动恢复
|
||||
6. **并发控制:** 使用信号量保护串口资源
|
Reference in New Issue
Block a user