基于Zigbee的病房护理机远程监控系统的设计与实现
2 上位机监控软件设计
2.1 基于API的Windows多线程串口通信
多线程是指同一个程序中可以同时执行多个任务,通过多线程可以将整个任务分成几个线程,同时执行,从而提高系统的效率。在多线程环境下,许多线程需要访问同一资源,而且事件发生往往有先后顺序,因此,线程间需要通信控制。本系统数据库的存取以及公共变量的访问,都涉及到线程间的通信,必须使用同步化机制,防止线程访问冲突。在实际实现过程中,系统利用了临界区,它是保证在同一时间只有一个线程可以访问某一资源的有效方法。在使用临界区时,需要给各线程提供一个共享的临界区对象。临界区具体使用步骤如下:1)声明对象;2)初始化对象;3)进入临界区;4)离开临界区。同样在本系统中,为了保证线程访问安全,设置了多个临界区对象,包括:串口通信临界区m_csCommunicationSync、数据库ADO组件访问临界区critical for ado、护理机结构链表临界区对象critical for list等。为保证串口收发数据的高效性,在充分分析多线程技术和API异步操作串口方式的特点之后,本系统将串口的数据收发采用单独的线程处理。
系统串口通信采用事件通知方式,该方式是Windows下效率较高的一种方式。主线程在打开串口后首先设置要监视的串口通信事件,然后将监视线程打开,用来监视主线程设置的这些串口通信事件是否发生,当其中的某个事件发生后,监视线程要能根据不同的事件类型进行处理。
2.2 护理机监控功能的实现
按照护理机的无线远程监控要求,在上位监控PC机中需要完成以下功能:
(1)重要监测参数的显示。在监控界面的显示区能实时显示护理机的重要监测信息(护理机所在科室及床位号、检测数据、工作状态、报警状态等)。
(2)系统配置。管理员(如护士长)能“动态”地完成系统通信端口的配置和使用单位名称(如医院名称)配置。
(3)用户管理配置。管理员能“动态”地增添用户,并设置用户的权限和初始密码,管理员能注销除了“当前登录管理员”以外的所有用户。所有用户在登录后可以修改自己的登录密码。
(4)网络设备配置。管理员能“动态”地向无线网络中“注册”或“注销”某一护理机(包括该护理机的ID号、所属科室名称、所处病房号和床位号)。
(5)具有数据报表查询和打印功能。系统能对监控过程中重要事件进行记录,并能实现对这些信息的条件查询和打印功能。这些重要事件包括用户登录或退出时的用户名及时间;护理机状态改变及时间。任何当前用户均能点击监控主界面的“报表查询”菜单,能分别按“时间”、“用户名”、“床位号”查询以往所有数据库中记录的值班期间的所有监测信息。此功能的实现主要是通过数据库结合报表的设计来实现的。
通过对上位机监控软件的功能分析,首先确定其由“主线程”、“通信处理线程”、“语音处理线程”等部分组成,然后进行各部分功能细化,最后,按照模块化功能用C++Builder编程实现。为提高数据处理效率,在通信处理软件设计部分,开辟了单独的“数据接收线程”和“数据处理线程”,处理线程将接收线程接收的下位机所有数据进行校验处理,并将下位机工作数据存入数据库,最后根据与上次工作数据比较,确定是否更新“主线程目录树”。主线程根据用户需求,实时地从数据库调取数据显示,同时主线程还要能完成护理机“入网注册”、“注销”、“操作员的配置”以及对下位机数据的“按条件报表查询”等功能。此外,考虑到现在的PC机通常采用USB通信方式,因此针对ZigBee网络的协调器与上位机的连结采用了“USB转串口”方式,本系统还设计了USB串口热插拔功能,当更换不同的USB连接口时,上位机通过C++Builder编程能自动获取串口COM的串口号,使上位机监控软件的应用非常通用化。图4为用C++Builder编写的上位机监控主界面,鉴于篇幅因素,本文以具有代表性的“护理机监测参数显示”和“护理机动态注册注销功能”为例,介绍其实现过程。本文引用地址:https://www.eepw.com.cn/article/154965.htm
2.2.1 护理机监测参数的显示
系统要求当点击“按病床位浏览”显示的目录树时,只有点击注册护理机对应的床位时,才能显示该护理机的重要信息,并且要显示护理机所在科室及床位号;当点击“按病房号浏览”目录页时,只有点击注册护理机对应的病房号时才会显示在此病房下所有护理机的信息。除了护理机重要工作参数需要显示外,护理机报警状态、离线状态也需要突出显示。其中,报警信息采用了红色字体闪烁方式显示;离线状态采用了灰色字体显示。
该功能的实现用到了TreeView目录树的单击事件,此外,系统有专门负责根据节点信息,调取数据库中对应节点护理机信息的定时器,通过定时器不断获取节点最新数据进行显示;通过单击事件处理函数,判断是否是单击的对应节点,如果点击的是按病房浏览方式中的病房节点,则先取出该病房下第一个子节点信息,并将第一个GroupBox设置为可视,再取后面的子节点,操作类似,直到第四个子节点。当点击的是“按床位浏览”方式下的床位节点时,先获取此节点数据信息,然后将第一个GroupBox设为可视,最后根据节点信息,定时器会查询数据库中对应护理机的工作参数进行数据显示。其操作流程如图5所示,实时监测参数显示界面如图4所示。
评论