南曉北,書 恒
(赤峰學院 醫(yī)學院,內(nèi)蒙古 赤峰 024000)
利用PowerBuilder實現(xiàn)LIS系統(tǒng)中的串口通訊
南曉北,書 恒
(赤峰學院 醫(yī)學院,內(nèi)蒙古 赤峰 024000)
本文介紹了如何使用PowerBuilder中的MSComm控件來實現(xiàn)檢驗儀器與計算機之間的串口通訊.
LIS;MSComm 控件;串口通訊
隨著醫(yī)院信息系統(tǒng)技術(shù)日趨成熟,如今醫(yī)院信息系統(tǒng)在醫(yī)院得到廣泛應用.檢驗信息系統(tǒng)(LIS:Laboratory Information System)是醫(yī)院信息系統(tǒng)中一個較大組成部分.利用計算機對檢驗儀器進行數(shù)據(jù)的自動采集是醫(yī)院檢驗科室信息化建設(shè)中的重要內(nèi)容.串口因其速度快所以是目前檢驗儀器大量采用的一種數(shù)據(jù)傳輸端口.PB(PowerBuilder)工具軟件是Sybase公司開發(fā)的分布式數(shù)據(jù)庫應用程序的前端開發(fā)工具,它以功能強大、使用靈活的數(shù)據(jù)窗口,面向?qū)ο蟮?、具有可視圖形界面的開發(fā)能力等優(yōu)勢,因此深受廣大數(shù)據(jù)庫開發(fā)人員的青睞.目前使用PB作為大型醫(yī)院信息系統(tǒng)前端開發(fā)工具占據(jù)了很大比例,使用PB進行LIS系統(tǒng)串口通訊程序的開發(fā)也是被廣泛應用的一種方式.
在使用PB開發(fā)LIS系統(tǒng)串口通訊程序應首先來了解一下微軟的Microsoft Communications Control(簡稱 MSComm)控件,MSComm 屬于 Windows下串行通訊編程的ActiveX控件,它為應用程序提供了通過串行端口傳輸和接收數(shù)據(jù),為應用程序提供串行通訊功能.
CommPort:設(shè)置用戶所選用的通訊端口號.
Settings:以字符串的形式設(shè)置并返回波特率、奇偶校驗、數(shù)據(jù)位、停止位.
PortOpen:設(shè)置通訊端口的狀態(tài),可以打開(值為True)或關(guān)閉端口(值為False).
Input:從接收緩沖區(qū)返回和刪除字符.
Output:向傳輸緩沖區(qū)寫一個字符串.
InBufferSize:設(shè)置或返回接收緩沖區(qū)的大小,缺省為1024字節(jié).
InBufferCount:返回接收緩沖區(qū)內(nèi)的等代讀取的字節(jié)個數(shù),設(shè)屬性為0清除接收緩沖區(qū).
OutBufferSize:設(shè)置或返回發(fā)送緩沖區(qū),缺省為512字節(jié).
OutBufferCounter:返回發(fā)送緩沖區(qū)內(nèi)等待發(fā)送的字符數(shù),可用0來清空緩沖區(qū).
RThreshold:該屬性確定當接收緩沖區(qū)內(nèi)字節(jié)個數(shù)達或超過該值后就產(chǎn)生代碼為ComEventReceive的OnComm事件,設(shè)置位0,則不產(chǎn)生On-Comm事件.
CommEvent:有通訊錯誤或事件發(fā)生時產(chǎn)生OnComm事件,CommEvent事件的值可以用來確定引發(fā)OnComm事件的具體的錯誤或事件常用的有以下幾種
☆ ComEventbreak:接受到中斷信號.
☆ ComEventRxOver:接收緩沖區(qū)溢出.
☆ ComEventTxFull:發(fā)送緩沖區(qū)溢出.
☆ ComEventReceive:接受到規(guī)定的字符數(shù).
☆ InputLen:設(shè)置或返回接收緩沖區(qū)內(nèi)用Input讀入的個數(shù).若取0,則讀取整個緩沖區(qū)的內(nèi)容.
MSComm控件在處理串口通訊上有兩種方法:一是事件驅(qū)動法;二是查詢法.這兩種方法各自的特點如下:
(1)事件驅(qū)動法是利用MSComm控件的On-Comm事件捕獲并處理通訊錯誤或事件,是處理串行端口交互作用的一種非常有效的方法.當串口接收到或發(fā)送完指定數(shù)量的數(shù)據(jù)時,或當狀態(tài)發(fā)生改變時,MSComm控件都將觸發(fā)OnComm事件,該事件也可以捕獲通訊中的錯誤.當應用程序捕獲到這些事件后,可通過檢查MSComm控件的CommEvent屬性的值來獲知所發(fā)生的事件或錯誤,從而執(zhí)行相應的處理.這種方法具有相應及時,可靠性高等優(yōu)點.
(2)查詢法是在每個重要的程序之后查詢MSComm控件的某些屬性(比如CommEvent屬性和InBufferCount屬性)的值來檢測事件和通訊錯誤.
在前面我們對MSComm控件有所了解之后,我們就可以將MSComm控件引入到程序中.整個LIS系統(tǒng)的數(shù)據(jù)流程包括HIS開出檢驗申請信息,LIS主程序讀取數(shù)據(jù),儀器檢驗結(jié)果數(shù)據(jù)通過通訊程序?qū)懭隠IS結(jié)果數(shù)據(jù)表等.本文所要研究的就是儀器檢驗結(jié)果通過通訊程序?qū)懭隠IS結(jié)果數(shù)據(jù)表這一程序?qū)嵗?
第一步:選擇適合的數(shù)據(jù)庫設(shè)計相關(guān)數(shù)據(jù)表(這個主要是根據(jù)使用需要和編程人員的使用習慣)就我看來使用中型數(shù)據(jù)庫如:SQL Server就可以.
第二步:設(shè)計應用程序界面.在這里主要說一下如何插入MSComm控件,在設(shè)計窗口插入MSComm控件的步驟:選中Create OLE Control在Insert Object會話框中選中Insert Control頁卡中的Microsoft Communications Control項,這便完成了添加MSComm控件.如下圖.
第三步:這一步是編寫程序的重點與難點,在完成上面的界面設(shè)計之后我們就要為界面里的控件編寫代碼.在界面設(shè)計時除MSComm控件外還有兩項是必需要設(shè)計的.一個是通訊端口選擇,因為一臺計算機有多個串口(com1,com2,……)如果一臺計算機連接兩臺或更多的儀器時就要憑借通訊端口來區(qū)分數(shù)據(jù)和接收數(shù)據(jù).另一個是通訊參數(shù)配置,檢驗儀器進行數(shù)據(jù)傳輸時會根據(jù)儀器自身的參數(shù)來進行通訊,這些參數(shù)包括:波特率,數(shù)據(jù)位,停止位,校驗位.
接下來我們來重點看一下對MSComm控件相關(guān)事件及相關(guān)函數(shù)的編寫.
注:代碼中ole_comm_one為MSComm控件的名稱
它的功能是當有字符觸發(fā)則進行接受,代碼如下:
它的功能是分析結(jié)果數(shù)據(jù),分離出工作單號及結(jié)果(在下面代碼中有被注釋的定義參數(shù),把它寫進來是來講述如何使用MSComm控件相關(guān)參數(shù)).
上面描述的是在程序中最為重要的事件及兩個函數(shù),還有其它的細節(jié)(如:建立數(shù)據(jù)窗口向數(shù)據(jù)庫插入檢驗結(jié)果數(shù)據(jù)等等)因其不是實現(xiàn)檢驗儀器與計算機通訊的重點所以在這里不作過多累述.
在編寫LIS通訊程序時除對編程方法熟練外還要對檢驗儀器有基本的認識,最好是能夠掌握其使用方法及檢驗項目的相關(guān)知識.通過上述對MSComm控件使用方法及實例完全可以實現(xiàn)醫(yī)院檢驗科檢驗數(shù)據(jù)的自動采集,也能夠?qū)︶t(yī)院檢驗方面的信息系統(tǒng)建設(shè)起到一定的幫助作用.
〔1〕劉恩博.組態(tài)軟件數(shù)據(jù)采集與串口通信測控應用實戰(zhàn)[M].北京:人民郵電出版社,2010.
〔2〕李朝青.PC機及單片機數(shù)據(jù)通信技術(shù)[M].北京:國防工業(yè)出版社,2002.
〔3〕范逸之.Visual Basic與RS232串行通信控制[M].北京:中國青年出版社,2000.
TP274
A
1673-260X(2011)11-0049-03