吵吵   2018-09-24  阅读:2,164

有朋友问我LIS的连接接口要怎么做,我说先搞定串口或者TCP连接,然后搞定ASTM和HL7协议,最后搞定具体的结果传输和项目上传。

但是问题又来了,那么厚的英文文档不要看半天,有快速搞定的方法么?

有,于是我把项目上传的简版写了一些,结果回传太简单就不写了。

仪器发送ENQ
LIS回复ACK
仪器发送请求数据
LIS回复ACK

请求数据中有:
O|1|000016|0^5230^1^^S1^SC|^^^2^1|R||20000530143741||||A||||1||||||||||O

那么其中的000016就是条码号
从0^5230^1^^S1^SC 起就是 SequenceNo+”^”+RackNo+”^”+RackPos+”^^”+SType+”^SC”;
你不管它 记录下来后面用到

1、然后开始拼字符串了:
H record:

H|\\^&|||host^2||||||TSDWN^REPLY

这个是死的

2、然后是
P record

P|1

这个也是死的

3、然后是
O record
这个就好好搞了
O|1|” + SampleID + “|”+strQuery+”|” + strTest + “|”+sPrioty+”||||||A||||”+stype+”||||||||||O
SampleID 是条码号 就是前面仪器传过来的000016
strQuery 是传过来的架子号等等一堆,就是我们前面说的那一串SequenceNo+”^”+RackNo+”^”+RackPos+”^^”+SType+”^SC”;
strTest 就是要做的仪器的代码了,这个又多个要怎么拼起来?注意 ^^^” + litemCode + “^\” 就是^^^+项目代码^+斜杠
sPrioty 平诊是 R 急诊是 S
sType 这个是标本的类别啦 ,其实上面O record里面也有传过来是S1,但是这里要去掉S改为1

4、然后是
L record

L|1|N
这个也是死的

好了,最后拼在一起就是:
+H record++P record++O record++L record++C7

C7这两个16进制就是CheckSum,就是所谓的校验位。

怎么算?
从STX到ETX的每个字节相加除以256取余数,然后高四位为[chk1],第四位为[chk2]。

怎么取出来高四位和低四位呢,用到两个运算符,右移运算符>>,和逻辑与&,假设这个字节叫byte,那么:

高四位就是: (byte & 0xf0) >> 4;
低四位就是: byte & 0x0f

最后是发送ENQ给仪器
仪器回复ACK
然后LIS把拼好的字符串发出去
搞定!

吵吵微信朋友圈,请付款实名加入:

吵吵 吵吵

发表评论

电子邮件地址不会被公开。 必填项已用*标注