999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

圈舍環境監測預警系統關鍵技術研究

2013-11-15 02:38:46牛曉晨張新柱
電子測試 2013年14期
關鍵詞:信息

牛曉晨,張新柱

(西安郵電大學計算機學院,陜西西安,7100121;西安郵電大學黨委組織部,陜西西安,7100121)

圈舍環境是指影響動物的生長、發育、繁殖和生產的所有外界條件,一般包括物理環境(如溫度、濕度等)和化學環境(如氨氣、硫化氫等)。環境因素對動物的生長發育等方面意義重大,當環境因素在適宜范圍內時有利于生長發育,反之則會阻礙生長發育。隨著科學技術的飛速發展,養殖業逐步走向規模化、集約化,數字化和信息化程度越來越高,因此建立起圈舍環境監測預警系統成為當務之急。

1 系統功能概述與網絡傳輸協議、內容的選定

圈舍環境監測預警系統主要由環境監測和環境報警兩部分組成。首先溫、濕度等各種傳感器對圈舍內主要環境因素進行信息采集,然后通過網絡傳輸到監控中心的服務器;服務器端接收到數據后,將數據存入數據庫,同時經過分析將超出或低于正常值的數據進行標識;客戶端通過向服務器查詢超限數據來判斷是否有異常數據,若有則向用戶報警。

系統的實現離不開網絡,目前可選的網絡傳輸協議有兩種:UDP和TCP。UDP在傳送數據之前不需要先建立連接,遠程主機在接收到數據報后不需要給出任何應答。在只傳送少量數據、對實時性要求較高的應用環境下,這是一種最有效的工作方式。TCP則是提供面向連接的可靠的運輸服務,因此不可避免地增加了許多開銷。由于要傳送的數據主要是傳感器類型與監測的數據值,所以傳送信息量小;而對于環境值需要進行多次采樣,并快速傳往服務器,數據傳送的實時性要求較高。因此,本系統選用UDP協議進行數據傳送。

對于UDP數據包中的傳送內容,系統只選取了最為必要的數據進行傳送,大小僅為4個字節。表1是一個UDP數據包中的內容格式。

表1 UDP數據包內容格式

其中舍號占用第一個字節,可表示256個圈舍,范圍從0到255。第二個字節用來表示傳感器的類型和序號,例如0代表溫度、1代表濕度、2代表氨氣,由于一個圈舍的傳感器類型不會超過8個,所以使用該字節的低三位來表示類型;對于一個大點的圈舍,其某一類型的傳感器的數量可能不止一個,如有溫度傳感器10個,濕度傳感器11個,為了進行區別,需要對同一類型的傳感器進行編號,因此使用該字節的高五位用來記錄傳感器的序號。第三和第四個字節用來表示傳感器的數值,共16位可表示的范圍從0到65535;雖然溫濕度的值不會那么大,但風機轉速值往往都是數千轉;而溫濕度值雖小,但它卻是實數,有小數位,因此對于溫濕度第三個字節存整數值,第四個字節存小數值。通過對監測環境的分析,系統將最核心的數據整合組成了UDP數據包的內容,避免了冗余數據的產生,提高了網絡傳輸效率。

2 數據庫設計

數據庫采用Microsoft SQL Server 2008,主要表設計有三個:傳感器表、傳感器種類表和傳感器記錄表。傳感器表主要記錄了傳感器的編號、名稱、安裝所在圈舍id、傳感器類型、序號以及上限值和下限值。正是有了上限值和下限值,服務器接收端才能判斷出傳來的值是否異常。傳感器種類表主要記錄傳感器類型編號與名稱的對應關系,如0代表溫度、1代表濕度。傳感器記錄表記錄著接收到的每條傳感器值,是核心表,其表結構如圖1。

圖1 傳感器記錄表結構圖

通過上一節可知UDP數據包中的傳送內容有四項:舍號、類型、序號和數據值。服務器接收端會通過舍號、類型和序號在傳感器表中找到對應的傳感器編號和上下限值,通過將接收到的數據值與上下限值相比較來判斷是否值異常。若超上限,超限字段值為u;若超下限,超限字段值為d;其它則值為n,表示值正常。報警字段記錄用戶是否已看到該記錄,默認為n。客戶端通過查詢該表中所有超限字段值非n,且報警字段為n的記錄,來得到需要報警的信息。

3 多線程技術應用

服務器端負責接收傳感器信息的網絡應用程序使用到了多線程技術。在接收信息的過程中會遇到很多意想不到的問題,其中最常見的是網絡阻塞和網絡等待。程序在處理這些問題的時候往往需要花費很多的時間,若不使用多線程技術,則程序在執行時的會出現如:運行速度慢,執行時間長,容易出現錯誤、反應遲鈍等問題。而如果把這些可能造成大量占用程序執行時間的過程放在線程中處理,則能夠大大提高應用程序的運行效率和性能。

