LIS解码程序开发手册 - LISLiod
来源:瑞美 LIS 系统内部开发手册,作者 HEDY/zenghao,修订 158 次,2007年12月18日 文档性质:LIS 仪器接口开发入门指南,面向 LIS 工程师讲解如何将检验仪器数据接入 LIS/HIS 系统
一、核心概念
LISLiod(LIS 解码程序) 是一段小程序,自动将检验仪器产生的原始数据(格式复杂、难以直接使用)解码后存入 LIS/HIS 系统,作为仪器与 LIS/HIS 之间的桥梁。
四步法接入一台新仪器
- 分析仪器 — 定位仪器类型,确定数据获取方式
- 分析原始数据 — 最关键、最困难的环节,找出数据规律
- 编写 LIS 解码程序 — 基于 LISLiod 框架编写解码逻辑
- 调试 — 完善解码程序 + 调整报表格式 + 打印机测试
二、仪器分类与数据获取策略
| 类别 | 特征 | 数据获取方式 | 典型仪器 |
|---|---|---|---|
| 第一类(淘汰型) | 老旧、接口损坏、使用少 | 手工录入,跳过解码 | — |
| 第二类(中小型) | 有 COM 接口,样本号由仪器输出 | 通信程序直接截取串口数据 → 解码 | 电解质仪、尿液分析仪 |
| 第三类(大型先进) | 复杂,完全解码困难,自带操作软件 | 从仪器软件做接口:读本地数据库 / 读 result 文件 | 大型生化、免疫分析仪 |
| 第四类(特殊) | 旧、用得少、有复杂图像、无标准接口 | 钩子程序截结果 / 截屏获取图像 | — |
三、原始数据分析方法
3.1 TXT 文本数据分析四步
- 找出每个标本的起始符与结束符(特殊 ASCII 字符)
- 找出每个标本的日期和样本号位置
- 找出每个项目数据或图像数据对应的位置
- 总结规律,写出解码算法
示例:FA-150 尿液分析仪
- 起始符:ASCII 13,13,2,13,13,10
- 结束符:ASCII 3
- 单标本固定长度:276 字节
- 日期位:6-25
- 标本号:49-51
- 各项目固定偏移:GLU(60-74)、BIL(82-96)、KET(104-118)、SG(126-140)、BLD(148-162)、PH(170-184)、PRO(192-206)、URO(214-221)、NIT(236-250)、LEU(258-272)
工具:“原始数据分析”工具 — 以 ASCII 码网格显示数据,颜色区分特殊字符,精确定位。
3.2 数据库型数据分析(仪器自带软件)
大型仪器厂商通常自带软件(小型 LIS 系统),通信+解码已经做好,直接访问厂商软件数据库取数据更准确高效。
前提条件:
- 了解数据库类型(Access / SQL Server 等)及驱动
- 确认是否有密码,向厂商索取
- 分析掌握表结构
示例:酶标仪 Access 数据库三表模型
Tb_method— 项目表(仪器所有项目)Tb_plate— 板子表(一次标本做了多少个项目)Tb_plate_data— 结果表(一个项目做了多少标本及结果值)
关键设计:记录板子表(plate)的最后 ID,而非样本表 ID,因为仪器成批做标本。
四、LISLiod 程序架构
整体分为 5 大功能模块 + 4 大代码层次。
4.1 五大功能模块
- 通信程序 — 从仪器串口/网络获取原始数据
- 解码算法程序 — 解析原始数据,提取项目结果
- 插入数据库的程序 — 将解码后数据写入 LIS/HIS 数据库
- 报告程序 — 生成检验报告
- 历史备份 — 原始数据备份
4.2 四大代码层次
-
前台界面层(MainFrm)
- 五个按钮:HELP / SET / DECODE / DUG / STOP
- F9 快捷键:查看仪器匹配信息和项目配置
- 文本框显示当前样本解码结果
- 右键菜单 → 恢复
-
解码类(DataDeCode)
- 一次解码:从原始数据提取项目值 → 存入 DataXML
- 二次解码(ChangeDataXML):对一次解码结果再处理(公式计算/条件判断)→ 最终结果
- 事件驱动:
DataInsert事件触发数据库插入 - 进度事件:
FrmTrayIconChange
-
插入数据库类(DataInsertClass)
- 订阅
DataInsert事件 - 质控数据插入 vs 普通结果数据插入(通过标本号与质控号匹配判断)
- 关键字段:标本号 / 验单号 / 图片号 / 组合代码 / 科室代码 / 分类代码 / 仪器代码 / 样本代码 / 质控代码(3个) / 检验日期
- 三分类血常规特殊处理(IsThreepic,三个图像插入)
- 订阅
-
配置文件操作类(PublicClass)
- 全局静态类,管理 DataXML 和配置读写
- 关键方法:
BindDataXML()传递数据、updateNode()记录解码断点
4.3 核心设计模式
- 事件驱动架构:解码完成 → 触发 DataInsert 事件 → 插入类响应
- 断点续传:记录最后解码位置(lastendnum),程序重启后从断点继续
- 配置驱动:所有仪器参数、项目对应关系全部在 XML 配置文件中
- 可扩展:新增仪器只需修改 decode() 和 decode2() 两个方法 + 配置文件
五、配置文件体系
DecodeSetting.xml — 解码配置
<COMDATA>
<BaseConfig>
<date>日期</date>
<repno>报告号</repno>
<lastendnum>最后结束位置</lastendnum>
<long>标本长度</long>
<beginbyte>起始字节</beginbyte>
<endbyte>结束字节</endbyte>
<rawpath>raw/</rawpath>
</BaseConfig>
<setdecode>项目解码配置</setdecode>
</COMDATA>KeyDecodeSetting.xml — 二次解码配置
DataInsertSetting.xml — 数据库插入配置
- 根节点
<DataInsert>:标本号/图片号/日期的 DataXML 字段映射 <BaseConfig>:基础参数(组合代码/科室代码/分类代码/仪器代码/样本代码/3个质控标本号/启动方式/日期来源/自定义标本号/二次解码开关/多项目模式/数据库连接串/三分类图像开关)<DoData>:手工指定仪器所有项目(name / codename / codenum)
配置程序
- 选择数据库中的仪器 → 左边显示仪器项目
- 中间是解码后项目 → 点对应生成到右边
- 关键约束:中间项目代码必须和解码配置文件中的项目代码一致
六、关键工程要点
- 断点续传:
updateNode()保存解码进度,防止重复插入或遗漏 - 质控识别:标本号匹配质控号(zkbb1/2/3)时走质控插入流程
- 标本号为 -1:跳过(无效标本)
- 多项目模式 IsMuchItem:0=固定项目数(允许重名),1=不固定项目数(不允许重名)
- 自定义标本号 Isrepno:0=取仪器标本号,1=自定义自增
- 日期来源 Isdate:0=LIS 系统日期,1=仪器日期
- 质控三标本:zkbb1 / zkbb2 / zkbb3 三个质控标本号
七、对 LIS 工程师的能力要求
- 会看仪器 — 快速定位仪器类型和数据获取方案
- 熟悉 LIS 系统流程 — 了解 LIS 模块功能、库表结构、项目实施方法
- 会做线 — RS-232-C 接线规范(25针/9针、公母匹配)
- 沟通能力 — 与仪器操作员协调使用时间、获取配合
- 注意卫生 — 检验科生物安全防护
八、技术栈
- 语言:C#(.NET Framework)
- 数据库:Access(Microsoft.Jet.OLEDB.4.0)+ 可扩展其他
- 通信:RS-232 串口通信为主
- 配置格式:XML
- 架构模式:事件驱动 + 配置驱动 + 断点续传
关联笔记: