基于ARM設計的多生理參數(shù)嵌入式監(jiān)護系統(tǒng)
1、引言
多生理參數(shù)監(jiān)護系統(tǒng)用來對病人的生理或生化參數(shù)進行連續(xù)、長時間、自動、實時監(jiān)測,并經(jīng)分析、處理后實現(xiàn)多類別自動報警、自動記錄,并具有對結(jié)果的綜合判斷能力,便于醫(yī)護人員及時發(fā)現(xiàn)病人的病情變化,隨時采取必要的護理與急救措施,從而大幅度減少危重病人的死亡率。
國外的人體生理監(jiān)護儀發(fā)展趨勢是采用移動式監(jiān)護技術(shù)。在歐洲,借助現(xiàn)在小巧、價低的嵌入式計算機和無線網(wǎng)絡技術(shù),開發(fā)各種能穿在身上的監(jiān)護系統(tǒng)的研究工作已經(jīng)開展得非常之好,愛立信、諾基亞和飛利浦等公司都在進行相應的研究開發(fā)工作。在國內(nèi),目前普遍采用的人體生理監(jiān)護系統(tǒng)中,大致可分為三種:1)基于PC機平臺的監(jiān)護系統(tǒng),功能強大且完善,但其體積龐大,不便于移動。2)微型和便攜式監(jiān)護儀,大多采用低檔單片機實現(xiàn),功能簡單,只能進行信號的采集和顯示,不便于醫(yī)務人員監(jiān)視。3)采用嵌入式系統(tǒng)的監(jiān)護系統(tǒng),其體積小、可靠性高、功耗低,但大多采用工業(yè)用PC104主板,普遍成本比較高。
本文研究的多生理參數(shù)監(jiān)護系統(tǒng)包括心電(ECG)、呼吸(REST)、無創(chuàng)血壓(NIBP)、血氧飽和度(SPO2)、體溫五個參數(shù)的實時監(jiān)護。由這些參數(shù)的二次數(shù)據(jù)還可提取心率、心律失常、呼吸率、收縮壓、舒張壓、平均壓及脈率等參數(shù);可以較全面地評估循環(huán)系統(tǒng)和呼吸系統(tǒng)的功能。由于ARM的嵌入式系統(tǒng)設備通常具有體積小、功耗低、功能集中、網(wǎng)絡功能強大和穩(wěn)定性好等優(yōu)點,因此作者所在課題組利用ARM研制了一種生理參數(shù)監(jiān)護系統(tǒng),以滿足多生理參數(shù)監(jiān)護系統(tǒng)不斷發(fā)展的要求。
2、嵌入式多生理參數(shù)監(jiān)護系統(tǒng)的構(gòu)建
為搭建更加理想的嵌入式控制系統(tǒng),綜合考慮了本監(jiān)護系統(tǒng)的實際應用,采用嵌入式Linux控制系統(tǒng)作為主控系統(tǒng),圖1是系統(tǒng)整體結(jié)構(gòu)圖,系統(tǒng)在ARM9的硬件平臺上搭建了一個嵌入式Linux系統(tǒng),其中Linux內(nèi)核采用的是2.4.18穩(wěn)定內(nèi)核。
2.1定制Linux系統(tǒng)
依據(jù)所選擇的CPU類型即ARM9,以公開的嵌入式Linux源代碼為基礎,根據(jù)設計的嵌入式目標板情況編寫相應的Bootloader程序(啟動裝載程序)。然后根據(jù)標準Linux裁剪出適合的內(nèi)核和文件系統(tǒng),采用的嵌入式Linux在其內(nèi)核內(nèi)部實現(xiàn)了TCP/IP和相應的驅(qū)動,并裁剪掉了不需要的模塊,在Redhat9.0的宿主機上對Bootloader和2.4.18版本的Linux內(nèi)核進行交叉編譯[5]。再對其文件系統(tǒng)進行精簡,將Bootloader程序、內(nèi)核和文件系統(tǒng)固化到目標板的Flash(閃存)中,便定制好了合適的嵌入式Linux系統(tǒng)。
2.2嵌入式多生理參數(shù)監(jiān)護系統(tǒng)的硬件構(gòu)成
如圖2所示為嵌入式多生理參數(shù)監(jiān)護系統(tǒng)的硬件結(jié)構(gòu)圖,主控制模塊采用的是ARM體系的處理器,即是Samsung公司的 S3C2410芯片,該芯片采用ARM920T微處理器作為控制器內(nèi)核。硬件各種接口以及擴展,都是可定制的[1]。本系統(tǒng)是專用于人體生理參數(shù)的監(jiān)護,故接口設計主要考慮各種人體生理參數(shù)的傳感器。由于系統(tǒng)中的各生理參數(shù)監(jiān)護模塊,都采用了OEM模塊,這些模塊采用單一的串口通訊,通過串口/USB口轉(zhuǎn)換模塊,就可以通過USB接口接入主控系統(tǒng)中。
3、核心功能的實現(xiàn)
系統(tǒng)的核心功能是要實現(xiàn)對各心理參數(shù)的實時監(jiān)護,同時能及時計算和分析數(shù)據(jù),并能準確快速地發(fā)現(xiàn)超標的數(shù)據(jù),實現(xiàn)超標報警功能。其中超標報警接口和可擴展的接口還需要編寫相應的驅(qū)動程序。
3.1驅(qū)動程序的編寫與調(diào)試
超標報警接口以及可擴展的接口,都應編寫相應的驅(qū)動程序,其中超標報警接口的驅(qū)動程序的基本流程如下:
1)定義主設備號; 2)驅(qū)動初始化(或者是模塊的初始化); 3)實現(xiàn)文件操作,定義file_operations結(jié)構(gòu); 4)實現(xiàn)中斷服務(不是必須的);5)編譯該驅(qū)動到內(nèi)核(或用insmod命令加載);6)測試設備。
超標報警接口作為外接的一個設備,先定義以下設備號,
#difine DEVICE_NAME “alarms” /*定義alarm設備的名字*/
#difine ALARM_MAJOR 254 /*定義alarm設備的主設備號*/
在明確I/O方式,alarm設備對應的硬件資源之后,可以采用ioctl控制alarm設備。而編寫Linux設備驅(qū)動程序的主要工作就是編寫子函數(shù)填充file_operations的各個字段。下面就是填充之后的file_operations,
struct file_operations test_fops = {read: read_test,
write: write_test,
open: open_test,
release: release_test};
上述各個子函數(shù)的功能如下:
open_test函數(shù)實現(xiàn)請求I/O內(nèi)存資源;映射寄存器地址并保存;讀取寄存器初始值并重新設置控制寄存器。release_test函數(shù)實現(xiàn) I/O內(nèi)存資源的釋放。read_test函數(shù)實現(xiàn)對寄存器當前狀態(tài)的讀取,并將讀到的數(shù)據(jù)傳遞給應用程序。write_test函數(shù)實現(xiàn)將應用程序傳來的數(shù)據(jù)輸出。
PC機上調(diào)試完畢后,將此驅(qū)動程序編譯進嵌入式Linux的內(nèi)核前,需要進行一定的修改和設置。在交叉編譯內(nèi)核時,alarm.c文件會被自動編譯并嵌入內(nèi)核。然后將編譯好的內(nèi)核制作成映像文件以備下載。最后編寫一個測試程序,交叉編譯測試程序并將其添加到文件系統(tǒng)中去。將新的內(nèi)核映像以及文件系統(tǒng)下載到開發(fā)板上。新的內(nèi)核運行之后,在目錄/dev下創(chuàng)建設備,然后執(zhí)行測試程序即可。
3.2監(jiān)護軟件的實現(xiàn)
在嵌入式Linux中,采用功能強大而全面的GUI開發(fā)工具能夠縮短開發(fā)周期和降低開發(fā)難度,本系統(tǒng)采用Qt/Embedded開發(fā)監(jiān)護軟件[6]。
3.2.1程序設計及功能模塊結(jié)構(gòu)
Qt編程的優(yōu)點是Signal Slot機制,當一個組件發(fā)出Signal時,其他一個組件或多個組件可以通過Slot接收發(fā)來的Signal,組件本身也可以接收自己的Signal,這樣處理一個事件將變得非常容易[6]。在通用計算機系統(tǒng)開發(fā)中普遍使用的模塊化設計技術(shù)需要更好地應用于嵌入式系統(tǒng)[3]。從軟件層次角度而言,應用軟件的模塊化相對容易實現(xiàn)。圖3所示是應用軟件的功能模塊結(jié)構(gòu)圖,圖4所示是主程序的流程圖。
其中,數(shù)據(jù)的采集與控制是主控模塊,參數(shù)設置模塊通過獲取人機界面上的輸入的參數(shù)信息,對通信模塊以及數(shù)據(jù)分析處理模塊的各項參數(shù)進行設定。又由于本系統(tǒng)中的各個人體生理參數(shù)監(jiān)護模塊采集的數(shù)據(jù)格式不一致,所以還需要一個格式轉(zhuǎn)換的過程,以方便顯示和存儲。
3.2.2通信模塊
在主控系統(tǒng)中,與下位機各個模塊的通信協(xié)議大致相同。在參數(shù)設置以后,下位機各模塊根據(jù)指令信息進行生理參數(shù)監(jiān)測并上傳數(shù)據(jù)。這里以血壓測量模塊為例,簡述如下:
采用RS232串口異步通信,1位起始位,8位數(shù)據(jù)位,1位停止位,無奇偶校驗,波特率2400b/s。傳輸數(shù)據(jù)采用ASCII模式。上位機到模塊的命令格式:<STX> ab;cd<ETX>,
其中<STX> (02) 是ASCII碼的正文起始標志 ;“ab”是命令代碼對應的ASCII碼值;“cd”是兩位16進制校驗和對應的ASCII碼值。校驗和是此前各位數(shù)值之和的低8位,不包括<STX> (02);<ETX>(03)是ASCII碼的正文結(jié)束標志。如“02 30 31 3B 3B 44 37 03”表示開始一次手動測量。模塊到上位機的數(shù)據(jù)格式:<STX> abc; ghi; jki;mno;pqr <ETX>,其中“abc”,“ghi”,“jki”,“mno”,“pqr”分別代表當前袖帶壓力值,收縮壓,舒張壓,平均壓,脈率的各 10進制位的數(shù)所對應的ASCII碼值。
3.2.3數(shù)據(jù)顯示模塊
數(shù)據(jù)顯示模塊中,主要是能實現(xiàn)動態(tài)地顯示波形,其中關(guān)鍵的函數(shù)就是paintEvent( QPaintEvent * ),函數(shù)的主要代碼為:
#include <qpainter.h> //必須包含的頭文件
void ConnectWidget::paintEvent( QPaintEvent * ){
QPainter paint( this );
for ( int i=0; i<count-1; i++ ) { // 連接所有的點
for ( int j=i+1; j<count; j++ ) {
paint.setPen( colors[rand()%MAXCOLORS] ); // 隨機設畫筆的顏色,也可確定顏色
paint.drawLine( points[i], points[j] ); }}}// 畫線
通過這個函數(shù),可以將每個點連起來,形成線,然后不斷更新它,就能實現(xiàn)動態(tài)地顯示波形。當更新時,調(diào)用以下函數(shù):
void DrawView::paintEvent( QPaintEvent * ){
QPainter paint( this );
drawIt( &paint );}
3.2.4程序的界面
由于在嵌入式Linux系統(tǒng)下不便于截圖,圖5在REDHAT9.0下的測試界面。
4、結(jié)論
目前正在研制當中的監(jiān)護系統(tǒng)是在基于ARM微處理器的硬件平臺上實現(xiàn)的,采用了嵌入式Linux操作系統(tǒng),具有多參數(shù)、易定制、可擴展、高穩(wěn)定性等優(yōu)點。實驗表明,本監(jiān)護系統(tǒng)能夠準確實時地檢測用戶的心電(ECG)、呼吸(REST)、無創(chuàng)血壓(NIBP)、血氧飽和度(SPO2)、體溫等五個參數(shù),并能對其進行一定的數(shù)據(jù)分析,能準確快速地發(fā)現(xiàn)超標的數(shù)據(jù),實現(xiàn)超標報警功能。經(jīng)實驗證明,該系統(tǒng)運行可靠,已達到設計的要求,具有很好的應用前景。
5、本文作者創(chuàng)新點:
在ARM微處理器的硬件平臺上,采用了嵌入式Linux操作系統(tǒng)作為主控系統(tǒng)作為生理參數(shù)監(jiān)護儀的控制系統(tǒng),使得監(jiān)護系統(tǒng)具有多參數(shù)、易定制、可擴展、高穩(wěn)定性等優(yōu)點。系統(tǒng)的應用軟件采用Qt/Embedded開發(fā),縮短了開發(fā)周期和降低了開發(fā)難度,同時,監(jiān)護系統(tǒng)還具有非常人性化的人機界面。
參考文獻:
1. 陳賾。ARM9嵌入式技術(shù)及Linux高級實踐教程[M].北京:北京航空航天大學出版社,2005.
2.周紅波?;谇度胧讲僮飨到y(tǒng)的開發(fā)方法[J].微計算機信息,2006,7-2:55-57
3.王田苗。嵌入式系統(tǒng)設計與實例開發(fā)[M].北京:清華大學出版社,2002.
4.唐建東,周鵬。基于Linux的嵌入式系統(tǒng)設計與實現(xiàn)[J].計算機工程,2002,28(6):254-256.
5.鄒思軼。嵌入式Linux設計與應用[M].北京:清華大學出版社,2002.
6.http://www.qtcn.org/