基于Zigbee的病房護理機遠程監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)
2 上位機監(jiān)控軟件設(shè)計
2.1 基于API的Windows多線程串口通信
多線程是指同一個程序中可以同時執(zhí)行多個任務(wù),通過多線程可以將整個任務(wù)分成幾個線程,同時執(zhí)行,從而提高系統(tǒng)的效率。在多線程環(huán)境下,許多線程需要訪問同一資源,而且事件發(fā)生往往有先后順序,因此,線程間需要通信控制。本系統(tǒng)數(shù)據(jù)庫的存取以及公共變量的訪問,都涉及到線程間的通信,必須使用同步化機制,防止線程訪問沖突。在實際實現(xiàn)過程中,系統(tǒng)利用了臨界區(qū),它是保證在同一時間只有一個線程可以訪問某一資源的有效方法。在使用臨界區(qū)時,需要給各線程提供一個共享的臨界區(qū)對象。臨界區(qū)具體使用步驟如下:1)聲明對象;2)初始化對象;3)進入臨界區(qū);4)離開臨界區(qū)。同樣在本系統(tǒng)中,為了保證線程訪問安全,設(shè)置了多個臨界區(qū)對象,包括:串口通信臨界區(qū)m_csCommunicationSync、數(shù)據(jù)庫ADO組件訪問臨界區(qū)critical for ado、護理機結(jié)構(gòu)鏈表臨界區(qū)對象critical for list等。為保證串口收發(fā)數(shù)據(jù)的高效性,在充分分析多線程技術(shù)和API異步操作串口方式的特點之后,本系統(tǒng)將串口的數(shù)據(jù)收發(fā)采用單獨的線程處理。
系統(tǒng)串口通信采用事件通知方式,該方式是Windows下效率較高的一種方式。主線程在打開串口后首先設(shè)置要監(jiān)視的串口通信事件,然后將監(jiān)視線程打開,用來監(jiān)視主線程設(shè)置的這些串口通信事件是否發(fā)生,當(dāng)其中的某個事件發(fā)生后,監(jiān)視線程要能根據(jù)不同的事件類型進行處理。
2.2 護理機監(jiān)控功能的實現(xiàn)
按照護理機的無線遠程監(jiān)控要求,在上位監(jiān)控PC機中需要完成以下功能:
(1)重要監(jiān)測參數(shù)的顯示。在監(jiān)控界面的顯示區(qū)能實時顯示護理機的重要監(jiān)測信息(護理機所在科室及床位號、檢測數(shù)據(jù)、工作狀態(tài)、報警狀態(tài)等)。
(2)系統(tǒng)配置。管理員(如護士長)能“動態(tài)”地完成系統(tǒng)通信端口的配置和使用單位名稱(如醫(yī)院名稱)配置。
(3)用戶管理配置。管理員能“動態(tài)”地增添用戶,并設(shè)置用戶的權(quán)限和初始密碼,管理員能注銷除了“當(dāng)前登錄管理員”以外的所有用戶。所有用戶在登錄后可以修改自己的登錄密碼。
(4)網(wǎng)絡(luò)設(shè)備配置。管理員能“動態(tài)”地向無線網(wǎng)絡(luò)中“注冊”或“注銷”某一護理機(包括該護理機的ID號、所屬科室名稱、所處病房號和床位號)。
(5)具有數(shù)據(jù)報表查詢和打印功能。系統(tǒng)能對監(jiān)控過程中重要事件進行記錄,并能實現(xiàn)對這些信息的條件查詢和打印功能。這些重要事件包括用戶登錄或退出時的用戶名及時間;護理機狀態(tài)改變及時間。任何當(dāng)前用戶均能點擊監(jiān)控主界面的“報表查詢”菜單,能分別按“時間”、“用戶名”、“床位號”查詢以往所有數(shù)據(jù)庫中記錄的值班期間的所有監(jiān)測信息。此功能的實現(xiàn)主要是通過數(shù)據(jù)庫結(jié)合報表的設(shè)計來實現(xiàn)的。
通過對上位機監(jiān)控軟件的功能分析,首先確定其由“主線程”、“通信處理線程”、“語音處理線程”等部分組成,然后進行各部分功能細化,最后,按照模塊化功能用C++Builder編程實現(xiàn)。為提高數(shù)據(jù)處理效率,在通信處理軟件設(shè)計部分,開辟了單獨的“數(shù)據(jù)接收線程”和“數(shù)據(jù)處理線程”,處理線程將接收線程接收的下位機所有數(shù)據(jù)進行校驗處理,并將下位機工作數(shù)據(jù)存入數(shù)據(jù)庫,最后根據(jù)與上次工作數(shù)據(jù)比較,確定是否更新“主線程目錄樹”。主線程根據(jù)用戶需求,實時地從數(shù)據(jù)庫調(diào)取數(shù)據(jù)顯示,同時主線程還要能完成護理機“入網(wǎng)注冊”、“注銷”、“操作員的配置”以及對下位機數(shù)據(jù)的“按條件報表查詢”等功能。此外,考慮到現(xiàn)在的PC機通常采用USB通信方式,因此針對ZigBee網(wǎng)絡(luò)的協(xié)調(diào)器與上位機的連結(jié)采用了“USB轉(zhuǎn)串口”方式,本系統(tǒng)還設(shè)計了USB串口熱插拔功能,當(dāng)更換不同的USB連接口時,上位機通過C++Builder編程能自動獲取串口COM的串口號,使上位機監(jiān)控軟件的應(yīng)用非常通用化。圖4為用C++Builder編寫的上位機監(jiān)控主界面,鑒于篇幅因素,本文以具有代表性的“護理機監(jiān)測參數(shù)顯示”和“護理機動態(tài)注冊注銷功能”為例,介紹其實現(xiàn)過程。本文引用地址:http://butianyuan.cn/article/154965.htm
2.2.1 護理機監(jiān)測參數(shù)的顯示
系統(tǒng)要求當(dāng)點擊“按病床位瀏覽”顯示的目錄樹時,只有點擊注冊護理機對應(yīng)的床位時,才能顯示該護理機的重要信息,并且要顯示護理機所在科室及床位號;當(dāng)點擊“按病房號瀏覽”目錄頁時,只有點擊注冊護理機對應(yīng)的病房號時才會顯示在此病房下所有護理機的信息。除了護理機重要工作參數(shù)需要顯示外,護理機報警狀態(tài)、離線狀態(tài)也需要突出顯示。其中,報警信息采用了紅色字體閃爍方式顯示;離線狀態(tài)采用了灰色字體顯示。
該功能的實現(xiàn)用到了TreeView目錄樹的單擊事件,此外,系統(tǒng)有專門負責(zé)根據(jù)節(jié)點信息,調(diào)取數(shù)據(jù)庫中對應(yīng)節(jié)點護理機信息的定時器,通過定時器不斷獲取節(jié)點最新數(shù)據(jù)進行顯示;通過單擊事件處理函數(shù),判斷是否是單擊的對應(yīng)節(jié)點,如果點擊的是按病房瀏覽方式中的病房節(jié)點,則先取出該病房下第一個子節(jié)點信息,并將第一個GroupBox設(shè)置為可視,再取后面的子節(jié)點,操作類似,直到第四個子節(jié)點。當(dāng)點擊的是“按床位瀏覽”方式下的床位節(jié)點時,先獲取此節(jié)點數(shù)據(jù)信息,然后將第一個GroupBox設(shè)為可視,最后根據(jù)節(jié)點信息,定時器會查詢數(shù)據(jù)庫中對應(yīng)護理機的工作參數(shù)進行數(shù)據(jù)顯示。其操作流程如圖5所示,實時監(jiān)測參數(shù)顯示界面如圖4所示。
評論