3.1 線程的定義與創建

每個正在系統上運行的程序都是一個進程,每個進程包含一到多個線程。線程是操作系統分配CPU時間的基本單位,在進程中可以有多個線程同時執行代碼。預警系統采用C/S結構,使用C#語言進行開發。C#中使用的線程都是通過命名空間System.Threading中的Thread類經實例化完成的。通過Thread類的構造函數來創建可供C#使用的線程,通過Thread中的方法和屬性來設定線程屬性和控制線程的狀態。示例代碼如下:

Thread threadReceive=new Thread(ReceiveMessage); //創建線程

threadReceive.Start();//啟動線程

上述代碼實例化一個Thread對象,并指明將要調用的方法ReceiveMessage(),然后啟動線程。

3.2 委托與跨線程回調

C#的委托相當于C/C++中的函數指針。函數指針用指針獲取一個函數的入口地址,實現對函數的操作。委托與C/C++中的函數指針不同之處是:委托是面向對象的,是引用類型,類型安全。委托是網絡編程中用的最多的,其主要作用是傳方法。通常的方法或者函數只能用來傳參數,有的時候一個方法可能需要另一個方法的支持,此時可以定義個委托來傳這個方法。需要注意的是,委托和所要傳的方法的返回值類型要一致。委托的使用要先定義,再聲明,接著實例化,然后傳參,最后使用。示例如下:

delegate void MyDelegate(type_1 para_1,…,type_n para_n);//定義委托

MyDelegate a;//聲明委托

a=new MyDelegate(Method);//實例化委托,Method是一方法

SomeMethod(a);//將實例化的委托作為某方法的參數使用

Private void SomeMethod(MyDelegate myDelegate)//最后在此方法的代碼中使用

{…

//使用委托

myDelegate(para_1,…,para_n);

}

由于在.Net上執行的是托管代碼,C#強制要求這些代碼必須是線程安全的,即不允許跨線程訪問Windows窗體的控件。為了在遵循.Net安全標準的前提下,從一個線程訪問另一個線程創建的控件,就需要用到C#的跨線程方法回調機制。C#的跨線程方法回調機制實質上是委托的一種應用,有了回調機制就能夠在.Net中寫出線程安全的代碼了。

4 客戶端關鍵問題解決

客戶端的主要任務是通過向服務器查詢超限數據來判斷是否有異常數據,若有則向用戶報警。因此客戶端對傳感器報警的響應速度要快,并且要有閃動等提示性動作;若程序被最小化,還應能自動彈出。因此如何及時獲得報警信息、如何動態生成報警信息以及如何動態控制窗體成為了客戶端開發需要研究的主要問題。

4.1 報警信息的及時獲取

傳感器信息源源不斷地發往服務器,經服務器端程序處理后存入數據庫。那么客戶端需要定期地去查詢服務器端的數據庫,以便獲取最新的報警信息。在C#中可以使用timer(定時器)控件來實現這一需求。Timer控件和其他的WinForm控件的最大區別是它不可見,其主要作用是當Timer控件啟動后,每隔一個固定時間段會觸發相同的事件。在觸發的事件中編寫查詢數據庫的語句,并將其Interval屬性值設置在一個合理范圍內(10秒-30秒),就可及時獲取報警信息。

從前面的數據庫設計中可知一條傳感器記錄有很多項,為了更及時便利地處理查詢到的報警記錄,還需要設計一個報警信息結構體,其結構體內容與報警記錄各字段相一致。

4.2 報警信息的動態生成與閃動

由于報警信息可能沒有,也可能是多個,因此報警信息的顯示需要動態生成。本系統使用Label控件顯示報警信息,Label控件的動態生成算法如下:假設生成x行y列Label,首先通過查詢到的總報警信息數計算出需要生成的整行數zx和最后一行的列標ly;使用兩個嵌套的for循環生成zx行y列的Label;然后再用一個for循環生成最后一行ly列Label。在for循環中使用語句label=new Label()得到一個新的Label控件,通過對其Location、Text、ForeColor等屬性值的設定,可生成一個在指定位置使用紅色字體顯示某條報警信息的Label控件。

Label生成后,如何讓其閃動哪?本系統的設計思路是:使用一個Timer控件,其Interval屬性值設為600毫秒;觸發的事件的內容為遍歷所有生成的Label控件,并將其Visible屬性值置反,即label.Visible=!label.Visible。通過將Label的Visible屬性值不斷反復變化,就可得到閃動的Label。

4.3 窗體的動態控制

