色谱仪主板通讯协议 (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 帧结构中。

偏移长度字段名称说明
04Header固定为 ASCII "GCKC" (47 43 4B 43)
42LengthBody 负载数据的总长度 (uint16BE)
6变长Body核心业务数据体 (详见下文)
Len+61CRC校验码(针对 Body 的逐字节查表校验)

2.1 Body 核心数据结构

偏移长度字段名称说明
016DeviceID设备标识。ASCII 字符串,不足右侧补 0x00
例:GC9700...
162Seq序列号,范围 0-65535,每发送一条自增 1
181Cmd指令号 (1 字节),指示该帧的功能
19变长Payload指令对应的参数数据 (可为 0 字节)

3. 核心指令详述 (Cmd)

3.1 主板主动推送 (GC -> WS)

Cmd 143 (0x8F) - 实时数据流推送

这是协议中最核心的指令,频率极高,用于推送实时温度和色谱信号采样点。

  • Payload 定义:
    1. 实时温度 (12字节):6 路温度(柱箱、进样口1/2、检测器1/2/3),每路 2 字节 BCD。
    2. 保留 (6字节):固定填 0。
    3. 数据块数 (1字节):代表包含几个检测器通道数据 (n)。
    4. 检测器数据块 (连续 n 个):每个块结构如下:
      • Type (1 字节): 检测器类型 (如 0x40=FID1, 0x50=TCD1)。
      • Reserved (2 字节): 补 0。
      • FreqByte (1 字节): 采样率频率乘数,通常采样点数 = FreqByte * 10
      • Points (4 * 点数 字节): 连续的 4 字节 BCD 采样点数据(含符号位编码)。

Cmd 159 (0x9F) - EPC 气路状态推送

用于上报压力和流量。

  • Payload 定义:
    1. EPC 条目数 (1字节):模块数量 n
    2. 条目列表 (连续 n 个,每个 8 字节)
      • Index (1 字节): 通道或气体类型索引。
      • InputPsi (2 字节): 进气压力 (uint16 / 100 psi)。
      • ActualPsi (2 字节): 实测压力 (uint16 / 100 psi)。
      • ActualSccm (2 字节): 实测流量 (uint16 / 100 sccm)。
      • State (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):
      1. Inj1 (进样1): 偏移量 01 (设定), 1213 (保护)
      2. Col (柱箱): 偏移量 23 (设定), 1415 (保护)
      3. Det1 (检测1): 偏移量 45 (设定), 1617 (保护)
      4. Inj2 (进样2): 偏移量 67 (设定), 1819 (保护)
      5. Det2 (检测2): 偏移量 89 (设定), 2021 (保护)
      6. Det3 (检测3): 偏移量 1011 (设定), 2223 (保护)

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) 或特定的返回码。

4.1 基础与状态类

WS->GC (请求)GC->WS (应答/主动)功能说明载荷特征 (Payload)
5 (0x05)133 (0x85)查询硬件版本号-
6/7 (0x06/07)135 (0x87)设置/查询设备序列号序列号 ASCII 字符串
11 (0x0B)139 (0x8B)设置时钟 (校时)6字节 (年,月,日,时,分,秒)
-251 (0xFB)硬件异常报警上报[1=熄火/2=温度异常, 状态码]

4.2 温度与程序升温控制

WS->GC (请求)GC->WS (应答/主动)功能说明载荷特征 (Payload)
0 (0x00)128 (0x80)读取控温参数24字节 (6路设定+6路保护) BCD
8 (0x08)136 (0x88)下发控温参数24字节 (6路设定+6路保护) BCD
1 (0x01)129 (0x81)读取程序升温表-
9 (0x09)137 (0x89)下发程序升温表50 或 98 字节
16 (0x10)144 (0x90)控温反转 (Toggle)0字节
17 (0x11)145 (0x91)无效 / 未使用0字节

4.3 分析与采集控制

