孫華峰,陸 榮,楊立志
(1.江蘇理工學(xué)院,江蘇 常州 213001;2.南化集團(tuán)連云港堿廠,江蘇 連云港 222042;3.江陰職業(yè)技術(shù)學(xué)院,江蘇 江陰 214433)
茅口取水站是南化集團(tuán)連云港堿廠生產(chǎn)、生活用水的主要原水取水站,將取自薔薇河的水經(jīng)定期殺藻殺菌,送到馬山凈水站進(jìn)行凈化處理,作為堿廠的生產(chǎn)水和生活水,取水能力設(shè)計(jì)為3 600m3/h。
圖1 連云港堿廠茅口取水站遠(yuǎn)程檢測(cè)平臺(tái)系統(tǒng)結(jié)構(gòu)圖
南化集團(tuán)連云港堿廠生產(chǎn)生活用水來自連云港薔薇河下游,受季節(jié)及上游來水影響,取水口經(jīng)常出現(xiàn)浮草、污物堆積嚴(yán)重等問題,由于取水站距離廠區(qū)較遠(yuǎn),檢測(cè)、處理費(fèi)時(shí)費(fèi)力,造成每年均出現(xiàn)5-8次較為嚴(yán)重的污染事件。為方便相關(guān)人員及時(shí)檢測(cè)并處理以上問題,采用友善mini6410嵌入式開發(fā)板結(jié)合攝像設(shè)備構(gòu)建了遠(yuǎn)程檢測(cè)平臺(tái)[1-2],對(duì)取水口部分關(guān)鍵部位進(jìn)行局部監(jiān)控,監(jiān)控?cái)?shù)據(jù)經(jīng)由網(wǎng)絡(luò)傳輸?shù)綇S區(qū)監(jiān)控平臺(tái)。整個(gè)系統(tǒng)設(shè)計(jì)框架如下圖1所示。在圖1中,檢測(cè)平臺(tái)采用mini6410開發(fā)板作為基板,外接OV9650攝像頭用于采集取水口周圍圖像信息,采用HC-SR04超聲測(cè)距模塊檢測(cè)集水井水位,加氯間水射器壓力、二氧化氯壓力,離心泵一次側(cè)電壓值等運(yùn)行數(shù)據(jù)經(jīng)各自的變送器轉(zhuǎn)換為4~20mA電流送往基板A/D轉(zhuǎn)換接口,運(yùn)行數(shù)據(jù)及圖像數(shù)據(jù)經(jīng)網(wǎng)絡(luò)傳輸?shù)綇S區(qū)監(jiān)控中心。傳輸方式有兩種,一種方式根據(jù)監(jiān)控中心發(fā)來的命令,按照命令要求實(shí)時(shí)采集相關(guān)數(shù)據(jù)進(jìn)行傳送。另一種方式是每天定時(shí)集中采集兩次,統(tǒng)一發(fā)往監(jiān)控中心。
檢測(cè)系統(tǒng)分為遠(yuǎn)程監(jiān)控終端和現(xiàn)場(chǎng)檢測(cè)平臺(tái),現(xiàn)場(chǎng)檢測(cè)平臺(tái)操作系統(tǒng)采用嵌入式linux2.6.30內(nèi)核,內(nèi)核裁剪過程中對(duì)100M以太網(wǎng)配置及視頻捕獲有關(guān)驅(qū)動(dòng)等配置著重進(jìn)行了處理,保留內(nèi)核自帶的A/D轉(zhuǎn)換功能。針對(duì)HC-SR04超聲模塊的工作特點(diǎn),利用開發(fā)板預(yù)留管腳GPB0接Trigger信號(hào),GPB12接echo信號(hào),并增添超聲模塊驅(qū)動(dòng)程序到內(nèi)核。驅(qū)動(dòng)程序采用linux misc驅(qū)動(dòng)模式開發(fā),文件名為HCSR04.c,具體設(shè)計(jì)步驟如圖2示:
圖2 超聲模塊驅(qū)動(dòng)程序流程圖
驅(qū)動(dòng)程序的主要功能是:當(dāng)應(yīng)用程序調(diào)用read函數(shù)向驅(qū)動(dòng)申請(qǐng)水位數(shù)據(jù)時(shí),驅(qū)動(dòng)程序?qū)⑾虺晜鞲衅靼l(fā)送trigger信號(hào),并獲取系統(tǒng)當(dāng)前jiffies值,超聲測(cè)距模塊接收到trigger信號(hào)后會(huì)通過超聲發(fā)生裝置發(fā)送超聲波,當(dāng)接收到超聲回波后,超聲模塊將產(chǎn)生echo信號(hào)觸發(fā)eint11中斷,在中斷處理函數(shù)中再次獲取系統(tǒng)當(dāng)前jiffies值,并根據(jù)以下公式得到液位距離值傳送到用戶空間:
上式中,△J為兩次獲取的jiffies的差值。
將上述驅(qū)動(dòng)源文件及makefile文件放到內(nèi)核目錄下,并修改頂層kconfig文件,編譯內(nèi)核,燒寫到板子上。應(yīng)用程序采用Qt進(jìn)行開發(fā),據(jù)此根文件系統(tǒng)制作中添加QT-4.7.0相關(guān)庫,采用busybox-1.20制作。
根據(jù)任務(wù)特點(diǎn),應(yīng)用層劃分為視頻捕獲,數(shù)據(jù)采集,數(shù)據(jù)傳輸三個(gè)功能模塊。
在Linux系統(tǒng)中普遍采用V4L技術(shù)[3]實(shí)現(xiàn)視頻處理,當(dāng)前最新技術(shù)為V4L2,圖3給出V4L2實(shí)現(xiàn)圖像捕獲的設(shè)計(jì)流程:
上述流程圖中第二步的主要目的是為了了解攝像設(shè)備當(dāng)前的工作參數(shù),如能夠拍攝多高,多寬的圖像,能拍攝jpeg格式,bmp格式還是png格式的圖像等。
攝像設(shè)備的各種輸出格式由struct v4l2_fromat類型的結(jié)構(gòu)體變量進(jìn)行描述。這一類型在v4l2.h頭文件中作出定義,在使用時(shí)只要將該頭文件包含到自己的程序中,就可以直接用來定義變量了,具體使用形式如下:
圖3 采用V4L2技術(shù)進(jìn)行視頻捕獲的主要流程
第三步通過以下語句修改捕獲的圖像格式等信息。
(1)myformat.type=V4L2_BUF_TYPE_VIDEO_CAPTURE;
(2)myformat.fmt.pix.width=320;
(3)myformat.fmt.pix.height=240;
(4)myformat.fmt.pix.pixelformat=V4L2_PIX_FMT_JPEG;
(5)ret=ioctl(fd,VIDIOC_S_FMT,& myformat);//設(shè)置圖像格式
打開攝像設(shè)備,成功設(shè)置格式后,接下來需要向驅(qū)動(dòng)申請(qǐng)幀緩存,一般申請(qǐng)數(shù)不超過5,根據(jù)設(shè)計(jì)需要我們申請(qǐng)兩幀(struct v4l2_requestbuffer)。對(duì)申請(qǐng)到的幀緩存,采用mmap函數(shù)映射到用戶空間,方便提取圖像數(shù)據(jù)。將幀緩存放入緩存隊(duì)列后,就可以開始圖像采集了。
現(xiàn)場(chǎng)需要監(jiān)控的數(shù)據(jù),除取水口圖像數(shù)據(jù),還有取水泵電壓、液位等,這些數(shù)據(jù)在應(yīng)用層按照linux環(huán)境下訪問普通文件的方法一樣訪問對(duì)應(yīng)于/dev目錄下的相關(guān)設(shè)備文件,通過read函數(shù)調(diào)用,對(duì)應(yīng)的設(shè)備驅(qū)動(dòng)程序會(huì)將采集的數(shù)據(jù)拷貝到用戶空間。
表1 主要設(shè)備部件及其性能
操作指標(biāo)
(1)電機(jī)起動(dòng)電壓54 kV—63 kV 電流≤36A
(2)電機(jī)溫升≤75℃
(3)出水壓力,0.4MPa—0.6 MPa
數(shù)據(jù)傳輸分成兩個(gè)部分:(1)圖像數(shù)據(jù)傳輸。(2)普通數(shù)據(jù)傳輸。為了方便遠(yuǎn)程監(jiān)控平臺(tái)處理,在檢測(cè)端開啟兩個(gè)線程,分別獨(dú)立發(fā)送圖像數(shù)據(jù)和普通數(shù)據(jù),根據(jù)監(jiān)控要求,每天傳輸兩幀圖像,數(shù)據(jù)量不大,在設(shè)計(jì)時(shí)采用面向連接的TCP/IP網(wǎng)絡(luò)協(xié)議實(shí)現(xiàn)。
具體設(shè)計(jì)采用Qt提供的線程類實(shí)現(xiàn)[4,5],QT通過三種形式提供了對(duì)線程的支持。它們分別是,一、平臺(tái)無關(guān)的線程類,二、線程安全的事件投遞,三、跨線程的信號(hào)-槽連接。這使得開發(fā)輕巧的多線程Qt程序更為容易,并能充分利用多處理器機(jī)器的優(yōu)勢(shì)。
Qt包含下面一些線程相關(guān)的類:
表2 Qt線程類
在設(shè)計(jì)過程中需要考慮如何區(qū)分哪一個(gè)線程用來傳送圖像,哪一個(gè)線程用來傳送檢測(cè)數(shù)據(jù)和控制命令,這樣才不至于使發(fā)送端和接收端出現(xiàn)紊亂,本文采用的辦法是通過套接字描述符來區(qū)分,當(dāng)主控室發(fā)來連接請(qǐng)求,監(jiān)控端的listen函數(shù)偵聽到后,將自動(dòng)調(diào)用incomingconnection函數(shù)與之響應(yīng),該函數(shù)是QTcpServer類的一個(gè)虛函數(shù),在該函數(shù)的實(shí)現(xiàn)中將為本次連接請(qǐng)求創(chuàng)建相應(yīng)的套接字,而系統(tǒng)將為該套接字創(chuàng)建套接字描述符,唯一的標(biāo)識(shí)本次連接,設(shè)計(jì)時(shí)將該套接字描述符保存到事先開辟的全局內(nèi)存空間中,當(dāng)發(fā)送或接收方通過該連接進(jìn)行通信時(shí),通過在Qthread的run函數(shù)中比對(duì)相關(guān)的socketDescriptor就可以判斷到底是傳送圖像的線程在活動(dòng)還是用來傳送數(shù)據(jù)的線程在活動(dòng),據(jù)此發(fā)送接收方可以實(shí)現(xiàn)正確的通信,而不至于發(fā)生錯(cuò)誤。
本文圍繞南化集團(tuán)連云港堿廠茅口取水站的實(shí)際監(jiān)控需要,以mini6410嵌入式開發(fā)板為平臺(tái),通過裁剪linux2.30.6內(nèi)核,開發(fā)、修改內(nèi)核中相關(guān)設(shè)備驅(qū)動(dòng)程序?qū)崿F(xiàn)了一種能夠?qū)θ∷诂F(xiàn)場(chǎng)進(jìn)行監(jiān)視和控制的取水口監(jiān)控系統(tǒng),實(shí)踐證明該系統(tǒng)簡單有效,能夠完成取水口相關(guān)生產(chǎn)環(huán)節(jié)的監(jiān)控任務(wù)。
[1]謝瑩.基于Web架構(gòu)的視頻監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].武漢:華中科技大學(xué),2011.
[2]馬俊驥.基于無線網(wǎng)絡(luò)的視頻監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2010.
[3]陳福,馬莉,周樹杰,等.基于嵌入式系統(tǒng)的視頻圖像捕獲研究與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2005(25):12-13.
[4]陳琦.QT 的編程技術(shù)及應(yīng)用[J].科技信息.2008(33):503-504.
[5]劉小春,張有為,向偉.嵌入式Linux下Qt/Embedded應(yīng)用關(guān)鍵技術(shù)研究[J].微計(jì)算機(jī)信息.2007(35):62-63.
[6]孫瓊.嵌入式Linux應(yīng)用程序開發(fā)詳解[M].北京:人民郵電出版社,2006.
江蘇理工學(xué)院學(xué)報(bào)2014年2期