南曉北,書 恒
(赤峰學院 醫學院,內蒙古 赤峰 024000)
利用PowerBuilder實現LIS系統中的串口通訊
南曉北,書 恒
(赤峰學院 醫學院,內蒙古 赤峰 024000)
本文介紹了如何使用PowerBuilder中的MSComm控件來實現檢驗儀器與計算機之間的串口通訊.
LIS;MSComm 控件;串口通訊
隨著醫院信息系統技術日趨成熟,如今醫院信息系統在醫院得到廣泛應用.檢驗信息系統(LIS:Laboratory Information System)是醫院信息系統中一個較大組成部分.利用計算機對檢驗儀器進行數據的自動采集是醫院檢驗科室信息化建設中的重要內容.串口因其速度快所以是目前檢驗儀器大量采用的一種數據傳輸端口.PB(PowerBuilder)工具軟件是Sybase公司開發的分布式數據庫應用程序的前端開發工具,它以功能強大、使用靈活的數據窗口,面向對象的、具有可視圖形界面的開發能力等優勢,因此深受廣大數據庫開發人員的青睞.目前使用PB作為大型醫院信息系統前端開發工具占據了很大比例,使用PB進行LIS系統串口通訊程序的開發也是被廣泛應用的一種方式.
在使用PB開發LIS系統串口通訊程序應首先來了解一下微軟的Microsoft Communications Control(簡稱 MSComm)控件,MSComm 屬于 Windows下串行通訊編程的ActiveX控件,它為應用程序提供了通過串行端口傳輸和接收數據,為應用程序提供串行通訊功能.
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,則讀取整個緩沖區的內容.
MSComm控件在處理串口通訊上有兩種方法:一是事件驅動法;二是查詢法.這兩種方法各自的特點如下:
(1)事件驅動法是利用MSComm控件的On-Comm事件捕獲并處理通訊錯誤或事件,是處理串行端口交互作用的一種非常有效的方法.當串口接收到或發送完指定數量的數據時,或當狀態發生改變時,MSComm控件都將觸發OnComm事件,該事件也可以捕獲通訊中的錯誤.當應用程序捕獲到這些事件后,可通過檢查MSComm控件的CommEvent屬性的值來獲知所發生的事件或錯誤,從而執行相應的處理.這種方法具有相應及時,可靠性高等優點.
(2)查詢法是在每個重要的程序之后查詢MSComm控件的某些屬性(比如CommEvent屬性和InBufferCount屬性)的值來檢測事件和通訊錯誤.
在前面我們對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控件相關事件及相關函數的編寫.
注:代碼中ole_comm_one為MSComm控件的名稱


它的功能是當有字符觸發則進行接受,代碼如下:

它的功能是分析結果數據,分離出工作單號及結果(在下面代碼中有被注釋的定義參數,把它寫進來是來講述如何使用MSComm控件相關參數).



上面描述的是在程序中最為重要的事件及兩個函數,還有其它的細節(如:建立數據窗口向數據庫插入檢驗結果數據等等)因其不是實現檢驗儀器與計算機通訊的重點所以在這里不作過多累述.
在編寫LIS通訊程序時除對編程方法熟練外還要對檢驗儀器有基本的認識,最好是能夠掌握其使用方法及檢驗項目的相關知識.通過上述對MSComm控件使用方法及實例完全可以實現醫院檢驗科檢驗數據的自動采集,也能夠對醫院檢驗方面的信息系統建設起到一定的幫助作用.
〔1〕劉恩博.組態軟件數據采集與串口通信測控應用實戰[M].北京:人民郵電出版社,2010.
〔2〕李朝青.PC機及單片機數據通信技術[M].北京:國防工業出版社,2002.
〔3〕范逸之.Visual Basic與RS232串行通信控制[M].北京:中國青年出版社,2000.
TP274
A
1673-260X(2011)11-0049-03