国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Delphi IND Y控件的GPRS無線視頻通信程序在山洪災(zāi)害預(yù)警系統(tǒng)中的應(yīng)用

2012-07-14 07:28:10鐘志武
湖南水利水電 2012年3期
關(guān)鍵詞:山洪監(jiān)測(cè)站預(yù)警系統(tǒng)

鐘志武

(湖南省水利水電勘測(cè)設(shè)計(jì)研究總院 長(zhǎng)沙市 410007)

1 系統(tǒng)簡(jiǎn)介

本系統(tǒng)作為山洪災(zāi)害預(yù)警系統(tǒng)的一部分,主要負(fù)責(zé)接收雨量水位監(jiān)測(cè)站通過無線GPRS網(wǎng)絡(luò)發(fā)送過來的數(shù)據(jù),包括雨量數(shù)據(jù)、水位數(shù)據(jù)、電瓶電壓數(shù)據(jù)和監(jiān)測(cè)站(水庫(kù)、河道和閘壩等)監(jiān)控?zé)o線視頻圖片信息。

系統(tǒng)在Windows環(huán)境下用Delphi 7編寫,數(shù)據(jù)庫(kù)采用MS SQL Server 2005。下位機(jī)采用基于ARM9處理器(三星 S3C2410)的HYKJ-2410 Arm-PC104嵌入式工業(yè)計(jì)算機(jī)主板設(shè)計(jì),配置HYKJ-GPRS V5.0通信模塊,預(yù)裝linux操作系統(tǒng),采用C語言編程,采用TCP/IP協(xié)議與上位機(jī)程序(本系統(tǒng))通訊。下位機(jī)采用太陽能電源供電(配置38 Ah電瓶和13 W太陽能電板),連接雨量傳感器、水位傳感器和視頻攝像頭。數(shù)據(jù)傳輸采用公共的GPRS網(wǎng)絡(luò),具有組網(wǎng)方便、實(shí)時(shí)性高、運(yùn)行費(fèi)用低等優(yōu)點(diǎn)。

2 系統(tǒng)設(shè)計(jì)

2.1 編程原理與系統(tǒng)流程

Indy 的全名是 Internet Direct(也叫 Winshoes),它是一套開放源代碼的Internet控件集,它支持大部分流行的Internet協(xié)議。IdTCPServer控件是Indy控件系列中基于TCP/IP協(xié)議的TCP服務(wù)器控件。IdTCPServer是一個(gè)多線程控件。IdTCPServer在開始工作后,首先會(huì)自動(dòng)建立一個(gè)偵聽線程TidListenerThread,該線程負(fù)責(zé)偵聽客戶端的連接請(qǐng)求,Server端首先是響應(yīng)客戶的Connect事件,一旦連接了,就自動(dòng)在服務(wù)端對(duì)每一個(gè)服務(wù)器已接受的連接創(chuàng)建一個(gè)TidPeerThread線程。每個(gè)連接通過運(yùn)行各自所屬的TidPeerThread來實(shí)現(xiàn)與服務(wù)器的數(shù)據(jù)交互。只要有客戶發(fā)送數(shù)據(jù),就會(huì)激活Server的OnExecute事件。數(shù)據(jù)的接收是在各個(gè)為連接所建的線程中并發(fā)進(jìn)行的。而這個(gè)連接線程是需要Server維護(hù)的,IdTCPServer的最大連接線程數(shù)為600個(gè)左右,完全能滿足縣級(jí)山洪災(zāi)害預(yù)警系統(tǒng)的需要。

