2. 医疗设备数据采集与接口工程
医疗设备边缘数据采集的第一道工程问题,不是算法,而是“设备到底怎么把数据交出来”。同一台监护仪,可能同时提供 RS232 串口、USB 转串口、以太网 HL7 输出和蓝牙无线通道;一台超声设备则可能通过 DICOM 网络接口导出图像与检查信息。接口选错、协议解析错位或时间戳处理不当,后续所有边缘计算都会建立在错误数据之上。因此,采集工程要同时回答三件事:物理接口如何连接、应用层协议如何解析、采集频率与时间如何对齐。
常见物理接口与适用场景
RS232 是最典型的医疗设备串口,常见于监护仪、血气分析仪、输液泵和部分老式检验设备。它采用点对点连接,典型参数为波特率 9600 或 115200、8 位数据位、无校验、1 位停止位,即常说的 8N1。RS232 电平与 TTL 不同,工程上通常使用 USB 转 RS232 转换器接入边缘网关。它的优点是实时、稳定、协议简单;缺点是传输距离短、速率低、一台网关通常只能接一路。
USB 接口在医疗设备中多用于导出数据或连接专用采集模块。USB 主机端可以枚举设备,但医疗设备常以厂商私有驱动或 HID 方式出现,边缘网关若使用 Linux,需要确认内核是否支持该设备类。以太网是当前主流,监护仪、麻醉机、PACS 工作站普遍通过 TCP/IP 输出 HL7 或 DICOM。蓝牙与 Wi-Fi 属于无线通道,蓝牙常用于低带宽生命体征传输,Wi-Fi 则适合图像和批量数据,但必须考虑漫游、丢包和电磁干扰。
协议解析:HL7、DICOM 与自定义串口帧
HL7 v2.x 是监护、检验和 ADT 信息最常用的文本协议。一条典型的 ORU^R01 消息以竖线分隔字段、以回车分隔段,例如:
MSH|^~\&|MINDRAY|BENEVIEW|EDGE|GW|20240512103000||ORU^R01|MSG0001|P|2.4
PID|||P20240512||张三||19800101|M
OBR|1|||HR^心率^MDC|||20240512102958
OBX|1|NM|HR^心率^MDC||78|bpm|||||F
OBX|2|NM|SpO2^血氧^MDC||98|%|||||F
解析时先按段名定位 MSH、PID、OBR、OBX,再按字段序号取值。OBX-5 是观测值,OBX-6 是单位,OBX-14 是观测时间。工程上必须处理转义字符、空字段和重复段,不能简单按逗号切分。DICOM 则面向图像与检查对象,使用标签(Tag)描述数据元素,例如 (0010,0010) 是患者姓名,(0008,0060) 是模态。DICOM 网络传输通常走 DIMSE 服务,边缘网关若只取检查元数据,可只解析 C-FIND 响应中的关键标签,而不必搬运整幅图像。
自定义串口协议常见于输液泵和血气分析仪。典型帧结构为:帧头 0xAA、长度、命令字、数据区、校验和、帧尾 0x55。校验和可取数据区各字节异或。解析器需要维护接收缓冲区,按帧头同步,长度不足时等待,校验失败时丢弃并重新同步。下面是一个简化的解析伪代码:
buf += uart.read()
while len(buf) >= 5:
if buf[0] != 0xAA:
buf = buf[1:]; continue
length = buf[1]
if len(buf) < length + 4:
break
frame = buf[:length+4]
if xor(frame[2:length+2]) != frame[length+2]:
buf = buf[1:]; continue
handle(frame)
buf = buf[length+4:]
采集频率与同步策略
采集频率由设备输出能力和临床需求共同决定。心率、血氧等波形数据通常 1 Hz 到 125 Hz,无创血压只在测量完成时输出一次,体温可 0.1 Hz。边缘网关不应盲目提高轮询频率,否则会加重设备负担并产生重复数据。对事件型数据,采用“变化即上报”;对周期型数据,采用固定采样周期,例如每 1 秒读取一次最新值。
同步策略的核心是时间戳。设备本地时间、网关时间和服务器时间可能不一致。工程上建议:网关收到数据时立即打上单调递增的接收时间戳,同时保留设备报文中的观测时间;若设备支持 NTP,则统一到同一时间源。对于多设备联合分析,例如心电与血压关联,必须把不同来源的数据对齐到同一时间轴,允许的偏差通常控制在 100 ms 以内。若设备时间不可信,则以网关接收时间为准,并在数据中标记时间来源。
真实设备接入案例
以某科室监护仪接入为例。设备提供 RS232 串口,输出自定义帧,波特率 115200,8N1。边缘网关使用 USB 转 RS232 转换器,设备路径为 /dev/ttyUSB0。采集程序打开串口后,按帧头 0xAA 同步,解析出心率、血氧、血压和报警状态。网关每收到一帧,记录接收时间戳,并将数据转换为内部 JSON:
{
"device_id": "monitor-01",
"bed": "ICU-03",
"hr": 78,
"spo2": 98,
"nibp_sys": 120,
"nibp_dia": 80,
"alarm": "none",
"device_time": "2024-05-12T10:29:58",
"gateway_time": "2024-05-12T10:30:00.123"
}
接入后需要验证三件事:第一,帧同步是否稳定,连续运行 30 分钟是否出现错帧;第二,数值是否与设备屏幕一致,可抽取 10 个时间点比对;第三,断线重连是否正常,拔掉串口再插回,程序应能重新打开设备并继续采集。若使用以太网 HL7,则还需验证 TCP 连接保持、消息边界和 ACK 回复。只有这些验证通过,采集链路才具备进入边缘计算的条件。
接口工程的目标不是“连上”,而是“稳定、可解释、可对齐地拿到数据”。选择接口时优先使用设备原生数字输出,协议解析时保留原始报文以便回溯,采集频率与同步策略则要围绕临床时间精度设计。做到这三点,后续的边缘滤波、报警和上传才有可靠基础。