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

8.1 KiB
Raw Blame History

主控与舱室通信协议

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

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

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 舱室状态

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 混气机状态

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. 并发控制: 使用信号量保护串口资源