基于GPRS的遠(yuǎn)程心電實(shí)時(shí)監(jiān)護(hù)儀軟件系統(tǒng)

2013-08-15 15:31 來(lái)源:互聯(lián)網(wǎng) 作者:洛小辰

當(dāng)今社會(huì),心臟疾病已嚴(yán)重影響了人們的生命安全,許多突發(fā)患者因得不到及時(shí)救治而使生命受到威脅。傳統(tǒng)的心電監(jiān)護(hù)設(shè)備限制了患者的自由,動(dòng)態(tài)心電記錄儀(Holter)雖能便攜地記錄患者日?;顒?dòng)時(shí)的心電數(shù)據(jù),但是沒有實(shí)時(shí)監(jiān)護(hù)功能,對(duì)于危及生命的突發(fā)心臟病變幫助不大。

無(wú)線通信技術(shù)的日漸成熟使便攜式心電實(shí)時(shí)監(jiān)護(hù)成為可能。利用GPRS無(wú)線數(shù)據(jù)通信技術(shù),可將實(shí)時(shí)監(jiān)護(hù)功能與Holter結(jié)合起來(lái)?;颊呖梢耘浯鞅O(jiān)護(hù)儀自由活動(dòng),同時(shí)可隨時(shí)隨地得到心電監(jiān)護(hù)。緊急情況發(fā)生時(shí),患者掌握著可靠的求生路徑;而醫(yī)生可根據(jù)全面的心電數(shù)據(jù)分析患者心臟狀況,使患者的心臟疾病及時(shí)得到預(yù)防和救治。

400Hz或500Hz采樣的心電數(shù)據(jù)是一種帶寬較大的數(shù)據(jù)源,同時(shí)心電監(jiān)護(hù)也有實(shí)時(shí)性要求。本文主要闡述在特定硬件平臺(tái)和整體系統(tǒng)設(shè)計(jì)下的遠(yuǎn)程心電實(shí)時(shí)監(jiān)護(hù)儀軟件系統(tǒng)的設(shè)計(jì)。

1 遠(yuǎn)程心電實(shí)時(shí)監(jiān)護(hù)系統(tǒng)概述

遠(yuǎn)程心電實(shí)時(shí)監(jiān)護(hù)系統(tǒng)包括四個(gè)部分:監(jiān)護(hù)儀(病人終端)、PDA(醫(yī)生終端)、監(jiān)護(hù)服務(wù)器以及心電數(shù)據(jù)服務(wù)器。系統(tǒng)結(jié)構(gòu)如圖1所示。

監(jiān)護(hù)儀由患者隨身佩帶,以400Hz或500Hz的采樣頻率對(duì)患者心電信號(hào)采樣,并把心電數(shù)據(jù)通過(guò)GSM/GPRS網(wǎng)絡(luò)發(fā)送給監(jiān)護(hù)服務(wù)器,數(shù)據(jù)的實(shí)時(shí)性由監(jiān)護(hù)服務(wù)器和監(jiān)護(hù)儀之間的控制信息控制。PDA接收來(lái)自監(jiān)護(hù)服務(wù)器的數(shù)據(jù),并根據(jù)心電分析的結(jié)果通過(guò)數(shù)據(jù)服務(wù)(GPRS數(shù)據(jù)服務(wù))和短消息(SMS)通知監(jiān)護(hù)儀。監(jiān)護(hù)服務(wù)器負(fù)責(zé)接收轉(zhuǎn)存病人端全部心電數(shù)據(jù),實(shí)時(shí)分析及回放分析;同時(shí)向PDA轉(zhuǎn)發(fā)實(shí)時(shí)心電數(shù)據(jù),利用控制信息來(lái)協(xié)調(diào)實(shí)時(shí)心電數(shù)據(jù)的收發(fā)。心電數(shù)據(jù)服務(wù)器存儲(chǔ)所有心電數(shù)據(jù)、患者信息以及設(shè)備信息,除了在監(jiān)護(hù)過(guò)程中存儲(chǔ)心電數(shù)據(jù)外,心電數(shù)據(jù)服務(wù)器還負(fù)責(zé)注冊(cè)患者和設(shè)備信息及管理數(shù)據(jù)庫(kù)遠(yuǎn)程訪問(wèn)等任務(wù)。

2 監(jiān)護(hù)儀硬件平臺(tái)簡(jiǎn)介

監(jiān)護(hù)儀硬件主要由單片機(jī)、電源模塊、心電信號(hào)采集放大模塊、擴(kuò)展NAND Flash、LCD驅(qū)動(dòng)模塊及GSM/GPRS無(wú)線通信模塊組成。

