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

11 KiB
Raw Blame History

上位机与主控通信协议

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 端口配置格式

typedef struct {
    uint8_t port;    // 端口号1-4
    uint8_t type;    // 设备类型1-舱室, 2-混气机
    uint32_t addr;   // 设备地址:位掩码
} port_config_t;

6.2 轮询模式配置

typedef enum {
    CONTROL_POLL_NONE = 0x00,      // 不轮询
    CONTROL_POLL_CABIN = 0x01,     // 仅轮询舱室
    CONTROL_POLL_GASMIX = 0x02,    // 仅轮询混气机
    CONTROL_POLL_ALL = 0x03,       // 轮询所有设备
} control_poll_e;

6.3 主控信息结构

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

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;

7.3 主控状态

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. 主控返回数据给上位机