(广东省中山市中医院检验科广东中山528400)
摘要:探讨了PowerBuilder9.0环境下实现医学检验仪器与计算机双向通信的方法,详细介绍了如何利用PowerBuilder9.0来开发罗氏E601电化学发光免疫分析仪双向通迅软件。
关键词:PowerBuilder9.0;双向通迅;电化学发光免疫分析
实验室信息系统(LIS)对医学检验仪器数据的获取主要通过串行口通讯、USB端口通讯、TCP/IP通讯、打开数据库或文本文件直接读取等几种方法,其中通过串行口通信是最主要的方式,医学检验仪器大多都支持RS232标准。RS232通讯根据仪器的不同,主要有两种方式:单向通信、双向通信。单向通信:检验数据由仪器向LIS工作站单向传送,仪器只能传送分析数据,不能接受由LIS发出的任何指令。双向通信:与单向通信不同,信息不仅从仪器向LIS工作站传送,仪器也能接受从LIS传送的各种指令。双向通讯是效率最高的检验设备与实验室信息系统(LIS)的通讯模式,它的应用进一步优化了检验流程,提高了检验技师的工作效率,有效避免了检验样本与病人信息匹配错误的现象,减少了医疗差错。下面详细介绍了利用PowerBuilder9.0来设计罗氏E601电化学发光免疫分析仪双向通迅程序。
1Microsoftcomm控件简介
Microsoftcomm控件有许多重要的属性和事件,下面给出部分常用的属性:
CommPort:设置并返回通信端口号;
Settings:设置并返回波特率、校验位、数据位、停止位;
PortOpen:设置并返回端口状态,也可以用于打开和关闭串口;
OutBufferSize:设置并返回发送缓冲区的大小,以字符为单位;
InBufferSize:设置并返回接收缓冲区的大小,以字符为单位;
SThreshold:设置并返回发送时产生ONComm事件的字符数;
RThreshold:设置并返回接收时产生ONComm事件的字符数;
InputMode:设置并返回接收类型;
InputLen:设置并返回从接收缓冲区读取的字符;
Input:返回和删除接收缓冲区的字符;
Output:写字符串到发送缓冲区;
CommEvent:返回最近的通信事件或错误;
OnComm事件:无论何时当CommEvent属性的值变化时,就产生OnComm事件,标志发生了一个通信事件或一个错误。
2罗氏E601电化学发光免疫分析仪与计算机串口联线
罗氏E601电化学发光免疫分析仪与计算机串口联线如下图仪器端与计算机都为9孔母头,仪器端3和计算机端2对接,仪器端2和计算机端3对接,仪器端5和计算机端5对接,仪器端7和8短接,计算机端7和8短接,计算机端4和6短接。
3罗氏E601电化学发光免疫分析仪设置
选择页面“综合功能”,然后选择子页面“系统”,把“条形码设置”中的“常规/急诊”设为“是”。在“系统”画面上点击“通讯传输”按钮即可弹出窗口,选择子页面“通讯设置”中将“波特率”设为“9600”,将“奇偶校验位”设为“8Bit,NONE,1StopBit”,选择子页面“内容设置”,在“只传结果”前不要打勾,其它选项都打上勾。
4双向通讯主要代码
本双向通信程序由PowerBuilder9.0软件编写,在通信窗口中插入mscomm32.ocx通信控件,控件名为ole_mscomm。初始化程序放在窗口的open()事件中。窗口的open()事件程序主要如下:
ole_mscomm.object.commport=1//设置通信端口号为com1ole_mscomm.object.settings=“9600,n,8,1”//波特率为9600bps,无奇偶校验,8位数据位,1位停止位。
ifole_mscomm.object.portopen=falsethen
ole_mscomm.object.portopen=true//打开串口timer(5)
数据处理放在窗口的timer()事件中。窗口的timer()事件程序主要如下:
stringls_inputdata//读取的数据
Booleanib_iseot=false
stringis_enq=char(5),is_ack=char(6)
stringis_buffer,is_send,ls_sendxm
integeris_number,i,li_inputdatalens,li_pos
ls_inputdata=ole_mscomm.object.input
li_inputdatalens=len(ls_inputdata)
fori=1toli_inputdatalens
choosecasemid(ls_inputdata,i,1)
casechar(0),char(2),char(10)//过滤casechar(1)
ib_iseot=false//初始化
ole_mscomm.object.output=is_ack//应答ackcasechar(3),char(5)
ole_mscomm.object.output=is_ack//应答ackcasechar(4)
is_buffer=is_buffer+char(4)
ole_mscomm.object.output=is_enq//应答enqcasechar(6)
ifib_iseot=falsethen
is_buffer=is_buffer+char(6)
li_pos=pos(is_send,';')
ifli_pos>0then
ifis_number=2then
ls_sendxm=mid(is_send,li_pos+1,Len(is_send)-li_pos)
ole_mscomm.object.output=ls_sendxm//向仪器发送测试指令
ib_iseot=trueendif
ifis_number=1then
ls_sendxm=mid(is_send,1,li_pos-1)
ole_mscomm.object.output=ls_sendxm//向仪器发送测试指令
is_number=is_number+1endifelse
ls_senddata=is_send
ole_mscomm.object.output=ls_sendxm//向仪器发送测试指令
ib_iseot=trueendifelse
ole_mscomm.object.output=is_eot
ib_iseot=falseendifcasechar(13)
iflen(is_buffer)>2then
ifmid(is_buffer,len(is_buffer)-2,1)<>char(23)then
this.wf_data(is_buffer)//结果数据处理
is_buffer=''endifelse
is_buffer=''endifcasechar(23)//eot
is_buffer=is_buffer+char(23)
ole_mscomm.object.output=is_ack//应答caseelse
is_buffer=is_buffer+mid(ls_inputdata,i,1)endchoosenext
5讨论
本文通过一具体的例子分步骤介绍了如何在PowerBuilder环境下利用通讯控件MSComm控件来开发罗氏E601电化学发光免疫分析仪双向通信软件。掌握了以上基本技术,就可以稍加改变来开发罗氏C501全自动生化分析仪等罗氏仪器双向通信软件。
参考文献:
[1]朱有存,白青伟,杨晓荣,等.利用Mscomm32控件实现检验仪器联机[J].医疗卫生装备,2008,29(6):55-56.
[2]何军,曲炜.PowerSeript语言、事件与函数大全[M].北京:电子工业出版社,2000.