通常使用Winsock開發(fā)網(wǎng)絡(luò)應(yīng)用程序時(shí),從Socket中讀取數(shù)據(jù)或者向Socket寫入數(shù)據(jù)都是異步發(fā)生的,這樣就不會(huì)阻斷程序中其它代碼的執(zhí)行。在收到數(shù)據(jù)時(shí),Winsock會(huì)向應(yīng)用程序發(fā)送相應(yīng)的消息。這種訪問方式被稱作非阻塞式連接,它要求你對(duì)事件作出響應(yīng),設(shè)置狀態(tài)機(jī),并通常還需要一個(gè)等待循環(huán)。與通常的Winsock編程方法不同的是,Indy使用了阻塞式(便于編程)Socket調(diào)用方式。阻塞式訪問更像是文件存取。當(dāng)你讀取數(shù)據(jù),或是寫入數(shù)據(jù)時(shí),讀取和寫入函數(shù)將一直等到相應(yīng)的操作完成后才返回,程序也一直阻塞在讀或?qū)懙牡胤?。比如說,發(fā)起網(wǎng)絡(luò)連接只需調(diào)用Connect方法并等待它返回,如果該方法執(zhí)行成功,在結(jié)束時(shí)就直接返回,如果未能成功執(zhí)行,則會(huì)拋出相應(yīng)的異常。同文件訪問不同的是,Socket調(diào)用可能會(huì)需要更長(zhǎng)的時(shí)間,因?yàn)橐x寫的數(shù)據(jù)可能不會(huì)立即就能準(zhǔn)備好(很大程度上依賴于網(wǎng)絡(luò)帶寬)。

事物都具有兩面性,阻塞式Socket也不例外。它的一個(gè)主要的缺點(diǎn)就是使客戶程序的用戶界面“凍結(jié)”。當(dāng)在程序的主線程中進(jìn)行阻塞式Socket調(diào)用時(shí),由于要等待Socket調(diào)用完成并返回,這段時(shí)間就不能處理用戶界面消息,使得Update、Repaint以及其它消息得不到及時(shí)響應(yīng),從而導(dǎo)致用戶界面被“凍結(jié)”。Indy使用一個(gè)特殊的組件TIdAntiFreeze來透明地解決客戶程序用戶界面“凍結(jié)”的問題。TIdAntiFreeze在Indy內(nèi)部定時(shí)中斷對(duì)棧的調(diào)用,并在中斷期間調(diào)用Application.ProcessMessages方法處理消息,而外部的Indy調(diào)用繼續(xù)保存阻塞狀態(tài),就好像TIdAntiFreeze對(duì)象不存在一樣。我們只要在程序中的任意地方添加一個(gè)TIdAntiFreeze對(duì)象,就能利用到阻塞式Socket的所有優(yōu)點(diǎn)而避開它的一些顯著缺點(diǎn)。

Indy服務(wù)器工作原理同Unix服務(wù)器十分類似,只是Windows不像Unix那樣支持fork,而是支持線程,因此Indy服務(wù)器為每一個(gè)客戶連接分配一個(gè)線程。圖1顯示了Indy服務(wù)器的工作原理與系統(tǒng)流程圖。Indy服務(wù)器組件創(chuàng)建一個(gè)同應(yīng)用程序主線程分離的監(jiān)聽線程來監(jiān)聽客戶連接請(qǐng)求,對(duì)于接受的每一個(gè)客戶,都創(chuàng)建一個(gè)新的線程來為該客戶提供服務(wù),所有與這一客戶相關(guān)的事務(wù)都由該線程來處理。

圖1 系統(tǒng)流程示意圖

2.2 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)

本系統(tǒng)接收的客戶端(下位機(jī))通過GPRS網(wǎng)絡(luò)上傳的數(shù)據(jù)包包括字符串包(雨量、水位和電壓)和流媒體包(視頻圖片)。由于服務(wù)端讀取各個(gè)客戶端數(shù)據(jù)是并發(fā)進(jìn)行的,所以應(yīng)盡量避免讀取數(shù)據(jù)時(shí)進(jìn)行數(shù)據(jù)處理入庫(kù),可分別為兩種數(shù)據(jù)包建立兩個(gè)循環(huán)隊(duì)列表,先將客戶端數(shù)據(jù)存入緩存中,然后新建兩個(gè)線程(定時(shí)器)處理數(shù)據(jù)。循環(huán)隊(duì)列表數(shù)據(jù)結(jié)構(gòu)如下所示:

下位機(jī)上傳的數(shù)據(jù)包符合水利部發(fā)布的水情信息編碼標(biāo)準(zhǔn)(SL330-2005)和湖南省山洪災(zāi)害監(jiān)測(cè)預(yù)警系統(tǒng)水文通信協(xié)議規(guī)范。數(shù)據(jù)包格式如下:

河道水位包:CH 10 000 001 MMDDHHNN PN10 2 Z 100.00 NN

