色谱仪主板通讯协议 (GCKC 协议) - 开发者参考手册
[TOC]
本协议用于色谱仪主板 (GC) 作为客户端主动连接至工作站 (Workstation, WS) 服务器,进行数据上报和业务反控。
1. 基础物理层
- 通讯方式: TCP/IP (主板为 Client,工作站为 Server)
- 端口:
25001(或8000) - 字节序: Big-Endian (大端序)
- 数值编码: 大量物理量采用 BCD (Binary-Coded Decimal) 编码。
例如:温度 123.4 ℃,BCD 编码为
12 34。
2. 通用帧结构 (Frame)
每一次收发的数据报文,都被包装在一个固定的 GCKC 帧结构中。
2.1 Body 核心数据结构
3. 核心指令详述 (Cmd)
3.1 主板主动推送 (GC -> WS)
Cmd 143 (0x8F) - 实时数据流推送
这是协议中最核心的指令,频率极高,用于推送实时温度和色谱信号采样点。
- Payload 定义:
- 实时温度 (12字节):6 路温度(柱箱、进样口1/2、检测器1/2/3),每路 2 字节 BCD。
- 保留 (6字节):固定填 0。
- 数据块数 (1字节):代表包含几个检测器通道数据 (
n)。 - 检测器数据块 (连续
n个):每个块结构如下:Type(1 字节): 检测器类型 (如0x40=FID1,0x50=TCD1)。Reserved(2 字节): 补 0。FreqByte(1 字节): 采样率频率乘数,通常采样点数 =FreqByte * 10。Points(4 * 点数字节): 连续的 4 字节 BCD 采样点数据(含符号位编码)。
Cmd 159 (0x9F) - EPC 气路状态推送
用于上报压力和流量。
- Payload 定义:
- EPC 条目数 (1字节):模块数量
n。 - 条目列表 (连续
n个,每个 8 字节):Index(1 字节): 通道或气体类型索引。InputPsi(2 字节): 进气压力 (uint16 / 100psi)。ActualPsi(2 字节): 实测压力 (uint16 / 100psi)。ActualSccm(2 字节): 实测流量 (uint16 / 100sccm)。State(1 字节): 开关与异常标志位。
- EPC 条目数 (1字节):模块数量
Cmd 251 (0xFB) - 硬件异常报警上报
主板主动上报硬件故障和异常状态。
- Payload (至少 2 字节):
Payload[0](1 字节): 报警代码 (Alarm Code)。1: 异常熄火 (Abnormal flameout)2: 温度异常 (Temperature anomaly)
Payload[1](1 字节): 报警参数或标志位。如果为非0,通常伴随状态改变(如置为异常状态)。
3.2 工作站反控指令 (WS -> GC)
主板在收到这些指令后,应回复带有相同 Seq 的 ACK 指令(通常应答指令号 = 请求指令号 + 128)。
Cmd 16 (0x10) - 控温反转 (Toggle)
请求主板切换全局温控状态(若当前为开启则关闭,若当前为关闭则开启)。
- Payload: 无 (0 字节)。
- 主板应答: Cmd 144 (
0x90)。 - 注意: 遗留代码中误认为这是停止控温指令,实际上它是唯一的有效控温开关指令(按一下开,再按一下关)。
Cmd 17 (0x11) - 无效 / 未使用
- 说明: 遗留代码中误认为这是开始控温指令,但在实际底层硬件中,该指令无效或未被实现。统一使用 Cmd 16 即可控制控温的起停。
Cmd 18 (0x12) - 启动全部分析
启动全部通道的色谱程序升温和采集。
- Payload: 无 (0 字节)。
- 主板应答: Cmd 146 (
0x92)。
Cmd 19 (0x13) - 停止全部分析
停止全部通道的分析。
- Payload: 无 (0 字节)。
- 主板应答: Cmd 147 (
0x93)。
Cmd 20 (0x14) - 启动 FID1 点火
- Payload: 无 (0 字节)。
Cmd 21 (0x15) - 启动 FID2 点火
- Payload: 无 (0 字节)。
Cmd 22 (0x16) - 启动指定通道分析 (开始进样)
请求主板开始跑色谱程序升温和采集。
- Payload (1 字节): 通道索引号 (
0,1,2...)。 - 主板应答: Cmd 150 (
0x96)。
Cmd 23 (0x17) - 停止分析
请求主板中止当前分析。
- Payload (1 字节): 通道索引号。
- 主板应答: Cmd 151 (
0x97)。
Cmd 24 (0x18) / Cmd 25 (0x19) - 扩展/保留命令
部分遗留代码中存在的反控指令预留位,无 Payload。实际硬件开发中可根据扩展需要处理,或直接忽略。
Cmd 245 (0xF5) - 停止数据采集 (停止出数)
达到采集设定时间后,工作站下发此命令通知主板停止上传数据(出数),但不中断底层的时间轴或循环周期(不同于 Cmd 22/23 的完全停止)。
- Payload (1 字节): 通道掩码 (Channel Mask)。例如通道 0 为
0x01,通道 1 为0x02。 - 说明: 主要是为了分离“出数时间”和“循环时间”。
3.3 参数读写指令 (WS <-> GC)
Cmd 0 (0x00) - 读取控温参数
工作站查询设定温度和保护温度。
- 请求 Payload: 无。
- 主板应答 Cmd 128 (
0x80):- 返回 24 字节:前 12 字节为 6 路 设定温度 (BCD),后 12 字节为 6 路保护温度 (BCD)。
- 温度通道严格映射顺序(每个占用2字节BCD):
- Inj1 (进样1): 偏移量 0
1 (设定), 1213 (保护) - Col (柱箱): 偏移量 2
3 (设定), 1415 (保护) - Det1 (检测1): 偏移量 4
5 (设定), 1617 (保护) - Inj2 (进样2): 偏移量 6
7 (设定), 1819 (保护) - Det2 (检测2): 偏移量 8
9 (设定), 2021 (保护) - Det3 (检测3): 偏移量 10
11 (设定), 2223 (保护)
- Inj1 (进样1): 偏移量 0
Cmd 8 (0x08) - 下发控温参数
工作站修改主板温度设置。
- 请求 Payload (24 字节):
- 必须严格按照上述通道顺序下发 24 字节。
- 前 12 字节:6 路设定温度 (2B BCD 格式)。
- 后 12 字节:6 路保护温度 (2B BCD 格式)。
- 主板应答 Cmd 136 (
0x88):- 确认收到。
Cmd 16 (0x10) - 控温反转 (Toggle)
请求主板切换全局温控状态(若当前为开启则关闭,若当前为关闭则开启)。
- Payload: 无 (0 字节)。
- 主板应答: Cmd 144 (
0x90)。 - 注意: 旧版代码极易将 Cmd 16 和 17 混淆,实际联调确认仅需使用 Cmd 16 即可实现翻转开关。
Cmd 17 (0x11) - 无效 / 未使用
- 说明: 实际底层硬件无效,不建议使用。
Cmd 67 (0x43) - 控温使能设置
工作站修改主板各通道控温的启用/禁用状态。
- Payload (1 字节): 通道使能位掩码 (Bitmask)。
Bit 5: Inj1 (进样1)Bit 4: Col (柱箱)Bit 3: Det1 (检测1)Bit 2: Inj2 (进样2)Bit 1: Det2 (检测2)Bit 0: Det3 / Aux (检测3 / 辅助)
- 主板应答: Cmd 195 (
0xC3)
Cmd 2 / 10 / 100 / 101 - 外部事件双表机制 (Event Tables)
色谱主板支持 8 个外部事件通道,由于单次 Payload 长度限制,指令被拆分为“双表”机制:
- 表 0 (事件 1~4): 使用 Cmd 2 (查询) / Cmd 10 (下发),主板应答 Cmd 130 / Cmd 138。
- 表 1 (事件 5~8,含反吹1等): 使用 Cmd 100 (查询) / Cmd 101 (下发),主板应答 Cmd 228 / Cmd 229。
- 矩阵打包顺序与格式 (单表 96 字节):
- 矩阵结构为
[4个通道][8个动作]。 - 按通道优先 (外循环),按动作优先 (内循环) 顺序打包:通道 0 的 On1, Off1, On2, Off2... 通道 1 的 On1...
- 每个时间点占用 3 字节 BCD 码(例如
0.01分钟编码为00 00 01)。 - 在解析 Cmd 228 (表 1) 时,其解析出的 4 个通道数据必须严格映射到全局总矩阵的通道索引
4~7(即第 5~8 个事件)。
- 矩阵结构为
4. 全指令集对照表 (完整指令字典)
通过对底层遗留源码的深度逆向解析,提取出的完整双向指令(Cmd)映射表如下。通常,主板对于工作站的设置或查询指令(Cmd),其应答指令号为 Cmd + 128 (0x80) 或特定的返回码。
