病人医疗监护系统的设计与实现

时间:2022-08-23 09:15:30

病人医疗监护系统的设计与实现

摘 要:病人医疗监护系统采用C/S架构的VC开发的应用系统,分为服务器端和客户端,客户端分为病人端和医生端,通过面向对象技术来实现界面的显示,界面显示的过程中使用了双缓冲绘图技术以及VC自定义控件技术。病人端把读取到的曲线数据和随机函数生成的数字数据,以波形图像和数字形式在对应窗口显示出来,然后通过服务器将数据发送到医生端,并在医生端以同样的方式用窗口显示出来,从而达到对病人的远程监护。论文详细介绍了系统的设计和核心算法。初步测试表明,系统实现了基本功能。

关键词:医疗;监护;服务器;远程;构架

中图分类号:TP277

是传统医疗方式存在很多不便,而且必须是跟医生进行面对面交谈,造成了医生的工作量的增加,不利于医生更好的展开工作。鉴于此,开发一个医疗系统可以减轻医生的负担,也实现对病人不在医生身边时对病人的监护。医生希望详细了解病人的生理数据,心率,脉搏,呼吸,血压含量,体温等。病人希望得到更多的健康监护,并在身体状况不佳时得到实时提醒,而诊断数据需要通过病人获取,诊断方法和结论则由医生保管,因此,存在距离问题。为解决上述难题,近年来,面向家庭、个人的医疗监护系统逐渐成为医疗技术领域的研究热点。

1 系统框架

1.1 系统概述

本系统主要的功能分为:采集端对病人数据的采集;采集端对采集数据的成像显示;服务器端对采集端以及监护端发送过来的数据的处理;监护端对服务器端转发过来采集端数据的成像处理;报警功能的实现。如图1病人医疗监护系统的基本框架图。

(1)数据的采集以及随机函数生成的数据;(2)数据的成像显示,以及数据的发送;(3)服务器端数据的转发;(4)监护端对收到的监护端数据的显示。

课题研究中的数据,心率、脉搏氧、呼吸率的曲线的数据是从医院拷贝过来的一段数据,存储在txt中。通过采集端的函数读取,显示到对应的窗口中。数据的发送是通过C/S客户服务器模式来完成,并将数据发送到服务器。服务器通过对数据库Map关系,查找到对应的监护端,并将采集端发送过来的数据发送到监护端。监护端对收到的数据进行一些处理,并显示出来。

图1 病人医疗监护系统

采集端负责对病人数据进行采集(对txt文件的读取),并定时向监护端发送数据;同时采集端对要对采集数据进行成像显示;服务器端负责对采集端或者监护端发送过来的数据进行转发处理,它通过查找数据库来获取采集端和监护端的映射关系;监护端对服务器端转发过来采集端数据的成像处理。

2 详细设计

2.1 服务器端

服务器端采用从CSocket继承的类:CListenSocket类和CClientSocket类。CListenSocket负责监听开通的端口号,监听是否有客户端访问服务器。如果发现有客户端访问服务器,则通过CListenSocket的一个虚函数OnAccept()来接受处理一个CClientSocket对象。接受一个CClientSocket对象之后,由CClientSocket类对象的一个虚函数OnReceive()函数来处理新建的CClientSocket对象。在OnReceive()函数中来完成自定义消息的发送,交由主窗口自定义消息函数OnNetReceive()来处理客户端发送过来的消息。

消息的分类(例如文字消息或者曲线消息)通过枚举对象来进行区分发送过来的消息。针对不同的枚举对象有不同的消息处理函数DisposeLogin(pPack,pSocket)完成对登陆用户的处理并将其添加到一个static list对象中。DisposeLogout(pPack)完成对登出客户端的处理;DisposeTransmit(pPack)完成对接收的曲线的消息的处理;DispaseChat(pPack)完成收到的文字信息处理。

2.2 客户端

客户端分为采集端和监护端,采集端负责采集数据并完成数据的成像显示,监护端负责接收采集端发送过来的数据处理。

2.2.1 采集端采用的是一个单文档应用程序,通过多个窗口的创建来完成对病人身体状况的一些模拟。

