编辑 | blame | 历史 | 原始文档

金宝 (Gambro) 透析机外部通信协议文档

适用机型: AK96, AK200, AK98 (及 AK100, AK95, ASTRID)
主题: 金宝透析机的外部通信
最后更新: 2007年1月11日 (Mikael Lindhult - 增加 AKxalis 块和条件)


目录

  1. 软件结构
  2. 外部日志 (External Logging)
  3. 通信数据包结构
  4. 附录 A: 治疗参数列表与状态码

1. 软件结构

1.1 计算机组织 (Computer Organisation)

透析机被划分为多个逻辑节点,每个节点由一个字符标识:

节点代码 名称 描述
'O' 操作员通信 (OPCOM) 处理与用户交互的功能。
'B' 血液控制 (BLOOD) 控制血液流路及相关测量(血流量、夹管器、静脉压等)。
'F' 液体控制 (FLUID) 控制透析液流路及相关测量(跨膜压 TMP、超滤 UF、消毒等)。
'C' CAM 节点 仅适用于 AK100/AK200。
'E' 外部预设处理 仅适用于 AK95。
'P' 外部 PC 预设 适用于 AK95, AK100, AK200。
'R' 远程控制 仅适用于 AK100。
'S' SDT 生成代码 功能取决于机型。AK90/AK100 无此节点;AK95 中用于保护系统;ASTRID 机器仅有此节点。

1.2 数据类型与约定

所有节点支持以下基本类型:
* Logical (逻辑型): 8位字节。偶数=FALSE,奇数=TRUE。
* Byte (字节): 8位值 (0-255)。
* Word (字): 16位值 (0-65535)。**低位字节在前 (Little-Endian)**。
* Integer (整数): 16位有符号值 (-32768 到 32767),处理方式同 Word,仅符号位不同。

'O', 'B', 'F' 节点特有类型:
* Float (浮点型): 32位 IEEE 标准浮点数。存储顺序为:字节1(低8位) -> 字节2 -> 字节3 -> 字节4(高8位/符号位)。

'S' 节点特有类型:
* Time (时间): 8字节结构。前4字节为秒数,后4字节为纳秒数。传输顺序反转(同 Word 和 Float)。

1.3 数据组织

  • 数组存储: 'O', 'B', 'F' 节点的数据存储在数组中。

    • xRL: 逻辑型数组
    • xRB: 字节型数组
    • xRW: 字型数组
    • xRI: 整型数组
    • xRR: 实型 (Float) 数组
    • (其中 x 为节点标识符,如 ORI 表示 OPCOM 的整型数组)
  • 'S' 节点寻址: 必须提供完整的作用域路径,例如:AK95.PROTECTIVE.BLOOD_FLOW_CONTROL.State

1.4 数据标识

变量索引通过 .LIT 文件中的字面名称定义。命名规则如下:
* Xvariable$name: xRL 数组索引名
* xBvariable$name: xRB 数组索引名
* xWvariable$name: xRW 数组索引名
* xI_variable$name: xRI 数组索引名
* xR_variable$name: xRR 数组索引名

版本验证:
.LIT 文件包含 PROM_VERS (程序版本) 和 VAR_VERS (变量文件版本)。发送特殊请求可获取这两个版本的拼接字符串,用于验证文件兼容性。


2. 外部日志 (External Logging)

2.1 日志控制块结构 (Logging Control Block Structure)

PC 通过发送**控制块**来初始化日志记录。控制块包含四个区域:**头区**、**条件区**、**规范区**和**CRC 校验**。

头部 (HEADER)

位置 内容 说明
0-1 序列号 (Word) 当前程序不检查此项。
2-3 块长度 包含 CRC 在内的总长度。
4 源/目的节点 新控制块的目的地址,或回显块的源地址。有效值:'B', 'F', 'O', 'C', 'P', 'E', 'S'
5 块类型 00H: 日志控制块01H: 日志数据块02H: 信号日志数据块 ('S' 节点)03H: 状态转换日志数据块 ('S' 节点)04H: AKxalis 块
6 块标识 (Block ID) 系统内唯一的标识符。
7 日志通道规范 保留,设为 0。
8 状态 (Status) 位0: CRC 错误**位1**: 语法错误**位2**: 条件计算栈溢出**位3**: 数据缓冲区太小**位4**: 删除错误 (块不存在)**位5**: 加载拒绝 (内存已满)**位6**: 重复标识错误**位7**: SDT 错误 ('S' 节点)

条件区 (CONDITION)

位置 内容 说明
9 条件码 (Condition Code) 0: 删除控制块**1**: 时间条件 (定期记录)**2**: 上升沿触发 (FALSE→TRUE)**3**: 下降沿触发 (TRUE→FALSE)**4**: TRACO 记录器**5**: 记录程序和变量文件版本 (**重要:读取版本用**)**6**: 单次记录变量数据**7**: 本地记录 (仅 AK100)**8-18**: 特殊功能 (TRACO预设, SDT信号, GSS控制, AKxalis命令等)
10-(10+n-1) 条件数据 根据条件码不同,长度和含义不同。例如:条件码 1 (时间条件) 后跟 2 字节的时间间隔 (Tick 或 秒)。