(1) 單片機(jī):PIC18系列單片機(jī),低功耗,通過(guò)PLL倍頻指令頻率可達(dá)10MHz,自帶ADC采樣頻率最高可達(dá)幾十kHz。

(2) 電源模塊:為各模塊提供4V和3.3V兩種直流電壓源。

(3) 心電信號(hào)采集放大模塊:微弱心電信號(hào)采集并放大800倍,同時(shí)可檢測(cè)導(dǎo)聯(lián)脫落。

(4) 擴(kuò)展NAND Flash:32M NAND Flash,最多可存儲(chǔ)長(zhǎng)達(dá)23小時(shí)的原始心電數(shù)據(jù)。

(5) LCD驅(qū)動(dòng)模塊:驅(qū)動(dòng)80×160點(diǎn)陣的LCD。

(6) GSM/GPRS無(wú)線通信模塊:內(nèi)嵌TCP(UDP)/IP協(xié)議棧,利用Socket建立網(wǎng)絡(luò)連接,在應(yīng)用GPRS發(fā)送數(shù)據(jù)的同時(shí),仍可以提供GSM語(yǔ)音、短信(SMS)服務(wù)。

3 軟件系統(tǒng)關(guān)鍵技術(shù)

監(jiān)護(hù)儀軟件系統(tǒng)的核心是管理Flash、GPRS網(wǎng)絡(luò)、無(wú)線模塊的GSM功能及LCD。

3.1 Flash管理

Flash存儲(chǔ)器用于存儲(chǔ)心電數(shù)據(jù)和控制信息,以保證心電數(shù)據(jù)在斷電時(shí)不遺失及日后查看監(jiān)護(hù)過(guò)程的相關(guān)控制信息。

內(nèi)存映射(Memory Map)模型把Flash作為一個(gè)整體,各種不同數(shù)據(jù)按照類別預(yù)先分配存儲(chǔ)空間。操作Flash數(shù)據(jù)時(shí),首先把內(nèi)部索引(譬如數(shù)據(jù)索引或者消息索引)映射到分區(qū)地址,剔除無(wú)效存儲(chǔ)單元,再通過(guò)Flash操作函數(shù)讀取或?qū)懭胂鄳?yīng)的數(shù)據(jù)。

3.1.1 Flash分區(qū)結(jié)構(gòu)

(1) Head Seg:大小為1個(gè)塊(Block),用于存儲(chǔ)分區(qū)版本號(hào)、壞塊表及其余分區(qū)的基本信息,包括分區(qū)起始地址(BaseAdd)、分區(qū)跨度(以塊為單位)、分區(qū)最高地址、數(shù)據(jù)區(qū)(Data Seg)中的數(shù)據(jù)范圍、數(shù)據(jù)區(qū)中數(shù)據(jù)的格式(FMT)、消息區(qū)(SMS Seg)所有消息的聯(lián)系人列表等,每個(gè)分區(qū)的基本信息占一頁(yè)(Page)。本分區(qū)占Flash存儲(chǔ)器的第一個(gè)塊。根據(jù)Flash的技術(shù)資料可知,第一塊正常使用時(shí)不會(huì)出現(xiàn)無(wú)效存儲(chǔ)單元,因此許多關(guān)鍵數(shù)據(jù)保存于此。

(2) Data Seg:大小為1000個(gè)塊,即1000個(gè)連續(xù)的有效塊,用于存儲(chǔ)心電數(shù)據(jù)。如果采樣頻率為400Hz,采樣位數(shù)為8位,數(shù)據(jù)區(qū)可存儲(chǔ)11.37小時(shí)的原始心電數(shù)據(jù),所有的心電數(shù)據(jù)從采樣起始點(diǎn)0開始依次編號(hào)即心電數(shù)據(jù)索引,利用該索引尋址。

(3) SMS Seg:大小為20個(gè)塊,即20個(gè)連續(xù)的有效塊。每個(gè)塊存儲(chǔ)一條消息的位圖,消息的到達(dá)時(shí)間、發(fā)送者存儲(chǔ)在該Block的第一頁(yè)(該塊中相對(duì)地址為0的頁(yè))。消息存滿則從頭開始覆蓋已有消息,利用消息的索引號(hào)來(lái)尋址。

Flash分區(qū)結(jié)構(gòu)示意圖如圖2所示。

3.1.2 Flash接口函數(shù)