(1)数据的读取,病人信息通过计算机以及传感器获得心率、脉搏氧、以及呼吸率相关数据;(2)曲线的成像显示。对图像的显示是通过在主窗口中创建子窗口来实现,CDrawWnd类就是这些窗口的父类。CDrawWnd类是从主窗口CWnd继承的一个类,CDrawWnd采用了双缓冲绘图技术。因为人类都有视觉暂留,普通的绘图可能产生闪屏现象。双缓冲绘图技术通过创建一个CDC对象和在CDC对象基础上的一个CBitmap对象,在该CBitmap对象中来完成图像的绘制(即类似画板)。然后将CDC对象粘贴到系统视图区对象中来完成图像的显示;(3)因为心率、呼吸率、脉搏氧窗口的曲线显示和心率、呼吸率、脉搏氧、血压体温的数据显示是不一样的。所以它们都是CDrawWnd类派生下来的类,派生之后又派生出来了不同的类。其中心率曲线、脉搏氧曲线和呼吸率曲线的对象是由CStripWnd类定义的不同类对象。对曲线的存储显示是通过一个CStrip类来完成的,然后在CStripWnd类中来定义一个CStrip类对象,在DrawContent()完成曲线绘制。另外心率、脉搏氧和呼吸率显示的是一个整数,所以它们都是同一个类CTextWnd类的类对象。血压显示了三个数据,因此血压是CTextWnd类派生类的CTextABPWnd类的类对象。体温显示的是一个小树,因此体温是CTexWnd类派生类的CTextTempWnd类的一个类对象;(4)采集端也有一个继承自CSocket类的CClientSocket类,它的数据发送也是通过CClientScoket类的一个类对象调用Send()函数来完成。数据的接受是通过CClientSocket类的虚函数OnReceive()来完成,并通过PostMessage()函数将数据抛送到视图区自定义消息函数来处理。

2.2.2 监护端成像原理和采集端一样,不同的是监护端可以完成多个采集端数据的接受,并且单击采集端窗口的时候可以显示对应的采集端曲线。CInfoWnd负责接受来自不同采集端的小窗口的创建来完成数据的显示,可以完成报警功能和选定病人端的功能。每一个采集端都有一个阈值设置的CThresholdSetDlg类的对话框完成阈值的设置(阈值设置的原因是因为人体的一些数据是保持在一个范围之内的,有一个最大值和最小值,这样我们可以自己定义可以承受大的范围)。其它的功能类似于采集端,例如数据的发送等。

3 核心算法

3.1 客户端算法

客户端主要算法就是所有窗口的基类,下面就是该基类的实现的主要算法:

删除创建的DC();

CDC*pDC=获取设备DC();

获取客户区的DC(rc);

m_dcMem.创建和设备相同大小DC(pDC);

m_bmpMem.CreateCompatibleBitmap(设备DC,客户区.Width(),客户区.Height());

m_dcMem.SelectObject(&同客户区大小相同CBitmap);

m_dcMem.FillSolidRect(设置客户区背景色);

释放DC(pDC);

3.2 服务器端算法

if(!m_scokListen.创建监听的端口号(6000))

{:消息提示框(_T("Socket创建失败!"));

return;}

if(!m_scokListen.监听端口())

{消息提示框(_T("Socket监听失败!"));

m_scokListen.关闭();

return;}

NET_PACK*pPack=(NET_PACK*)CClientSocket传送过来的数据;

CClientSocket*pSocket=(CClientSocket*)CClientSocket对象;

switch(pPack->枚举类型)//枚举类型标示消息的类型

{case LOGIN:

处理登陆函数(pPack,pSocket);

break;

case LOGOUT:

处理登出函数(pPack);

break;

case TRANSMIT:

处理曲线和数字数据函数(pPack);

break;

case CHAT:

处理聊天函数(pPack);

break;}

4 结束语

课题在深入分析网络通信和VC成像基本原理,架构设计和核心技术的基础上,以C/S模式的架构系统进行实验性研究。结合C++面向对象的技术,在各个窗口通过面向对象技术来实现对病人数据的模拟显示。

病人医疗监护系统还有很多的不足之处。服务器是VC开发的exe程序满足不了数量比较庞大的用户需求,只适合小容量的集群。数据包在网络传输的时候可能不能达到绝对的同步,如果数据包经过的路由器过多的话,也有可能发生丢失数据包的情况

参考文献:

[1]刘奕,孙翱,何熙文.基于Socket的C++语言网络通讯机制和程序设计[J].计算机应用研究,1999(05):49-51.

[2]朱蓉.利用中间件Socket实现多客户机端底层网络通信[J].计算机系统应用,2005(06):17-21.

[3]何进.基于Socket的TCP/IP网络通讯模式研究[J].计算机应用研究,2001(08):134-136.

作者简介:邹燕飞(1981-),女,甘肃人,教师,讲师,硕士,研究方向:并行计算、云计算、网格计算。

作者单位:咸阳师范学院 信息工程学院,陕西咸阳 712000

基金项目:云计算环境下资源负载均衡调度算法研究(项目编号:13XSYK057)。

上一篇:无线网络安全协议的形式化分析方法 下一篇:网上考试系统的设计和实现