該數(shù)據(jù)包表示站號(hào)為10 000 001的監(jiān)測(cè)站于時(shí)間MMDDHHNN采集的10分鐘雨量2 mm,河道水位100.00 m。

水庫(kù)水位包:CK 10 000 001 MMDDHHNN PN10 2 ZU 100.00 NN

該數(shù)據(jù)包表示站號(hào)為10 000 001的監(jiān)測(cè)站于時(shí)間MMDDHHNN采集的10分鐘雨量2 mm,庫(kù)水位100.00 m。

2.3 模塊設(shè)計(jì)

本系統(tǒng)除了接收監(jiān)測(cè)站的數(shù)據(jù)外,另一個(gè)功能是通過GSM短信貓遠(yuǎn)程設(shè)置監(jiān)測(cè)站的參數(shù),包括連接的數(shù)據(jù)中心IP地址、端口號(hào)、水位站類型(河道或水庫(kù)等)、站號(hào)、水位原始高程等。主要的模塊有視頻監(jiān)控模塊、站點(diǎn)信息管理模塊、參數(shù)設(shè)置模塊、數(shù)據(jù)監(jiān)測(cè)模塊、數(shù)據(jù)查詢模塊等。

圖2為監(jiān)測(cè)站視頻監(jiān)控示意圖。

3 編程實(shí)現(xiàn)

本系統(tǒng)關(guān)鍵代碼如下:

圖2 監(jiān)測(cè)站視頻監(jiān)控示意圖

4 結(jié)語

本系統(tǒng)已經(jīng)應(yīng)用于湖南省30多個(gè)縣的山洪災(zāi)害預(yù)警系統(tǒng)建設(shè)中,運(yùn)行穩(wěn)定可靠,極大地提高對(duì)暴雨山洪災(zāi)害的監(jiān)測(cè)能力和反應(yīng)速度,最大程度保障了人民群眾生命財(cái)產(chǎn)的安全。

1水情信息編碼標(biāo)準(zhǔn)SL 330-2005.中華人民共和國(guó)水利部[S].

2蔣方帥.Delphi 5程序員指南[M].北京:人民郵電出版社,2000.

3國(guó)家防汛抗旱總指揮部辦公室.山洪災(zāi)害防治縣級(jí)監(jiān)測(cè)預(yù)警系統(tǒng)建設(shè)技術(shù)要求[R].2010.

猜你喜歡
山洪監(jiān)測(cè)站預(yù)警系統(tǒng)
民用飛機(jī)機(jī)載跑道入侵預(yù)警系統(tǒng)仿真驗(yàn)證
一種基于CNN遷移學(xué)習(xí)的井下煙、火智能感知預(yù)警系統(tǒng)
優(yōu)雅地表達(dá)
基于ZigBee與GPRS的輸電桿塔傾斜監(jiān)測(cè)預(yù)警系統(tǒng)
電子制作(2019年11期)2019-07-04 00:34:36
北京市監(jiān)測(cè)站布局差異分析
對(duì)輻射環(huán)境空氣自動(dòng)監(jiān)測(cè)站系統(tǒng)開展數(shù)據(jù)化運(yùn)維的探討
橋、隧安全防范聲光預(yù)警系統(tǒng)
與酷暑?yuàn)^戰(zhàn)的環(huán)保英雄——宜興市環(huán)境監(jiān)測(cè)站現(xiàn)場(chǎng)采樣組的一天
遭遇暴雨山洪如何避險(xiǎn)自救
湖北省山洪溝治理思路淺析
永安市| 南召县| 云龙县| 板桥市| 麻阳| 卢龙县| 筠连县| 建阳市| 库尔勒市| 喜德县| 苏尼特左旗| 关岭| 依安县| 德钦县| 库尔勒市| 湾仔区| 墨竹工卡县| 晋州市| 谢通门县| 甘谷县| 南皮县| 长子县| 阜康市| 潞西市| 瑞昌市| 图们市| 汽车| 上蔡县| 盐城市| 永仁县| 瓦房店市| 德昌县| 柏乡县| 郴州市| 米泉市| 霍山县| 罗江县| 秦安县| 德钦县| 镇康县| 全州县|