利用PowerBuilder实现LIS系统中的串口通讯
2011-10-16南晓北
南晓北,书 恒
(赤峰学院 医学院,内蒙古 赤峰 024000)
利用PowerBuilder实现LIS系统中的串口通讯
南晓北,书 恒
(赤峰学院 医学院,内蒙古 赤峰 024000)
本文介绍了如何使用PowerBuilder中的MSComm控件来实现检验仪器与计算机之间的串口通讯.
LIS;MSComm 控件;串口通讯
随着医院信息系统技术日趋成熟,如今医院信息系统在医院得到广泛应用.检验信息系统(LIS:Laboratory Information System)是医院信息系统中一个较大组成部分.利用计算机对检验仪器进行数据的自动采集是医院检验科室信息化建设中的重要内容.串口因其速度快所以是目前检验仪器大量采用的一种数据传输端口.PB(PowerBuilder)工具软件是Sybase公司开发的分布式数据库应用程序的前端开发工具,它以功能强大、使用灵活的数据窗口,面向对象的、具有可视图形界面的开发能力等优势,因此深受广大数据库开发人员的青睐.目前使用PB作为大型医院信息系统前端开发工具占据了很大比例,使用PB进行LIS系统串口通讯程序的开发也是被广泛应用的一种方式.
1 MSComm控件常用的属性及通讯方法
在使用PB开发LIS系统串口通讯程序应首先来了解一下微软的Microsoft Communications Control(简称 MSComm)控件,MSComm 属于 Windows下串行通讯编程的ActiveX控件,它为应用程序提供了通过串行端口传输和接收数据,为应用程序提供串行通讯功能.
1.1 MSComm控件的常用属性
CommPort:设置用户所选用的通讯端口号.
Settings:以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位.
PortOpen:设置通讯端口的状态,可以打开(值为True)或关闭端口(值为False).
Input:从接收缓冲区返回和删除字符.
Output:向传输缓冲区写一个字符串.
InBufferSize:设置或返回接收缓冲区的大小,缺省为1024字节.
InBufferCount:返回接收缓冲区内的等代读取的字节个数,设属性为0清除接收缓冲区.
OutBufferSize:设置或返回发送缓冲区,缺省为512字节.
OutBufferCounter:返回发送缓冲区内等待发送的字符数,可用0来清空缓冲区.
RThreshold:该属性确定当接收缓冲区内字节个数达或超过该值后就产生代码为ComEventReceive的OnComm事件,设置位0,则不产生On-Comm事件.
CommEvent:有通讯错误或事件发生时产生OnComm事件,CommEvent事件的值可以用来确定引发OnComm事件的具体的错误或事件常用的有以下几种
☆ ComEventbreak:接受到中断信号.
☆ ComEventRxOver:接收缓冲区溢出.
☆ ComEventTxFull:发送缓冲区溢出.
☆ ComEventReceive:接受到规定的字符数.
☆ InputLen:设置或返回接收缓冲区内用Input读入的个数.若取0,则读取整个缓冲区的内容.
1.2 MSComm控件的通讯方法
MSComm控件在处理串口通讯上有两种方法:一是事件驱动法;二是查询法.这两种方法各自的特点如下:
(1)事件驱动法是利用MSComm控件的On-Comm事件捕获并处理通讯错误或事件,是处理串行端口交互作用的一种非常有效的方法.当串口接收到或发送完指定数量的数据时,或当状态发生改变时,MSComm控件都将触发OnComm事件,该事件也可以捕获通讯中的错误.当应用程序捕获到这些事件后,可通过检查MSComm控件的CommEvent属性的值来获知所发生的事件或错误,从而执行相应的处理.这种方法具有相应及时,可靠性高等优点.
(2)查询法是在每个重要的程序之后查询MSComm控件的某些属性(比如CommEvent属性和InBufferCount属性)的值来检测事件和通讯错误.
2 程序实例描述
在前面我们对MSComm控件有所了解之后,我们就可以将MSComm控件引入到程序中.整个LIS系统的数据流程包括HIS开出检验申请信息,LIS主程序读取数据,仪器检验结果数据通过通讯程序写入LIS结果数据表等.本文所要研究的就是仪器检验结果通过通讯程序写入LIS结果数据表这一程序实例.
第一步:选择适合的数据库设计相关数据表(这个主要是根据使用需要和编程人员的使用习惯)就我看来使用中型数据库如:SQL Server就可以.
第二步:设计应用程序界面.在这里主要说一下如何插入MSComm控件,在设计窗口插入MSComm控件的步骤:选中Create OLE Control在Insert Object会话框中选中Insert Control页卡中的Microsoft Communications Control项,这便完成了添加MSComm控件.如下图.
第三步:这一步是编写程序的重点与难点,在完成上面的界面设计之后我们就要为界面里的控件编写代码.在界面设计时除MSComm控件外还有两项是必需要设计的.一个是通讯端口选择,因为一台计算机有多个串口(com1,com2,……)如果一台计算机连接两台或更多的仪器时就要凭借通讯端口来区分数据和接收数据.另一个是通讯参数配置,检验仪器进行数据传输时会根据仪器自身的参数来进行通讯,这些参数包括:波特率,数据位,停止位,校验位.
接下来我们来重点看一下对MSComm控件相关事件及相关函数的编写.
2.1 为MSComm控件编写Oncomm事件
注:代码中ole_comm_one为MSComm控件的名称
2.2 f_comm_char_monitor函数
它的功能是当有字符触发则进行接受,代码如下:
2.3 f_analyse_data函数
它的功能是分析结果数据,分离出工作单号及结果(在下面代码中有被注释的定义参数,把它写进来是来讲述如何使用MSComm控件相关参数).
上面描述的是在程序中最为重要的事件及两个函数,还有其它的细节(如:建立数据窗口向数据库插入检验结果数据等等)因其不是实现检验仪器与计算机通讯的重点所以在这里不作过多累述.
3 结论
在编写LIS通讯程序时除对编程方法熟练外还要对检验仪器有基本的认识,最好是能够掌握其使用方法及检验项目的相关知识.通过上述对MSComm控件使用方法及实例完全可以实现医院检验科检验数据的自动采集,也能够对医院检验方面的信息系统建设起到一定的帮助作用.
〔1〕刘恩博.组态软件数据采集与串口通信测控应用实战[M].北京:人民邮电出版社,2010.
〔2〕李朝青.PC机及单片机数据通信技术[M].北京:国防工业出版社,2002.
〔3〕范逸之.Visual Basic与RS232串行通信控制[M].北京:中国青年出版社,2000.
TP274
A
1673-260X(2011)11-0049-03