田志宏,胡 亮,邱峰志
(天津科技大學(xué)電子信息與自動(dòng)化學(xué)院,天津 300222)
當(dāng)前,人口老齡化已成為當(dāng)今世界的一個(gè)突出的社會(huì)問題.世界衛(wèi)生組織指出,在全世界 190多個(gè)國家和地區(qū)中,有 60多個(gè)已進(jìn)入老年型社會(huì).老年人健康的最大威脅——心血管疾病引起的死亡人數(shù),占全球死亡人數(shù)的三分之一[1].各種心血管疾病在發(fā)病前都會(huì)有相應(yīng)的征兆,而通過觀測病人的生理參數(shù)數(shù)據(jù)是能夠發(fā)現(xiàn)這些征兆的,因此設(shè)計(jì)一種可以監(jiān)測主要生理參數(shù)并兼有報(bào)警功能的醫(yī)療儀器,將為預(yù)防和治療各種突發(fā)性疾病提供一種新的手段[2].目前,生理參數(shù)監(jiān)測設(shè)備大多用于醫(yī)院監(jiān)護(hù)室、養(yǎng)老院等,可對病人或老年人的重要生理參數(shù)作實(shí)時(shí)、連續(xù)和長時(shí)間的監(jiān)護(hù)[3],有些監(jiān)護(hù)設(shè)備還帶有一定的本地報(bào)警功能.但其在遠(yuǎn)程無線報(bào)警功能方面卻略顯匱乏,不支持手機(jī)短信報(bào)警功能[4].
本監(jiān)護(hù)系統(tǒng)在擁有準(zhǔn)確的監(jiān)測功能的同時(shí)又有手機(jī) GPRS報(bào)警功能,可在日常家庭中使用,滿足老年人對此類儀器的需求.
人體生理參數(shù)監(jiān)測系統(tǒng)硬件結(jié)構(gòu)如圖1所示.系統(tǒng)選用 CSN808作為生理參數(shù)采集模塊.CNS808是用來監(jiān)測心電波、心率、血壓、血氧飽和度、呼吸和體溫的參數(shù)采集模塊,并可按照RS232協(xié)議,通過串口向主控模塊發(fā)送生理參數(shù)數(shù)據(jù)包[5].選用 GTM900模塊作為生理參數(shù)的遠(yuǎn)程無線報(bào)警模塊,其支持標(biāo)準(zhǔn)及增強(qiáng)的 AT命令,與主控模塊通過串口相連.主控模塊主要負(fù)責(zé)對 CSN808模塊發(fā)送的數(shù)據(jù)包做相應(yīng)的處理,并對 CSN808模塊和 GTM900模塊進(jìn)行控制.選用Atmel公司的AT91SAM9263作為ARM主控模塊的核心CPU,其支持Windows CE操作系統(tǒng)和大容量的NAND flash.系統(tǒng)以LCD和觸摸屏作為人機(jī)交互裝置,并可以通過以太網(wǎng)接口芯片連接到Internet.
圖1 人體生理參數(shù)監(jiān)測系統(tǒng)硬件結(jié)構(gòu)圖Fig.1 Hardware structure of physiological parameter monitoring system
一個(gè)Windows CE系統(tǒng)從軟件角度通常可分為3個(gè)層次:引導(dǎo)加載程序、系統(tǒng)映像文件以及用戶應(yīng)用程序[6].本文重點(diǎn)介紹人體生理參數(shù)監(jiān)測軟件,即用戶應(yīng)用程序的開發(fā).
CSN808模塊的正常應(yīng)答方式是以50 Hz的頻率連續(xù)發(fā)送包含 25字節(jié)數(shù)據(jù)的數(shù)據(jù)包.其中,數(shù)據(jù)包的前兩個(gè)字節(jié)是數(shù)據(jù)頭,第20和第25字節(jié)為兩個(gè)校驗(yàn)和值,其余字節(jié)是各種生理參數(shù)的數(shù)據(jù)字節(jié).主控模塊接到串口數(shù)據(jù)后,首先對接收到的數(shù)據(jù)包進(jìn)行校驗(yàn),然后對通過校驗(yàn)的數(shù)據(jù)包進(jìn)行分析,最后把各種生理參數(shù)數(shù)值顯示到 LCD模塊上,并繪制多導(dǎo)聯(lián)心電圖(ECG).在監(jiān)測到病人出現(xiàn)異常時(shí),系統(tǒng)自動(dòng)對生理參數(shù)數(shù)據(jù)包進(jìn)行保存,同時(shí)主控模塊驅(qū)動(dòng)GPRS/GSM 模塊向外發(fā)送求救短消息和撥打求救電話.圖 2為人體生理參數(shù)監(jiān)測系統(tǒng)監(jiān)測軟件的主程序流程圖.
采用了EVC4.0作為上位機(jī)軟件的開發(fā)工具.它具有支持MFC類庫和ATL、COM組件,支持C/C++和匯編混合編程,所編寫的軟件運(yùn)行時(shí)占用內(nèi)存少、運(yùn)行速度快等特點(diǎn).
圖2 監(jiān)測軟件主程序流程圖Fig.2 Main program flow chart of monitoring software
2.1.1 串口資源的打開和關(guān)閉
串口在Windows CE系統(tǒng)下屬于流接口設(shè)備,它是串行設(shè)備接口的常規(guī) I/O驅(qū)動(dòng)程序調(diào)用和與通信相關(guān)的具體函數(shù)的結(jié)合.串行設(shè)備被視為用于打開、關(guān)閉、讀寫串口的常規(guī)、可安裝的流設(shè)備[7].在所有的流設(shè)備驅(qū)動(dòng)程序中,均可使用 CreateFile()函數(shù)來打開串行端口設(shè)備.打開串口并正確設(shè)置 DCB結(jié)構(gòu)體中的參數(shù)以及異步讀寫的超時(shí)時(shí)限之后,串口即可正常工作.
關(guān)閉串口則可以調(diào)用 CloseHandle()函數(shù)來釋放串口資源.
2.1.2 多線程讀取串口數(shù)據(jù)
Windows CE系統(tǒng)不支持重疊 I/O,在主線程中進(jìn)行大量讀寫串口操作將會(huì)使整個(gè)系統(tǒng)陷入緩慢的串口等待[8].所以,系統(tǒng)采用多線程技術(shù)來進(jìn)行讀寫串口操作.在 Windows CE系統(tǒng)中,各個(gè)線程間共享絕大部分資源,其中就包括從串口接收到的數(shù)據(jù).
按照模塊化的編程思想,監(jiān)測軟件采用了3級結(jié)構(gòu)來實(shí)現(xiàn)串口數(shù)據(jù)的讀?。?/p>
(1)讀線程負(fù)責(zé)監(jiān)視串口事件,如果有串口事件,則通知回調(diào)函數(shù)接收串口數(shù)據(jù).
(2)回調(diào)函數(shù)接收串口數(shù)據(jù),并以消息形式通知主窗口的數(shù)據(jù)分析與繪圖函數(shù)處理其收到的數(shù)據(jù).
(3)數(shù)據(jù)分析與繪圖函數(shù)負(fù)責(zé)處理串口數(shù)據(jù)、顯示生理參數(shù)與繪制ECG等功能.
數(shù)據(jù)分析函數(shù)在接到數(shù)據(jù)后,首先定位數(shù)據(jù)包的數(shù)據(jù)頭.然后,以數(shù)據(jù)頭為定位標(biāo)志,找到這組數(shù)據(jù)的兩個(gè)校驗(yàn)和值.如果這組數(shù)據(jù)通過校驗(yàn),則將其存入一個(gè)包含25個(gè)元素的結(jié)構(gòu)體m_recv中,直接對結(jié)構(gòu)體中的數(shù)據(jù)進(jìn)行操作.
要理順關(guān)系。一年來我們感到,各種關(guān)系理順了,工作會(huì)事半功倍。要依靠集團(tuán)紀(jì)委的正確領(lǐng)導(dǎo)、職能部門的有力指導(dǎo),要積極利用地方紀(jì)委監(jiān)委專業(yè)資源和力量,更要得到監(jiān)督單位的充分理解配合,派駐優(yōu)勢才能得到最大發(fā)揮。
2.2.1 數(shù)據(jù)的實(shí)時(shí)顯示
普通對話框只能在實(shí)例化一個(gè)對象之前給其中的變量賦值.而 CDialogBar類對象則不同,它是由CControlBar類派生而來,在主窗口實(shí)例化一個(gè)CDialogBar類對象之后,它的句柄在程序運(yùn)行期間將一直有效,那么就可以對其中的變量進(jìn)行實(shí)時(shí)的賦值更新.系統(tǒng)使用一個(gè) DialogBar來顯示各種生理參數(shù)的數(shù)值,然后用函數(shù) SetDlgItemText()來實(shí)時(shí)更新DialogBar的數(shù)據(jù).
對于狀態(tài)欄,它的句柄在程序運(yùn)行期間也一直有效.所以,可以用其成員函數(shù)SetPaneText()來實(shí)時(shí)更新各種探頭的工作狀態(tài).
2.2.2 ECG繪制
為了避免數(shù)據(jù)在類與類之間的傳遞,串口數(shù)據(jù)的接收與處理等相關(guān)操作代碼都被添加到 MainFrame類中.由EVC的文檔/視圖結(jié)構(gòu)可知,View類窗體始終覆蓋在 Mainframe類窗體之上,所以必須使用View類的DC進(jìn)行繪圖.MFC提供GetActiveView()函數(shù),其返回值是當(dāng)前活動(dòng)窗口的指針,經(jīng)過轉(zhuǎn)化之后,便可以使用函數(shù)GetDC()來獲取View類的DC.
按照醫(yī)學(xué)標(biāo)準(zhǔn),一個(gè)心率為 60次/min的完整心電圖波形的寬度在屏幕上為 25,mm或者 50,mm.按照 CSN808模塊的通訊協(xié)議,CSN808模塊每秒向主控模塊發(fā)送200個(gè)心電波形數(shù)據(jù)點(diǎn).而LCD模塊的分辨率是 800像素×480像素,顯示區(qū)域的寬度為170,mm.可以計(jì)算出主控模塊板應(yīng)從串口 1中讀取數(shù)據(jù)包的頻率為
50×(800/50/4)/(170/25)≈25
以病人的呼吸和心跳兩項(xiàng)參數(shù)作為數(shù)據(jù)保存與否的標(biāo)志.如果這兩項(xiàng)參數(shù)中,有一項(xiàng)的數(shù)值超出了其安全域值,系統(tǒng)將以對話框的形式進(jìn)行本地報(bào)警,并即刻開始保存CSN808模塊傳來的數(shù)據(jù)包,直至報(bào)警參數(shù)均回到安全域值范圍之內(nèi).
與串口資源一樣,文件也屬于流接口設(shè)備,其創(chuàng)建與打開使用 CreateFile()函數(shù).在打開文件后,只需要將結(jié)構(gòu)體m_recv中的數(shù)據(jù)追加保存到文件末尾就可實(shí)現(xiàn)對數(shù)據(jù)包連續(xù)、規(guī)則地保存.
系統(tǒng)采用 GTM900作為遠(yuǎn)程無線報(bào)警模塊.在監(jiān)測系統(tǒng)的報(bào)警設(shè)計(jì)對話框中,有用于設(shè)置報(bào)警電話號(hào)碼的文本編輯框.在初次使用系統(tǒng)時(shí),系統(tǒng)會(huì)以對話框的形式提醒醫(yī)護(hù)人員設(shè)置報(bào)警電話號(hào)碼.在正確設(shè)置報(bào)警號(hào)碼后,系統(tǒng)以文件形式將報(bào)警號(hào)碼存儲(chǔ)起來并作為默認(rèn)報(bào)警電話號(hào)碼,直至報(bào)警號(hào)碼被修改.圖 3為報(bào)警設(shè)置對話框,前兩組選項(xiàng)用來設(shè)定心跳和呼吸頻率的報(bào)警閾值,最后一個(gè)文本編輯框?yàn)轭A(yù)置的報(bào)警號(hào)碼.
圖3 監(jiān)測系統(tǒng)的報(bào)警設(shè)置對話框Fig.3 Alarm Setting dialog box of monitoring system
當(dāng)監(jiān)測到作為報(bào)警標(biāo)志的生理參數(shù)出現(xiàn)異常時(shí),主控模塊就會(huì)驅(qū)動(dòng) GTM900模塊向預(yù)置的報(bào)警號(hào)碼發(fā)出包含報(bào)警原因及報(bào)警生理參數(shù)數(shù)值的求救短信息.圖4為監(jiān)測軟件的報(bào)警模塊程序流程圖.
圖4 監(jiān)測軟件報(bào)警模塊流程圖Fig.4 Alarm module flow chart of monitoring software
生理參數(shù)數(shù)據(jù)包的儲(chǔ)存為重現(xiàn)病人發(fā)病時(shí)各種生理參數(shù)提供了基礎(chǔ).?dāng)?shù)據(jù)重現(xiàn)策略是:在打開生理參數(shù)數(shù)據(jù)文件后,每次順序讀取 25個(gè)字節(jié)的數(shù)據(jù),并賦值給 m_recv結(jié)構(gòu)體.然后,調(diào)用數(shù)據(jù)分析與繪圖函數(shù)處理 m_recv結(jié)構(gòu)體中的數(shù)據(jù),并在屏幕上刷新數(shù)據(jù)和繪制曲線.為模擬 CSN808模塊的應(yīng)答方式,系統(tǒng)采用時(shí)間控件,按照 50,Hz的頻率重復(fù)執(zhí)行上述過程,直至文件指針移動(dòng)至生理參數(shù)數(shù)據(jù)文件的結(jié)尾.
讓被監(jiān)測者同時(shí)佩戴醫(yī)用監(jiān)護(hù)設(shè)備和本監(jiān)測系統(tǒng),然后不斷的對比兩系統(tǒng)的數(shù)據(jù)以及各導(dǎo)聯(lián)心電圖.并以此作為依據(jù)近一步微調(diào)人體生理參數(shù)監(jiān)測系統(tǒng),直至兩套系統(tǒng)得出相同的數(shù)據(jù)、曲線.圖 5是監(jiān)測系統(tǒng)在微調(diào)完成之后的效果圖.
圖5 部分監(jiān)測界面Fig.5 Monitoring interface example
圖5(a)為I導(dǎo)聯(lián)心電圖,主界面右側(cè)區(qū)域?yàn)橛靡燥@示病人各種生理參數(shù)數(shù)值的對話框;主界面上方為系統(tǒng)設(shè)置區(qū)域;主界面下方為顯示各種探頭佩戴狀況的狀態(tài)欄.圖5(b)是AVR導(dǎo)聯(lián)圖曲線.圖5(c)是呼吸波曲線,為方便醫(yī)護(hù)人員對呼吸波曲線的觀察,已將對話框隱藏.
按照CSN808模塊的通訊協(xié)議,編輯一組心跳數(shù)值為 0的測試數(shù)據(jù)來測試本地報(bào)警模式及遠(yuǎn)程無線報(bào)警模式,以驗(yàn)證系統(tǒng)的實(shí)時(shí)性和準(zhǔn)確性.本地報(bào)警對話框的文本信息指明了報(bào)警原因以及報(bào)警參數(shù)的數(shù)值.
在本地報(bào)警對話框出現(xiàn)的 12 s之后,求救短信息發(fā)送到了預(yù)置報(bào)警號(hào)碼的手機(jī)上,短信內(nèi)容與報(bào)警對話框給出的文本內(nèi)容相同.5 min后停止測試,在此期間系統(tǒng)運(yùn)行正常.在 Nand Flash中存儲(chǔ)有大小為 22.3 kB的文本文件Rec00,它保存了測試期間的生理參數(shù)數(shù)據(jù)包.選擇數(shù)據(jù)復(fù)現(xiàn)功能后,數(shù)據(jù)開始重現(xiàn),各項(xiàng)參數(shù)均正確無誤.
本文設(shè)計(jì)了一種基于 Windows CE的人體生理參數(shù)監(jiān)測系統(tǒng).系統(tǒng)實(shí)現(xiàn)了多種人體生理參數(shù)的實(shí)時(shí)采集、顯示,并可選擇性地進(jìn)行對包括 ECG曲線在內(nèi)的 9種生理參數(shù)曲線的繪制.同時(shí),系統(tǒng)在必要的時(shí)候能夠自動(dòng)進(jìn)行人體生理參數(shù)數(shù)據(jù)的保存.在此基礎(chǔ)上,還實(shí)現(xiàn)了包括本地報(bào)警和遠(yuǎn)程無線報(bào)警的兩種報(bào)警方式.上位機(jī)軟件以 EVC4.0作為開發(fā)平臺(tái),并采用了模塊化的編程思想,所編寫的程序,可移植性好、功能完善、易于維護(hù).目前,系統(tǒng)已經(jīng)運(yùn)用到了智能輪椅車上,并取得了較好的效果.
[1] Dakun L,F(xiàn)ang Z. Real-time remote monitoring of out-ofhospital with high patients especially risk heart diseases[C]//Proceeding of the 2007 International IEEE/ICME Conference on Complex Medical Engineering.Piscataway:IEEE,2007:332–335.
[2] 車琳琳. 常用生理參數(shù)測量方法的原理及改進(jìn)[J]. 中國醫(yī)療設(shè)備,2008,23(8):53–54,77.
[3] 巫琦. 監(jiān)護(hù)儀的臨床應(yīng)用和發(fā)展[J]. 醫(yī)療裝備,2004,17(3):10–12.
[4] 謝存禧. 基于人口老齡化的智能化健康護(hù)理、監(jiān)控裝備的研發(fā)[J]. 電機(jī)工程技術(shù),2010,39(11):86–89.
[5] 趙玉曉,徐志玲,唐川,等. 醫(yī)院患者無線監(jiān)控系統(tǒng)的軟件設(shè)計(jì)[J]. 實(shí)驗(yàn)室科學(xué),2011,14(1):100–102,106.
[6] 張自明. 基于WinCE的嵌入式平臺(tái)的研究與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2007.
[7] 張毅,王學(xué)思. 基于 WinCE的流接口驅(qū)動(dòng)程序開發(fā)[J]. 工業(yè)控制計(jì)算機(jī),2008,21(6):47–48.
[8] 汪兵. Windows CE 嵌入式高級編程及其實(shí)例詳解[M].北京:中國水利水電出版社,2008:114–129.