鄭 旭 耿 健 王玉亮
(南京熊貓漢達(dá)科技有限公司,江蘇南京210000)
實(shí)驗(yàn)室中對(duì)溫濕度的監(jiān)測有著很高的要求,比如在長度計(jì)量中,溫度發(fā)生零點(diǎn)幾攝氏度的變化就可能對(duì)測量結(jié)果產(chǎn)生很大的影響。公司目前是使用機(jī)械式溫濕度計(jì)和數(shù)顯溫濕度計(jì)采集溫濕度,溫濕度記錄由人工填寫,溫濕度的準(zhǔn)確性和數(shù)據(jù)記錄的連續(xù)性都無法保證,所以迫切需要研制一套溫濕度自動(dòng)采集監(jiān)控系統(tǒng),以滿足平時(shí)工作的需求。本項(xiàng)目旨在開發(fā)一套溫濕度自動(dòng)采集監(jiān)控系統(tǒng),對(duì)整個(gè)實(shí)驗(yàn)室的工作環(huán)境進(jìn)行實(shí)時(shí)監(jiān)測。
采集通道數(shù):16路;溫度測量范圍:-40~125℃;相對(duì)濕度測量范圍:0~99%RH;準(zhǔn)確度:溫度±0.2℃、相對(duì)濕度±3%RH;分辨力:溫度0.1℃、相對(duì)濕度1%RH。
在Visual C#中UDP協(xié)議的實(shí)現(xiàn),最為常用也是最為關(guān)鍵的類就是UdpClient類,UdpClient類位于命名空間System.Net.Sockets中,Visual C#中UDP數(shù)據(jù)包的發(fā)送、接收都是通過UdpClient類實(shí)現(xiàn)的。下面對(duì)UdpClient類中常用方法和屬性進(jìn)行簡要說明。
2.1.1 常用方法說明
Close:關(guān)閉UDP連接。
Connect:建立與遠(yuǎn)程主機(jī)的連接。
Receive:返回已由遠(yuǎn)程主機(jī)發(fā)送的UDP數(shù)據(jù)包。Send:將UDP數(shù)據(jù)包發(fā)送到遠(yuǎn)程主機(jī)。
2.1.2 常用屬性說明
Active:獲取或設(shè)置一個(gè)值,該值指示是否已建立了與遠(yuǎn)程主機(jī)的連接。
Client:獲取或設(shè)置基礎(chǔ)網(wǎng)絡(luò)套接字。
2.1.3 C#中UdpClient類發(fā)送UDP數(shù)據(jù)包
“Send”方法的調(diào)用語法如下:
Public int Send(byte[]dgram,int bytes,IPEndPoint endPoint);
下面是程序中使用UdpClient發(fā)送UDP數(shù)據(jù)包的代碼:
2.1.4 C#中UdpClient類接收UDP數(shù)據(jù)包
“Receive”方法的調(diào)用語法如下:
Public byte[]Receive(ref IPEndPoint remoteEP);
下面是程序中通過偵聽端口號(hào)“2040”來獲取UDP數(shù)據(jù)包的代碼:
該系統(tǒng)軟件采用Windows操作系統(tǒng),以C#語言編制,軟件采用模塊化的設(shè)計(jì),其功能模塊如圖1所示,軟件系統(tǒng)的流程圖如圖2所示。
圖1 系統(tǒng)模塊框圖
圖2 系統(tǒng)流程圖
2.2.1 溫濕度傳感器模塊
溫濕度傳感器模塊包括傳感器配置模塊和通信模塊。溫濕度傳感器配置模塊對(duì)應(yīng)程序中的系統(tǒng)設(shè)置和條件設(shè)置功能,配置傳感器的各類參數(shù)如溫濕度上下限、所在房間名稱、IP地址、采樣時(shí)間、溫度波動(dòng)范圍等。溫濕度傳感器通信模塊負(fù)責(zé)上位機(jī)與傳感器間進(jìn)行UDP通信,獲取各個(gè)傳感器的數(shù)據(jù)。
2.2.2 屏幕顯示模塊
屏幕顯示模塊包括小屏幕配置模塊和小屏幕通信模塊。小屏幕配置模塊負(fù)責(zé)對(duì)小屏幕的參數(shù)進(jìn)行配置,包括小屏幕的IP地址和顯示顏色,并將設(shè)置寫入配置文件中。小屏幕通信模塊負(fù)責(zé)程序與小屏幕之間的SOCKET通信,即向小屏幕發(fā)送要顯示的溫濕度數(shù)據(jù)和自定義顯示的字符。
2.2.3 數(shù)據(jù)處理模塊
數(shù)據(jù)處理模塊包括溫濕度數(shù)據(jù)存儲(chǔ)模塊、溫濕度數(shù)據(jù)實(shí)時(shí)顯示模塊和溫濕度歷史數(shù)據(jù)查詢模塊。溫濕度數(shù)據(jù)存儲(chǔ)模塊負(fù)責(zé)將從傳感器獲取的溫濕度數(shù)據(jù)信息寫入相對(duì)應(yīng)的數(shù)據(jù)庫文件中。溫濕度數(shù)據(jù)實(shí)時(shí)顯示模塊負(fù)責(zé)將從傳感器獲取的各個(gè)通道的溫濕度數(shù)據(jù)在軟件主界面上實(shí)時(shí)顯示。溫濕度歷史數(shù)據(jù)查詢模塊分為按間隔查詢、按點(diǎn)查詢和自動(dòng)生成各個(gè)房間溫濕度記錄三個(gè)功能:按間隔查詢功能負(fù)責(zé)查詢一段時(shí)間內(nèi)某個(gè)房間每隔一個(gè)固定時(shí)間間隔的溫濕度歷史數(shù)據(jù)和溫濕度曲線圖,并可以保存到指定路徑的word文件中;按點(diǎn)查詢功能負(fù)責(zé)查詢一段時(shí)間內(nèi)某個(gè)房間每天某幾個(gè)固定時(shí)間點(diǎn)的溫濕度歷史數(shù)據(jù),并可以保存到指定路徑的word文件中;自動(dòng)生成溫濕度記錄功能是自動(dòng)把每個(gè)房間整點(diǎn)的溫濕度數(shù)據(jù)寫到對(duì)應(yīng)的word中,供用戶查看。
通過程序的編譯、調(diào)試,最后在LED顯示屏和上位機(jī)顯示出實(shí)時(shí)的溫度和濕度,如圖3所示。從整個(gè)實(shí)現(xiàn)過程來看,首先是溫濕度模塊對(duì)環(huán)境溫濕度采集后,將相應(yīng)數(shù)據(jù)傳輸?shù)缴衔粰C(jī);然后通過上位機(jī)將溫濕度數(shù)據(jù)傳輸?shù)矫總€(gè)小屏幕上實(shí)時(shí)顯示。
圖3 溫濕度顯示界面
通過此次溫濕度自動(dòng)采集監(jiān)控系統(tǒng)的開發(fā),筆者對(duì)C#中Socket通信原理有了更深刻的理解,這對(duì)后面的項(xiàng)目開發(fā)起到很大的幫助。另外,這次系統(tǒng)的開發(fā)也驗(yàn)證了理論與實(shí)際相結(jié)合的重要性,這樣才能更好地完成系統(tǒng)設(shè)計(jì)工作。