数据规范区 (DATA SPECIFICATION)

(适用于 TRACO 节点,条件码 1, 2, 3, 4, 5, 6)
每个要记录的数据由 1字节类型信息 + 1或2个字节的索引/地址信息 组成。
* 类型信息编码:
* 低4位 (数据类型):
* 0: Real (xRR)
* 1: Integer (xRI)
* 2: Word (xRW)
* 3: Byte (xRB)
* 4: Boolean (xRL)
* 5: 进程 (xP)
* 6: 函数 (xF)
* 7-A: 内存直接寻址 (MR, MI, MW, MB)
* 高4位 (节点来源):
* 0: Opcom (Oxx)
* 1: Blood (Bxx)
* 4: Fluid (Fxx)
* (其他代码适用于特定机型)
* 结束标志: FFH 表示数据规范结束。

校验和 (CHECKSUM)

  • 位置: 块末尾
  • 算法: CRC-16 或 简单求和 (具体视实现而定,文档示例中多为累加和)。

2.2 日志数据块结构 (Logging Data Block Structure)

当条件满足时,机器发送数据块。结构如下:
1. 头部: 同控制块头部 (序列号, 长度, 源节点, 类型 01H, ID, 状态)。
2. 数据区:
* 条件码 5: 返回 PROM_VERSVAR_VERS 的拼接字符串。
* 条件码 6: 返回一次性的变量快照数据。
* 条件码 1: 返回按时间间隔记录的变量数据。
3. 校验和: 块末尾。

2.3 消息传递流程

  1. PC 发送 控制块 (例如:设置每10秒记录一次)。
  2. 透析机回显该 控制块 (作为确认)。
  3. 透析机在条件满足时 (如每10秒) 发送 数据块
  4. PC 收到数据块后,必须回复 ACK (0x06)
  5. 若要停止,PC 发送 删除控制块 (条件码 0)。

2.4 外部日志示例

(文档中提供了详细的 Hex 示例,展示了如何构建一个每 10 Tick 记录一次 ORL(122), ORI(5), BRI(16) 的控制块)


3. 通信数据包 (Communication Package)

3.1 数据包结构

位置 内容
0 块类型描述符: 'D' (44H, 数据块) 或 'O' (4FH, 溢出块)
1 序列号 (Byte)
2 ~ (2+n-1) 数据负载 (即上述的日志控制块或数据块)
3+n-1 字节校验和 (位置 0 到 2+n-1 的和)

3.2 编码规则 (转义)

协议使用了5个特殊 ASCII 字符,如果在数据负载中出现,必须进行转义:
* STX: 02H (帧头)
* EOT: 04H (帧尾)
* ACK: 06H (确认)
* NAK: 15H (否认)
* ESC: 1BH (转义前缀)

转义方法:
如果数据字节等于上述任一特殊字符:
1. 插入 ESC (1BH)。
2. 将该字节值加上 20H
例如: 数据中的 02H 变为 1B 22H06H 变为 1B 26H

3.3 发送流程

  1. 发送 STX (02H)。
  2. 发送 编码后的数据包
  3. 发送 EOT (04H)。
  4. 等待接收方响应:
    • ACK (06H): 成功。
    • NAK (15H): 失败 (校验错或格式错),需重发。
    • 超时: 未收到 EOT 或 ACK,需重发 (AK100 超时设为 1 秒)。

附录 A: 治疗参数列表与状态码

治疗参数下载 (GSS 控制命令 - 条件码 12)

部分参数为**必填 (Mandatory)**,部分为**可选 (Optional)**。

# 参数描述 状态 备注
1 患者姓名字符集 (Code Page) 必填 0=西欧, 1=东欧, 2=日文等
2 患者姓名 必填 最多32字符
3 超滤量 (UF Volume) 可选
4 治疗时间 (分钟) 可选
5 浓缩液类型 (A=醋酸盐, B=碳酸氢盐) 可选
6 浓缩液替代名称 可选 依赖 #5
7 UF 曲线类型 可选 'L'=线性 (依赖 #8)
8 UF 曲线起始值 若 #7 存在则必填
9 Na+ 曲线类型 可选 'L'/'P'/'D' (依赖 #10,11,12)
... (详见文档原文)
26 患者 ID 必填
27 压力/容量控制模式 可选 'V'=容量, 'T'=压力

治疗数据下载状态码 (Status Codes)

机器解析下载参数后返回的状态码:

代码 描述
0 无错误,状态列表结束
9 UF 参数超出限制
12 透析液流量无效
23 下载的治疗参数 CRC 错误
28 浓缩液类型错误 (非 'A' 或 'B')
36 HCO3- 曲线起始值超限
38 治疗模式错误 (非 'H', 'F', 'D')
49 用户手动拒绝 或 功能检查结束但未接受参数
50 用户接受数据
54 切换到 HDF 模式失败
60-62 Na+ 或 HCO3- 浓度超限

---
注:本文档为技术参考,实际操作请遵循医疗设备安全规范。