因為環境報警是要優先相應的,所以不管此時客戶端程序運行在那個界面,只要報警界面沒開,就要自動關閉其它界面,打開報警界面。如果此時,程序被最小化了,還要能夠自動彈出成為當前程序焦點。對于優先相應的設計思路是:在父窗體中設置一個Timer控件,其觸發的事件的內容為首先從數據庫中獲取報警記錄數,如果不為零并且報警子窗體沒有打開,則關閉當前打開的子窗體,開啟報警子窗體。使用for語句將報警窗體名與當前打開的窗體名一一比較,可知報警窗體是否打開,比較次數為父窗體.MdiChildren.Length次。

而對于最小化自動彈出,可通過對父窗體的WindowState屬性的讀取與設置來完成。如果其值為FormWindowState.Minimized,則說明程序被最小化了,將屬性重新賦值為FormWindowState.Normal,程序即可自動彈出。

5 結論

本文介紹了圈舍環境監測預警系統的功能和作用,對系統的關鍵技術進行了分析研究。網絡傳輸協議和內容的合理選定、數據庫的完善設計、多線程技術的使用以及客戶端設計難點問題的解決使得系統具有很好的易用性、穩定性和擴展性,同時具備遠距離信息傳送及時準確和報警迅速等優點。系統使得用戶能夠對圈舍環境進行遠距離監測,提高了養殖業的勞動生產率,降低了勞動強度。系統的實現提高了養殖業的信息化和數字化程度。

[1]魯純養.農業生物環境原理[M].北京:農業出版社,1994:147-150

[2]李立峰,武佩,麻碩士,于明珠.哺乳母豬舍環境監控系統的研究[J].農機化研究,2011,11(11):195-198.

[3]謝希仁.計算機網絡[M].北京:電子工業出版社,1999:230-231

[4]趙冬,郭清宇.C#多線程技術及其在網絡編程中的應用[J].許昌學院學報,2007,26(5):79-81.

[5]鄭阿奇.Visual C#網絡編程[M].北京:電子工業出版社,2011:23-50

猜你喜歡
信息
訂閱信息
中華手工(2017年2期)2017-06-06 23:00:31
展會信息
中外會展(2014年4期)2014-11-27 07:46:46
信息超市
大眾創業(2009年10期)2009-10-08 04:52:00
展會信息
展會信息
展會信息
展會信息
展會信息
信息
建筑創作(2001年3期)2001-08-22 18:48:14
健康信息
祝您健康(1987年3期)1987-12-30 09:52:32
主站蜘蛛池模板: 亚洲精品视频免费看| 小说区 亚洲 自拍 另类| 中文字幕日韩欧美| 国产精品亚洲va在线观看| 午夜免费视频网站| 久久精品国产亚洲麻豆| 人妻中文久热无码丝袜| 在线观看国产网址你懂的| 片在线无码观看| 真人高潮娇喘嗯啊在线观看 | 三级视频中文字幕| 国产精品va免费视频| 亚洲色图另类| 中文纯内无码H| 农村乱人伦一区二区| 亚洲一区第一页| 亚洲人视频在线观看| 日韩精品成人网页视频在线| 国产91九色在线播放| 五月婷婷综合网| 波多野结衣亚洲一区| 国产正在播放| 久久香蕉国产线| 欧美激情网址| 国产导航在线| 国产亚洲欧美在线中文bt天堂| 久久99这里精品8国产| 99视频在线观看免费| 日韩午夜福利在线观看| 欧美不卡二区| 久久国产亚洲偷自| 欧美综合成人| 久久6免费视频| 国产亚洲一区二区三区在线| 国产在线观看91精品亚瑟| 人人91人人澡人人妻人人爽| 天天色天天综合网| 久久精品丝袜| 日韩欧美一区在线观看| 久草网视频在线| 亚洲国产精品无码AV| 国产成人1024精品| 日韩色图区| www.99精品视频在线播放| 男女精品视频| 亚洲91在线精品| 五月六月伊人狠狠丁香网| 一本无码在线观看| 久久精品aⅴ无码中文字幕| 亚洲动漫h| 9啪在线视频| 熟妇丰满人妻| 国产亚洲精品精品精品| 久草国产在线观看| 最近最新中文字幕在线第一页| 国产色爱av资源综合区| 国产精品私拍在线爆乳| 老司机精品一区在线视频| yjizz视频最新网站在线| 强乱中文字幕在线播放不卡| 亚洲国产天堂久久综合226114| 欧美成人精品一区二区| 亚洲一区精品视频在线| 国产欧美精品午夜在线播放| 第一区免费在线观看| 欧美日韩国产高清一区二区三区| 国产丝袜无码精品| 国产欧美在线观看一区| 一区二区三区四区精品视频| 精品无码一区二区在线观看| 99视频精品全国免费品| 91成人在线观看视频| 四虎国产在线观看| 992tv国产人成在线观看| 欧美国产精品不卡在线观看| 97久久精品人人| 国产美女一级毛片| 国产精品密蕾丝视频| 日韩无码视频专区| 香蕉伊思人视频| 久久亚洲美女精品国产精品| 国产熟女一级毛片|