鄭 旭 耿 健 王玉亮
(南京熊貓漢達科技有限公司,江蘇南京210000)
實驗室中對溫濕度的監測有著很高的要求,比如在長度計量中,溫度發生零點幾攝氏度的變化就可能對測量結果產生很大的影響。公司目前是使用機械式溫濕度計和數顯溫濕度計采集溫濕度,溫濕度記錄由人工填寫,溫濕度的準確性和數據記錄的連續性都無法保證,所以迫切需要研制一套溫濕度自動采集監控系統,以滿足平時工作的需求。本項目旨在開發一套溫濕度自動采集監控系統,對整個實驗室的工作環境進行實時監測。
采集通道數:16路;溫度測量范圍:-40~125℃;相對濕度測量范圍:0~99%RH;準確度:溫度±0.2℃、相對濕度±3%RH;分辨力:溫度0.1℃、相對濕度1%RH。
在Visual C#中UDP協議的實現,最為常用也是最為關鍵的類就是UdpClient類,UdpClient類位于命名空間System.Net.Sockets中,Visual C#中UDP數據包的發送、接收都是通過UdpClient類實現的。下面對UdpClient類中常用方法和屬性進行簡要說明。
2.1.1 常用方法說明
Close:關閉UDP連接。
Connect:建立與遠程主機的連接。
Receive:返回已由遠程主機發送的UDP數據包。Send:將UDP數據包發送到遠程主機。
2.1.2 常用屬性說明
Active:獲取或設置一個值,該值指示是否已建立了與遠程主機的連接。
Client:獲取或設置基礎網絡套接字。
2.1.3 C#中UdpClient類發送UDP數據包
“Send”方法的調用語法如下:
Public int Send(byte[]dgram,int bytes,IPEndPoint endPoint);
下面是程序中使用UdpClient發送UDP數據包的代碼:

2.1.4 C#中UdpClient類接收UDP數據包
“Receive”方法的調用語法如下:
Public byte[]Receive(ref IPEndPoint remoteEP);
下面是程序中通過偵聽端口號“2040”來獲取UDP數據包的代碼:

該系統軟件采用Windows操作系統,以C#語言編制,軟件采用模塊化的設計,其功能模塊如圖1所示,軟件系統的流程圖如圖2所示。

圖1 系統模塊框圖

圖2 系統流程圖
2.2.1 溫濕度傳感器模塊
溫濕度傳感器模塊包括傳感器配置模塊和通信模塊。溫濕度傳感器配置模塊對應程序中的系統設置和條件設置功能,配置傳感器的各類參數如溫濕度上下限、所在房間名稱、IP地址、采樣時間、溫度波動范圍等。溫濕度傳感器通信模塊負責上位機與傳感器間進行UDP通信,獲取各個傳感器的數據。
2.2.2 屏幕顯示模塊
屏幕顯示模塊包括小屏幕配置模塊和小屏幕通信模塊。小屏幕配置模塊負責對小屏幕的參數進行配置,包括小屏幕的IP地址和顯示顏色,并將設置寫入配置文件中。小屏幕通信模塊負責程序與小屏幕之間的SOCKET通信,即向小屏幕發送要顯示的溫濕度數據和自定義顯示的字符。
2.2.3 數據處理模塊
數據處理模塊包括溫濕度數據存儲模塊、溫濕度數據實時顯示模塊和溫濕度歷史數據查詢模塊。溫濕度數據存儲模塊負責將從傳感器獲取的溫濕度數據信息寫入相對應的數據庫文件中。溫濕度數據實時顯示模塊負責將從傳感器獲取的各個通道的溫濕度數據在軟件主界面上實時顯示。溫濕度歷史數據查詢模塊分為按間隔查詢、按點查詢和自動生成各個房間溫濕度記錄三個功能:按間隔查詢功能負責查詢一段時間內某個房間每隔一個固定時間間隔的溫濕度歷史數據和溫濕度曲線圖,并可以保存到指定路徑的word文件中;按點查詢功能負責查詢一段時間內某個房間每天某幾個固定時間點的溫濕度歷史數據,并可以保存到指定路徑的word文件中;自動生成溫濕度記錄功能是自動把每個房間整點的溫濕度數據寫到對應的word中,供用戶查看。
通過程序的編譯、調試,最后在LED顯示屏和上位機顯示出實時的溫度和濕度,如圖3所示。從整個實現過程來看,首先是溫濕度模塊對環境溫濕度采集后,將相應數據傳輸到上位機;然后通過上位機將溫濕度數據傳輸到每個小屏幕上實時顯示。

圖3 溫濕度顯示界面
通過此次溫濕度自動采集監控系統的開發,筆者對C#中Socket通信原理有了更深刻的理解,這對后面的項目開發起到很大的幫助。另外,這次系統的開發也驗證了理論與實際相結合的重要性,這樣才能更好地完成系統設計工作。