基于GPRS的远程心电实时监护仪软件系统设计
2008-02-03
作者:李继明,张 跃,陈 可
摘 要:针对远程心电" title="心电">心电实时监护" title="实时监护">实时监护的特殊要求设计的监护仪" title="监护仪">监护仪软件系统,实现了心电实时监护、医嘱短信收发、监护状态显示、紧急求救报警等功能。
关键词:心电监护 NAND Flash地址映射模型 GPRS 短消息
当今社会,心脏疾病已严重影响了人们的生命安全,许多突发患者因得不到及时救治而使生命受到威胁。传统的心电监护设备限制了患者的自由,动态心电记录仪(Holter)虽能便携地记录患者日常活动时的心电数据,但是没有实时监护功能,对于危及生命的突发心脏病变帮助不大。
无线通信技术的日渐成熟使便携式心电实时监护成为可能。利用GPRS无线数据通信技术,可将实时监护功能与Holter结合起来。患者可以配戴监护仪自由活动,同时可随时随地得到心电监护。紧急情况发生时,患者掌握着可靠的求生路径;而医生可根据全面的心电数据分析患者心脏状况,使患者的心脏疾病及时得到预防和救治。
400Hz或500Hz采样的心电数据是一种带宽较大的数据源,同时心电监护也有实时性要求。本文主要阐述在特定硬件平台和整体系统设计下的远程心电实时监护仪软件系统的设计。
1 远程心电实时监护系统概述
远程心电实时监护系统包括四个部分:监护仪(病人终端)、PDA(医生终端)、监护服务器以及心电数据服务器。系统结构如图1所示。
监护仪由患者随身佩带,以400Hz或500Hz的采样频率对患者心电信号采样,并把心电数据通过GSM/GPRS网络发送给监护服务器,数据的实时性由监护服务器和监护仪之间的控制信息控制。PDA接收来自监护服务器的数据,并根据心电分析的结果通过数据服务(GPRS数据服务)和短消息" title="短消息">短消息(SMS)通知监护仪。监护服务器负责接收转存病人端全部心电数据,实时分析及回放分析;同时向PDA转发实时心电数据,利用控制信息来协调实时心电数据的收发。心电数据服务器存储所有心电数据、患者信息以及设备信息,除了在监护过程中存储心电数据外,心电数据服务器还负责注册患者和设备信息及管理数据库远程访问等任务。
2 监护仪硬件平台简介
监护仪硬件主要由单片机、电源模块、心电信号采集放大模块、扩展NAND Flash、LCD驱动模块及GSM/GPRS无线通信模块组成。
(1)单片机:PIC18系列单片机,低功耗,通过PLL倍频指令频率可达10MHz,自带ADC采样频率最高可达几十kHz。
(2)电源模块:为各模块提供4V和3.3V两种直流电压源。
(3)心电信号采集放大模块:微弱心电信号采集并放大800倍,同时可检测导联脱落。
(4)扩展NAND Flash:32M NAND Flash,最多可存储长达23小时的原始心电数据。
(5)LCD驱动模块:驱动80×160点阵的LCD。
(6)GSM/GPRS无线通信模块:内嵌TCP(UDP)/IP协议栈,利用Socket建立网络连接,在应用GPRS发送数据的同时,仍可以提供GSM语音、短信(SMS)服务。
3 软件系统关键技术
监护仪软件系统的核心是管理Flash、GPRS网络、无线模块的GSM功能及LCD。
3.1 Flash管理
Flash存储器用于存储心电数据和控制信息,以保证心电数据在断电时不遗失及日后查看监护过程的相关控制信息。
内存映射(Memory Map)模型把Flash作为一个整体,各种不同数据按照类别预先分配存储空间。操作Flash数据时,首先把内部索引(譬如数据索引或者消息索引)映射到分区地址,剔除无效存储单元,再通过Flash操作函数读取或写入相应的数据。
3.1.1 Flash分区结构
(1)Head Seg:大小为1个块(Block),用于存储分区版本号、坏块表及其余分区的基本信息,包括分区起始地址(BaseAdd)、分区跨度(以块为单位)、分区最高地址、数据区(Data Seg)中的数据范围、数据区中数据的格式(FMT)、消息区(SMS Seg)所有消息的联系人列表等,每个分区的基本信息占一页(Page)。本分区占Flash存储器的第一个块。根据Flash的技术资料可知,第一块正常使用时不会出现无效存储单元,因此许多关键数据保存于此。
(2)Data Seg:大小为1000个块,即1000个连续的有效块,用于存储心电数据。如果采样频率为400Hz,采样位数为8位,数据区可存储11.37小时的原始心电数据,所有的心电数据从采样起始点0开始依次编号即心电数据索引,利用该索引寻址。
(3)SMS Seg:大小为20个块,即20个连续的有效块。每个块存储一条消息的位图,消息的到达时间、发送者存储在该Block的第一页(该块中相对地址为0的页)。消息存满则从头开始覆盖已有消息,利用消息的索引号来寻址。
Flash分区结构示意图如图2所示。
3.1.2 Flash接口函数
Flash的读操作,首先从存储单元中以页(page)为单位把数据读入Flash内部的寄存器中,然后再把数据导入处理器的存储器。读操作的操作耗时为几十微秒,与单片机的指令周期大致匹配。读操作以页为基本单元,以读取整页数据效率最高。Flash页读取操作一般不会产生错误,Flash文件系统会有纠错操作,最简单的纠错码可以把非连续的单个位错误改正。而对于当前处理器上的内存映射模型,纠错码的引入将大大降低运行效率,因此不做纠错处理。
(1)FlashPageRead():首先锁存起始操作字节的行列地址,送入Read指令,随后的每个读操作时序把当前字节读出,当前地址指针加1并把数据存储到读操作缓冲区中,同时调用函数时须给出读出字节的总数。
Flash的写操作,又称为对Flash的编程,即把数据存储到Flash存储单元中。存储单元事先必须已擦除(Erase)过才能写入数据。写操作耗时为几百微秒,擦除操作耗时最多为几毫秒,在数量级上已大大超过了RAM的写操作。利用内存映射模型操作Flash的难点在于合理调度使Flash存储单个字节的耗时与处理器的指令周期相匹配。每次写操作要尽可能多地写入数据,一般每页(512B)写入一次。写操作与擦除操作可能产生坏块,因此须通知主程序是否产生坏块。
(2)FlashProgram():首先锁存写入数据起始字节的行列地址,随后按照函数调用时给定的写入数据总数,每个写操作时序向Flash寄存器存储一个字节的数据。当寄存器满,送入Program操作指令即可把寄存器中的数据存储进入物理存储单元中。
(3)FlashECGDMap():根据分区内页索引和坏块列表检索出实际的操作页地址。首先把分区内页地址换算为理想实际地址,即不考虑坏块,然后检索坏块列表及剔除无效地址并给出实际操作地址。
(4)FlashStoreECGData():在数据分区中存储心电数据,首先检查Flash是否处于繁忙状态,若空闲则立即占用Flash,把采样数据导入Flash写缓冲。如果写缓冲达到存储操作条件,则调用FlashECGDMap()获取实际的操作地址并检查是否Flash的该操作块需要擦除。若需要擦除,则调用FlashErase()函数,擦除状况检查完毕即调用FlashProgram()保存数据。若所有操作完毕,则释放Flash的控制权。
(5)FlashLoadECGData():从数据分区中读取一定字节数的心电数据。首先需要在Flash空闲状态下获取Flash的控制权,随后利用FlashECGDMap()获取实际操作地址并判断是否出现跨页读操作。如果不需跨页,则调用FlashPageRead(),读出相应数据到读缓冲即可;若跨页,则分别在两页分两次读取规定字节个数的连续心电数据。
3.2 GPRS网络接口设计
硬件平台的通信模块是Wavecom公司的2406B。GPRS又称无线分组服务,用于在GSM网络上传输数据。在进行GPRS数据发送的同时,短消息和语音服务不会被禁止,但GPRS数据服务和GSM服务不能同时进行。2406B模块的GPRS上行速率可以达到10kbps,通过设置数据发送串口" title="串口">串口的波特率为9 600bps,可使数据进出流量匹配。
3.2.1 2406B模块初始化
首先设置2406B中两个串口的波特率、绑定的数据类型及模块时钟。串口1绑定GPRS数据,串口2绑定GSM数据。串口1的波特率设置为9 600即可使网络与接口速率匹配;串口2返回模块控制字,设置为19 200的波特率即可与处理器运行速度匹配。同时还要为模块设置当前时间。AT指令见表1中“AT指令序列1”。
其次通过AT指令连接GPRS网络和服务器。AT指令见表1中“AT指令序列2”。
模块的OpenAT程序实现了TCP/IP协议,同时把汉字字模加入模块。指令序列2 中的AT指令按照顺序设置成功后即建立TCP/IP连接,模块即进入数据模式。此时通过串口送入的所有数据全部作为网络数据送交网络,送入
3.2.2 网络模型及接口函数
数据传输过程分为注册阶段和数据发送阶段。
在注册阶段,监护仪向服务器发送注册认证数据报。内容包括设备序列号(Machine ID)、数据格式(FMT)、采样频率、采样位数、采样环境工频频率、AD转换高低电压和直流偏置、数据压缩方法以及采样起始时间。服务器收到注册数据后进行身份验证,验证通过则发送回应消息,即为服务接纳的时间和联系人列表。监护仪收到回应消息即进入数据发送阶段。
数据发送阶段,监护仪向服务器发送实时心电数据。数据发送策略有两种:注重“实时性”的发送策略,定义当前采样点至其前1分钟的心电数据为“实时心电数据”,享有发送的优先权,“补发数据”在“实时心电数据”发送完毕以后发送;注重“连续性”的发送策略,以保持数据完整性为目标,“补发数据”享有数据发送优先权,服务器申请的数据会被优先发送。数据发送阶段病人及设备的各种异常状况定义为“报警消息”发送给服务器。
网络状态转换图如图3,由此设计的网络接口函数为:(1)TransData():负责发送实时数据、补发数据和发送报警消息,其中报警消息具有最高优先级,连续性的发送策略补发数据优先级高于实时数据,实时性的发送策略发送优先级与连续性策略相反;(2)ECGRegister():负责建立与服务器之间的ECG连接,函数定时发送注册信息包和完成注册过程确认。
3.3 GSM功能接口
GSM功能包括:短消息收发、信号强度获取、时间获取、电量获取、按键消息通知、发声。这些都依靠无线模块串口2以AT指令进行配置和查询。
使用的AT指令有:“AT+CNMI=0,1,1,1,0”,配置短消息格式;“AT+CSMP=17,169,0,8”,文本采用Unicode编码;“AT+CMGF=1”,短消息发送采用TXT格式;“AT+CSCA=<短消息服务中心号码>”,设置短消息服务中心号码;“AT+CMGS=<号码>r<短消息内容>Ctrl-Z”,向<号码>发送短消息;“AT+CSQ”,获取信号强度,格式为“+CSQ:<信号强度>,xx”;“AT+CCLK?”,获取当前时间,格式为“+CCLK:yy/mm/dd hh:mm:ss”;“AT+ADC?”,获取电池电量,以毫伏为单位,格式为“+ADC:xxxx,……”;“AT+CMER=,1”,配置模块返回按键产生的消息,消息结构为“+CKEY:
模块接收到的短消息以0xAA为通知码,接着是发送者号码,随后是短消息的Bitmap,可直接用于显示,短消息不保存在模块中,并仅在串口2给出通知。
3.4 LCD显示
硬件平台使用80×160点阵的单色LCD,软件维护一个微型字库,包括几十个汉字以及所有ASCII符号中的可见字符,供界面显示使用。无线模块自带汉字库,可以直接显示收到的SMS。预存的短消息维护在单片机的程序存储器中,每条预存消息有Unicode和Bitmap两种格式,Unicode用于发送,Bitmap用于显示。
4 监护仪软件功能
利用中断将数据采集与数据发送分离。数据采集、存储和解析组成一个事务集;数据发送与短信浏览、监护状态显示及紧急求救报警等事务组成另一个事务集。两个事务集并行运行,Flash存储器及其中的数据和消息为关键资源。
4.1 心电实时监护
心电实时监护即心电数据采集、存储、发送。监护程序流程图如图4。
4.2 医嘱短信收发
监护仪可以向服务器、医生、亲人等发送预设消息,同时可以接收联系人的短消息。图5(a)为预设短消息发送界面。
4.3 监护状态显示
监护过程嵌入心电分析算法可获得监护状态参数,如嵌入了R波检测算法,可以获取心率参数。心电分析算法由算法组负责,此处不加叙述,界面见图5(b)。
4.4 紧急求救报警
病人感觉不适时可按下紧急求救按钮,监护仪即进入报警模式,可以向服务器、医生、亲属以数据消息和短消息两种方式求救,界面见图5(c)。
监护系统已经通过内部测试,即将进入临床测试阶段。随着测试的深入,将对系统容错性及实用性提出更高要求,因此终端软件系统还要不断地维护和改进以适应不同需求。
参考文献
[1] 姚湘平,张跃.基于GPRS的远程心电实时监护终端[J].电子技术应用,2006,32(4):77-79.
[2] 代少升,张跃.便携式远程心电实时监护仪的研制[J].医疗卫生装备,2006,27(9):1-2.
[3] Q2406 and Q2426 Product Specification.Wavecom Corporation,2003.
[4] CEN/TC 251.Health informatics-Standard communication protocol-Computer-assisted electrocardiography EN 1064:2005[S].European Committee for Standardization,2005.