本文主要介绍医疗检测仪器与LIS系统之间的通信,两者之间的通信还是比较简单的,两者通过通信方式连接成功后,对接收到的数据按照特定的协议进行解析,拿到我们需要的数据保存到LIS系统,或者将LIS中的数据传到仪器上即可。
下面介绍一下比较常用的通信方式及协议。详细的协议请查看仪器厂家给的文档,那才是最详细的文档。具体的通信方式和协议解析如何编码,这里先不介绍。
1. 通信方式
1.1. 网口
仪器或LIS主机一个作为Socket的服务端,一个作为客户端,两者以(TCP/IP Socket局域网内通信)的形式连接成功后进行数据交互。
1.2. 串口
仪器和LIS主机之间使用串口线进行连接,使用COM口进行数据传输。串口通信需要设置好波特率、数据位、停止位、奇偶校验。
1.3. 读取仪器的数据库
LIS主机直接连接仪器软件的数据库,读取数据库中的相关数据,同步到LIS系统中。目前仪器数据库使用比较多的是ACCESS数据库,连接数据库时可以使用ORM(如:SqlSugar)或者自己写DBHelper
1.4. 解析仪器导出来的文件
有的仪器可以将测试的结果数据导出为文件(如:TXT、CSV格式的文件),我们通过解析文件的内容从中获取到相关信息
2. 通信协议
- HL7协议 (有不同的版本,使用比较多的是2.3.1、2.4版本,2.3.1版本使用更多一些)
- ASTM协议
- 仪器自定义协议
2.1. 注意事项:
- 一个仪器可以以通信方式中的任意一种方式传输数据,数据的格式可以是通信协议中的任意一种格式,在开发时要结合仪器所支持的实际情况选择合适的通信方式和协议。
- 不同仪器可能采用相同的协议和版本,但相同数据位置所代表的信息内容可能不一样
- 使用网口通信时有的仪器端既可以作为服务端也可以作为客户端,有的仪器只能作为服务端或者只能作为客户端。具体要看仪器的支持情况。所以LIS端要可以作为服务端也要可以作为客户端。
3. 各协议数据示例
3.1. HL7
HL7 是一个为住院病人提供护理的电子数据交换标准。最初它由美国定义,现在已经被很多国家采用。
HL7 底层协议TCP/IP是一个字节流协议,它并不提供消息边界。HL7作为上层协议是基于消息的,但它也没有提供消息终止机制。为了确定消息边界,HL7使用最小的底层协议。
3.1.1. 通讯层
消息被以下面的格式传送:
<SB>
ddddd<EB><CR>
其中:
<SB>是ASCII <VT>
, 即, <0x0B>。 不要和ASCII 中的字符SOH 或 STX 混淆
ddddd是HL7消息。只包括ISO8859-1字符(十六进制值20-FF)和
<EB>是ASCII <FS>
,即,<0x1C>
<CR>是回车换行, ASCII回车符,即,<0x0D>。
3.1.2. 示例
一条完整的消息格式如下图:(注意:图中黑色突出的字符是不可见字符)
上图中的示例是博科全自动生化分析仪使用HL7 2.3.1版本的协议推送测试结果到LIS的数据,我们要做的就是从以上数据中解析出我们需要的信息,基本的信息包含样本的编号或流水号、检测项目、项目的结果。
HL7消息分为不同的消息段,消息开头的字母(MSH、PID、OBR、OBX)代表消息的类型。一个类型的消息里又使用 “|”分隔成不同的段,每段里存放不同含义的数据,我们在解析消息时要做的就是根据仪器厂家提供的文档,从对应的消息段里找到我们需要的数据
下面大致描述一下上图中各消息段表示的意思,意在帮助你理解HL7协议的消息:
MSH:HL7消息所有的消息都是以MSH段开头一般位于消息的最前面。该消息段用于定义消息的来源、消息类型、版本号、消息编码等信息PID:消息表示病人的信息,里边会包含有病人的姓名、病历号、床号等病人的基本信息OBR:消息表示的是一些医嘱的信息,里边包含有样本的编号或流水号等信息OBX:消息表示的是检测项目的信息,里边会包含有检测项目(ALB、ALP、ALT等)、检测结果(1.86448165477651、2.68249424273179、0.1722214354275等)、结果单位(g/L、U/L、U/L等)、参考范围(35\~55、45\~135、0~41等)等信息
3.1.3. 解析结果
从上边的示例中我们可以解析到如下的数据:
3.2. ASTM
3.2.1. 通讯层
消息被以下面的格式传送:
<ENQ><STX>
消息内容<ETX><EOT>
以上格式中尖括号内的内容表示控制代码,是不可见的字符,其表示的相关含义如下:
字符 | 含义 | 对应的ASCII(十六进制) |
---|---|---|
<ENQ> |
请求 | 0x05 |
<ACK> |
确认回应 | 0x06 |
<STX> |
本文开始 | 0x02 |
<STX> |
本文结束 | 0x03 |
<EOT> |
传输结束 | 0x04 |
一般都是<ENQ>
作为开始,从<STX>
开始解析,<EOT>
作为结束。具体信息代表的什么意思,可以参考ASTM通讯协议,基本都是一致的。
通信时整个流程大致是,仪器先发送<ENQ>
给LIS端,LIS端接收到消息后回复<ACK>
,仪器收到回复的<ACK>
后开始发送后续的内容,一条完整的信息从<STX>
开始,到<ETX>
结束,LIS端接收到<EOT>
时,表示一条完整的消息传输完成,我们需要解析接收的内容中<STX>
至<ETX>
之间的内容接口。可以使用字符串截取的方式来解析。
3.2.2. 示例:
一条完整的消息格式如下图:(注意:图中黑色突出的字符是不可见字符)
从以上示例中可以解析到如下消息:
3.3. 仪器自定义协议
有的仪器厂商会有自己定义的协议,这种的就没有标准的规范了,具体就得看厂家给的协议文档,按照文档进行解析就行。比如尿液分析仪,每个厂商个格式都不一样,有的相同的仪器,不同的型号之间也是不一样的。
下图是一个完整的尿液分析仪传输的数据(注意:图中黑色突出的字符是不可见字符)
上图中的数据中包含样本标识(NO0002)、检测时间(2023-05-19 13:59)、检测项目(LEU、NIT、URO...等)、项目检测结果、结果值单位等信息