李达,邱明辉
中国人民解放军总医院 计算机室,北京 100853
在医院的许多业务中,都需要对办公场所的温度和湿度进行实时监测,如药房、手术室、网络机房等场所。适宜的温湿度也是其主要的评价指标[1]。本研究开发的温湿度监测系统主要运行于医院内部网络,与温湿度传感器配合使用,实时读取温湿度数据并实现报警功能,以保障重要设备的安全运行,减少维护人员的工作量。
LTM9950D是温湿度一体化的数字传感器[2],包括1个电容式测湿元件和1个晶体测温元件。其电容变化量与相对湿度成正比;其测温元件主要利用晶体振荡频率随温度变化而变化的特性,将温度的变化转换为频率调制信号。传感器内部温湿度数据采用单总线通信[3],与单片机连接对数据进行校验,实时得到准确有效的温湿度数据[4]。单个传感器监测有效范围大约为30 m2,湿度测量分辨率为0.1%RH,测量精度为±3%RH;温度测量分辨率为0.0625℃,测量精度为±0.5℃。
系统主要由LTM 9950温湿度传感器、以太网、监测服务器、音箱等组成。监测服务器上运行系统软件,通过RS485接口连接至医院网络;在需要监测温湿度的地点部署多个传感器,并配置好相应的IP地址,通过RS485接口与医院网络联通。传感器一面采集温湿度数据,一面接收监测服务器发送来的响应指令并向服务器端传送温湿度数据。系统结构示意图,见图1。
图1 系统结构示意图
系统主要实现温湿度监控、巡检、报警、数据采集等4个主要功能。
1.3.1 温湿度监控
根据LTM 9950传感器测量精度,可监测冷库、办公室、机房等场所的温湿度,并在监测系统中显示数据,实现365×24 h不间断监控。温度监控范围为-10~60℃,湿度监测范围为0%~99%RH。
1.3.2 定时巡检
在系统程序中为每个传感器设定1个线程,根据需要对巡检时间进行设定,系统默认时间为10 s,即每隔10 s巡检1次温湿度值变化。
1.3.3 报警
报警分为网络异常报警和超出阈值范围报警。当断电或IP地址发生冲突时,传感器将不会响应服务器指令。为防止误报警,设置异常次数值,当异常次数超过此值时,程序即调用报警音乐,并在主页面显示网络异常,提示管理人员进行查看。当温湿度超出所设定的阈值范围时,对应传感器显示的温湿度值立刻变红,并播放报警音乐,提示管理员进行查看。
1.3.4 数据采集
系统利用MS SQL Server2005数据库保存采集到的所有传感器的温湿度数据值,并全程记录监测环境温湿度变化[5-6],方便管理人员对所获取数据进行有效分析。
在C# Socket网络编程环境中,为每个传感器的连接单独设定一个线程负责连接传感器、发送指令、返回温湿度数据操作。向传感器发送特定指令,传感器则返回相应的数据,待数据类型转换后即为相应的温湿度值。考虑到系统只在医院内部网络中使用,在设计中除了利用面向连接的TCP协议外,还使用了无连接的UDP协议,因为在内部网络中,使用 UDP协议传输数据,不会存在明显丢包现象。
2.2.1 TCP协议传送数据
使用C#中提供的TCPClient类,用此构造函数连接远程传感器IP地址和端口号,使用 GetStream 方法来获取1个 NetworkStream[7]。调用 NetworkStream 的 Write 和 Read 方法与传感器之间发送和接收数据;使用 Close 方法释放与TcpClient 关联的所有资源[8]。
private NetworkStream streamToSensor;
lock (streamToSensor) { streamToSensor.Write(buffer, 0,buffer.Length); //向传感器发送特定指令}
int bytesRead;
buffer = new byte[8192];
lock (streamToSensor) { bytesRead = streamToSensor.Read(buffer, 0, 8192); }
ReturnWSD = Encoding.ASCII.GetString(buffer, 0,bytesRead); //取得返回值,类型转化后即为温湿度
TCPClient获取温湿度值的流程,见图2。
图2 TCPCLient获取温湿度值流程图
2.2.2 UDP协议传送数据
UDP 是无连接传输协议,不需要在发送和接收数据前建立连接,是在保持通讯畅通的同时,使用Send()方法将特定指令发送到传感器,使用Receive()方法获取返回数据[9]。在程序中调用Connect()方法创建UDPClient实例:
Byte[]sendBytes = Encoding.ASCII.GetBytes(Special Command);
udpclient.Send(sendBytes, sendBytes.Length); //向指定传感器发送特定指令
IPEndPoint remoteIPEndPoint = new IPEndPoint(IPAddress.Any, 0); //接收监测服务器的IP地址信息
Byte[]receivebytes = udpclient.Receive(ref remoteIPEndPoint);//得到返回数据,类型转换后为温湿度值
UDPClient获取温湿度值的流程,见图3。
图3 UDPCLient获取温湿度值流程
2.2.3 系统主界面
目前,系统主要部署在各楼网络主机房内,传感器固定在机柜内。系统每隔10 s巡检1次温湿度值,实时显示温湿度变化,并可在“配置”菜单内完成阈值、巡检时间设置和历史数据查询等操作。系统运行主界面,见图4。
图4 系统主界面图
本系统主要对院内几个大楼网络主机房进行温湿度监测,根据其测量范围,每个机房暂使用1个传感器、固定在存储机柜内。对于传感器可部署在墙壁上,也可安装在机柜中。本设计考虑存储服务器较网络设备散热量大,且系统主要是对温湿度阈值报警,因此,将传感器固定在存储机柜内,其温湿度数值相对精密空调出风口高出1~2个值[10-11]。在以后的应用中,每个机房均可部署温湿度监控装置,因程序使用多线程控制TCPClient或UDPClient,可分别得到监测点的准确数据。由此可以得出,传感器部署位置对监测数据有所影响,但部署数量不会对系统造成任何影响。
本文介绍了一个基于IP网络的医院温湿度监测系统,系统具有通用性和可扩展性,除了医院机房,在医院其他需要监测温湿度的部门均可推广使用,既能实时监测温湿度数据、实时报警,又可减少医工人员日常工作量、提高工作效率。同时,系统预留接口,方便与医院视频监控、UPS供电监控等系统联动报警,以提升医院信息化管理水平,及时消除安全隐患。
[1]衣颖,祁建城,李艳菊.基于VC.NET和MYSQL的多点温湿度监测软件的开发[J].医疗卫生装备,2008,29(9):25-26.
[2]余朋,李力.机房温湿度远程监控程序的设计与实现[J].电脑知识与技术,2012,(8):1844-1847.
[3]梁春英,孙裔鑫,王熙.基于RS-485总线的分布式温室环境温湿度监测系统设计[J].沈阳工程学院学报,2010,6(3):238-240.
[4]李晓维.无线传感器网络技术[M].北京:北京理工大学出版社,2007.
[5]杨学全.SQL Server实例教程[M].2版.北京:电子工业出版社,2010.
[6]陆广平,卜迎春.基于DSP的多路数据采集系统设计与实现[J].计算机工程与设计,2010,31(20):4368-4370.
[7]李志中.Visual C# 2008数据库编程实训教程[M].北京:清华大学出版社,2010.
[8]刘瑞新.C#网络编程及应用[M].北京:机械工业出版社,2004.
[9]郑阿奇.Visual C#网络编程[M].北京:电子工业出版社,2011.
[10]谢陈磊,方潜生,汪小龙,等.空调压缩机数据无线采集系统的研究[J].电子测量与仪器学报,2010,(2):195-197.
[11]陈名鑫,张文威.基于AT89S52单片机的多路温度监测系统的设计与实现[J].中国医疗设备,2013,28(3):46-49.