基于多线程技术的远程心电监测系统
2014-07-09姜红于锋刘桂芳
姜红 于锋 刘桂芳
摘要:本文中主要介绍了在.NET的框架下通过Windows的服务和多线程的技术实现远程的心电监测,将多线程技术和.NET灵活结合,通过windows的串口扩展实现多端口对心电同时监测的远端传输请求等,同时实现对心电数据无失真的传输和接收,有效的提高资源的利用率以及对远程的心电诊断性能的整体提升。
关键词:多线程;串口通信;远程医疗
当前,科学技术发展较为迅猛,应用到医学临床研究中,实时监控系统的引入,对于实时观察了解患者的各项指标具有重要意义,对于指导临床治疗具有较高价值,本文主要研究基于多线程技术的远程心电监测系统工作,为推广应用提供参考。
1关于实时监测系统
1.1概述 实时的监控系统或者通信系统最基本的要求和关键环节就是实时性,特别是将系统应用到对人体的健康参数监测方面,对实时性的要求更高,而远程的心电监护则是把对患者的心电图监测设备留在患者的家中,需要监测记录患者的即时的心电图时,需要通过拨号传输将检测结果传送到医院的接收中心。远程的心电监测系统组成部分包括用户端的心电记录和传输仪器,另一端为医院的接收中心,可以通过Modem将二者联系起来,主要是接入到公用电话网实现数据的通信[1]。这就克服传统的调频模拟电话在传输的过程中存在的缺点,比如抗干扰的能力较弱导致信号失真。通过这和实时的通信系统,用户的身体指标,特别是心电指标就可以在家利用电话准确的传送至医院,及时的获得到医生诊断的信息等。
1.2问题提出 实时监测系统的关键是医院的接收中心是如何快速的响应并准确无失真的对心电图的数据进行接收,这是实现远程对心电进行监护核心技术。当前,存在的问题是电话网络普遍的存在着工作站并发和接收的机制不完善,以至于工作站的投入数量较大,而且患者有时需要处在占线等待的状态等问题。本文则研究利用多线程的机制,探讨解决问题的方法。本文引入了win9X/NT,这个操作系统具有支持多任务同时操作的优点,且每个进程都是应用程序独立的执行,进程至少占一个线程,也就是主线程,同时,还能根据任务的需要快速的建立起其他多个线程。而多线程技术的应用实际意义是进程实现的过程中进行多任务的扩展,赋予代码并行执行,从而简化了应用程序结构,提高了对CPU利用率,同时提高应用程序响应的能力,加快了通信程序处理信息的速度,成为数据通信首选的方案[2] 。因此,实时监测系统通过Windows的服务,利用多线程实现远程的心电接收服务。通过多串口扩展板,每个工作站同时并行接收多路信号,且切信号之间互不干扰,独立显示在前台接受分析,合理高效利用了系统资源,提高了平台的工作效率以及系统的可靠性。
2在.NET的框架下Windows的服务以及多线程技术
关于Windows服务,以VB.NET为系统框架.通过Service Process空间创建服务类和方法以及属性和异常事件等,其中Service Base为任何基于.NET服务的基类,然后对控制服务方法进行分类,以On Start ()或者On Stop ()表示,任何自定义服务需要对Service Base的类开展继承与重载。
关于多线程,需要处理好多个线程的有序性和高效性以及协作性的关系,确保更好的完成多个任务功能,通过在VB.NET框架中对多线程技术的模型进行封装,并在自由线程的进程空间中命名System.Threading,大大简化线程控制的过程[3] 。导人命名空间,就可在主线程之上快速的创建起一个工作者的线程,然后对其工作进行定义,确定线程的执行方法。.NET框架可以提供同步处理线程的方案,通过在System.Threading和Enter prise Services等命名的空间中建立同步类,同时提供不同的策略:同步上下文和同步代码区以及手控同步,以此为基础实现同步访问,但是为了确保信息的安全,任何时刻只能够允许一个线程对共享的资源进行访问。
3基于多线程的Windows服务应用
医院的工作站主要运行的软件功能是远程的心电数据的接收,工作站包括电子病历的管理和心电图的诊断以及报告的管理模块,工作站的后台还有信息的接收以及存储的软件。前端以基于VB.NET实现的,而后台的接收仅需要实现被监测患者心电资料的传输请求即可,最终完成可靠、无失真的数据传输并进行保存,采用VB.NET编写基于多线程的Windows服务以实现此功能[4]。
一种新型服务应用Hos-service类不仅继承了.NET的系统System.Service Process.Service Base类,通过重新加载基本的方法On Start()(启动),On Stop()(结束)来控制服务。为了实现多线程服务,即启动服务之后,系统的多个串口对串口Modem信号进行同时监测,因此,Hos-service设计出关键的两个成员的变量:一是串口监测类对象组,一类是一组线程变量。还有一种search-comm类,属于自定义类,主要用来实现串口的监测以及数据的接收功能。首先设计成员变量mrRs232(串口通信类RS232的实例),用于实现对串I=I的读、写等操作;其它的成员变量主要用于保存与远端心电记录设备的通信状态及数据库操作。成员方法有串口初始化、串口监测及数据接收、数据保存、切断链路、异常处理等。
search--comm类的功能实现search-comm类的核心功能是监测串口,成员方法WaitModem按照通信协议实现与远端心电记录传输设备的通信功能,并完成数据保存。串口资源的访问不存在互斥问题,但多线程访问数据库就存在共享资源的互斥访问问题了,利用.NET的同步锁机制SyneLock。心电数据传输的通信协议系统采用类似于XMODEM一1K的专用通信协议,协议分为物理链路层、Holter协议层、数据包编解码层。其中物理链路层实现Ivlodem拨号应答,通信链路的建立;Holter协议层实现心电传输设备与PC机间的握手、通信;数据包编解码层实现设备端编码、打包、传输和PC机端服务软件的数据接收、解码、存盘。应用该通信协议时,PC机为主导,而心电传输设备则根据其发出的命令信息进行下一步的通信。通信线路接通后,PC机依次发送A2(获取初始化信息)、A4(开始接收心电数据)、A6(清空心电记录设备)和A7(挂机)命令给单片机模块,在发完A4命令,开始接收ECG数据时,PC机分析数据包,正确则发送ACK请求发送下一包,一段数据接收完毕时,将数据存入相应的文件;接收错误时,发送NAK请求重发。
总之,通过多线程的技术可以很好地对并发的多任务问题进行解决,不仅提高了资源的利用率以及系统整体的性能,而且拉近了医患之间交流的距离。本文主要结合了远程进行心电的监测系统项目的开发和实践,讲述了以.NET为框架之下开展Windows的服务以及多线程核心技术和应用的方法等,同时,使用VB.NET可以有效的实现多线程串行通信,为确保人体的参数在无失真的情况下准确的进行远程的传输提供行之有效方案与策略,一次为基础更加有效的促进医疗保健以及远程医疗应用与推广。
参考文献:
[1]晏春海, 田蔚风, 王俊璞, 苏颖.多线程技术在分时串口通 信中的应用I -j]. 仪表技术与传感器, 2004(5): 15~16.
[2] K ourosh A rdestani, F abi o C l audi o F erracchi ati等著, 康博 译.V i sual Basic. N E T 线程参考 手册I -M ].北京 : 清华大 学出版社 , 2002, 158~159.
[3] 李湘江, 汤琛.基 于多线程技术实现W i ndow s 串行通信 [J].微机发展 , 2004 , 14 (2): 63~ 65.
[4] U. Rajendra Acharya,K. Paul Joseph,N. Kannathal,Choo Min Lim,Jasjit S. Suri. Heart rate variability: a review[J]. Medical & Biological Engineering & Computing,2006 (12) .
[5] Fred Barw ell, Richard Bl air 等著, 康博译.V isual B asi c. N ET 高级编程[M].北京: 清华大学出版社, 2002, 581~583.
[6]Bao jin Li,Zhifeng Ruan,Yongyu Chang,et al.Wireless Theories and Technologies Lab (WT&T) Beijing University of Posts and Telecommunications Beijing,China. Efficient Turbo Frequency Domain Equalization Based on Symbol-Wise Detection[A]. Proceedings of the Symposium on Signal Processing for Communication of ICC 2008[C]. 2008.
编辑/王海静