李達,邱明輝
中國人民解放軍總醫院 計算機室,北京 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.