WS->GC (请求)GC->WS (应答/主动)功能说明载荷特征 (Payload)
18 (0x12)146 (0x92)启动全部分析0字节
19 (0x13)147 (0x93)停止全部分析0字节
22 (0x16)150 (0x96)启动指定通道分析1字节 (通道索引号)
23 (0x17)151 (0x97)停止指定通道分析1字节 (通道索引号)
245 (0xF5)-停止出数 (停止采集)1字节 (Channel Mask)
-143 (0x8F)实时数据流推送 (高频)12B温度 + 检测器数据块序列

4.4 点火与气路 (EPC)

WS->GC (请求)GC->WS (应答/主动)功能说明载荷特征 (Payload)
20 (0x14)-启动 FID1 点火0字节
21 (0x15)-启动 FID2 点火0字节
48/49/50176/177设置/查询点火时长1字节 (时长参数)
-122/250 (0xFA)点火门限查询应答门限值数据
33/34 (0x22)164/165 (0xA4)查询/下发 EPC 模块工作参数气路压力/流量配置参数
35~39 (0x23)166/167 (0xA6)查询/下发 EPC 名称EPC 名称 ASCII 字符串
40/41 (0x28)168/169 (0xA8)查询/下发 EPC 气体种类1字节 (气体种类 ID)
-159 (0x9F)主动上报 EPC 气路状态N个 EPC 通道实测压强/流量

4.5 检测器与外部事件

WS->GC (请求)GC->WS (应答/主动)功能说明载荷特征 (Payload)
13 (0x0D)141/142读取检测器参数-
14 (0x0E)142 (0x8E)下发检测器参数Count + Count*4 字节
2 (0x02)130 (0x82)读取外部事件程序表0 (事件1~4)-
10 (0x0A)138 (0x8A)下发外部事件程序表0 (事件1~4)96 字节 (BCD矩阵: 4通道8动作3字节)
100 (0x64)228 (0xE4)读取外部事件程序表1 (事件5~8)-
101 (0x65)229 (0xE5)下发外部事件程序表1 (事件5~8)96 字节 (BCD矩阵: 4通道8动作3字节, 包含反吹)
-208/212 (0xD0)外部事件开关设置应答事件开关状态位

4.6 自动进样与多位阀控制

WS->GC (请求)GC->WS (应答/主动)功能说明载荷特征 (Payload)
4 (0x04)132 (0x84)读取自动进样时间-
12 (0x0C)140 (0x8C)下发自动进样时间6字节 (间隔, 次数, 清洗时间等)
67/69/80/89226/227 (0xE2)自动进样器参数查询/设置进样器配置载荷
101/104232 (0xE8)复位多位阀0字节
106~111238/239 (0xEE)设置多位阀使能/状态阀位状态标志
-175 (0xAF)主动送出自动进样器数据进样器当前状态与计数

4.7 液相泵 (LC Pump) 控制

WS->GC (请求)GC->WS (应答/主动)功能说明载荷特征 (Payload)
-216 (0xD8)液相泵开关状态应答开关状态位
-217 (0xD9)液相泵状态查寻应答运行状态参数
-218 (0xDA)液相泵控制状态设置应答控制参数

5. 报文示例

示例 1:工作站发送 Cmd 22 (启动通道 0 分析)

47 43 4B 43            // Header "GCKC"
00 14                  // Length (Body 长度为 20 字节)
// --- 以下为 Body (20字节) ---
47 43 39 37 30 30 32 30 
32 30 31 30 30 31 31 30 // DeviceID: "GC97002020100110" (16字节)
00 05                  // Seq: 5
16                     // Cmd: 22 (0x16)
00                     // Payload: Channel 0
// --------------------------
3F                     // CRC (假设计算结果为 0x3F)

示例 2:主板回复 Cmd 150 (应答启动分析)

47 43 4B 43            // Header "GCKC"
00 13                  // Length (Body 长度为 19 字节)
// --- 以下为 Body (19字节) ---
47 43 39 37 30 30 32 30 
32 30 31 30 30 31 31 30 // DeviceID
00 05                  // Seq: 5 (与请求报文一致)
96                     // Cmd: 150 (0x96 = 0x16 + 0x80)
                       // Payload: 无
// --------------------------
A1                     // CRC