Flash的讀操作,首先從存儲(chǔ)單元中以頁(yè)(page)為單位把數(shù)據(jù)讀入Flash內(nèi)部的寄存器中,然后再把數(shù)據(jù)導(dǎo)入處理器的存儲(chǔ)器。讀操作的操作耗時(shí)為幾十微秒,與單片機(jī)的指令周期大致匹配。讀操作以頁(yè)為基本單元,以讀取整頁(yè)數(shù)據(jù)效率最高。Flash頁(yè)讀取操作一般不會(huì)產(chǎn)生錯(cuò)誤,F(xiàn)lash文件系統(tǒng)會(huì)有糾錯(cuò)操作,最簡(jiǎn)單的糾錯(cuò)碼可以把非連續(xù)的單個(gè)位錯(cuò)誤改正。而對(duì)于當(dāng)前處理器上的內(nèi)存映射模型,糾錯(cuò)碼的引入將大大降低運(yùn)行效率,因此不做糾錯(cuò)處理。

(1) FlashPageRead():首先鎖存起始操作字節(jié)的行列地址,送入Read指令,隨后的每個(gè)讀操作時(shí)序把當(dāng)前字節(jié)讀出,當(dāng)前地址指針加1并把數(shù)據(jù)存儲(chǔ)到讀操作緩沖區(qū)中,同時(shí)調(diào)用函數(shù)時(shí)須給出讀出字節(jié)的總數(shù)。

Flash的寫操作,又稱為對(duì)Flash的編程,即把數(shù)據(jù)存儲(chǔ)到Flash存儲(chǔ)單元中。存儲(chǔ)單元事先必須已擦除(Erase)過(guò)才能寫入數(shù)據(jù)。寫操作耗時(shí)為幾百微秒,擦除操作耗時(shí)最多為幾毫秒,在數(shù)量級(jí)上已大大超過(guò)了RAM的寫操作。利用內(nèi)存映射模型操作Flash的難點(diǎn)在于合理調(diào)度使Flash存儲(chǔ)單個(gè)字節(jié)的耗時(shí)與處理器的指令周期相匹配。每次寫操作要盡可能多地寫入數(shù)據(jù),一般每頁(yè)(512B)寫入一次。寫操作與擦除操作可能產(chǎn)生壞塊,因此須通知主程序是否產(chǎn)生壞塊。

(2) FlashProgram():首先鎖存寫入數(shù)據(jù)起始字節(jié)的行列地址,隨后按照函數(shù)調(diào)用時(shí)給定的寫入數(shù)據(jù)總數(shù),每個(gè)寫操作時(shí)序向Flash寄存器存儲(chǔ)一個(gè)字節(jié)的數(shù)據(jù)。當(dāng)寄存器滿,送入Program操作指令即可把寄存器中的數(shù)據(jù)存儲(chǔ)進(jìn)入物理存儲(chǔ)單元中。

(3) FlashECGDMap():根據(jù)分區(qū)內(nèi)頁(yè)索引和壞塊列表檢索出實(shí)際的操作頁(yè)地址。首先把分區(qū)內(nèi)頁(yè)地址換算為理想實(shí)際地址,即不考慮壞塊,然后檢索壞塊列表及剔除無(wú)效地址并給出實(shí)際操作地址。

(4) FlashStoreECGData():在數(shù)據(jù)分區(qū)中存儲(chǔ)心電數(shù)據(jù),首先檢查Flash是否處于繁忙狀態(tài),若空閑則立即占用Flash,把采樣數(shù)據(jù)導(dǎo)入Flash寫緩沖。如果寫緩沖達(dá)到存儲(chǔ)操作條件,則調(diào)用FlashECGDMap()獲取實(shí)際的操作地址并檢查是否Flash的該操作塊需要擦除。若需要擦除,則調(diào)用FlashErase()函數(shù),擦除狀況檢查完畢即調(diào)用FlashProgram()保存數(shù)據(jù)。若所有操作完畢,則釋放Flash的控制權(quán)。

(5) FlashLoadECGData():從數(shù)據(jù)分區(qū)中讀取一定字節(jié)數(shù)的心電數(shù)據(jù)。首先需要在Flash空閑狀態(tài)下獲取Flash的控制權(quán),隨后利用FlashECGDMap()獲取實(shí)際操作地址并判斷是否出現(xiàn)跨頁(yè)讀操作。如果不需跨頁(yè),則調(diào)用FlashPageRead(),讀出相應(yīng)數(shù)據(jù)到讀緩沖即可;若跨頁(yè),則分別在兩頁(yè)分兩次讀取規(guī)定字節(jié)個(gè)數(shù)的連續(xù)心電數(shù)據(jù)。

1 2 > 
GPRS 監(jiān)護(hù)儀

相關(guān)閱讀

暫無(wú)數(shù)據(jù)

一周熱門