孫華峰,陸 榮,楊立志
(1.江蘇理工學院,江蘇 常州 213001;2.南化集團連云港堿廠,江蘇 連云港 222042;3.江陰職業技術學院,江蘇 江陰 214433)
茅口取水站是南化集團連云港堿廠生產、生活用水的主要原水取水站,將取自薔薇河的水經定期殺藻殺菌,送到馬山凈水站進行凈化處理,作為堿廠的生產水和生活水,取水能力設計為3 600m3/h。

圖1 連云港堿廠茅口取水站遠程檢測平臺系統結構圖
南化集團連云港堿廠生產生活用水來自連云港薔薇河下游,受季節及上游來水影響,取水口經常出現浮草、污物堆積嚴重等問題,由于取水站距離廠區較遠,檢測、處理費時費力,造成每年均出現5-8次較為嚴重的污染事件。為方便相關人員及時檢測并處理以上問題,采用友善mini6410嵌入式開發板結合攝像設備構建了遠程檢測平臺[1-2],對取水口部分關鍵部位進行局部監控,監控數據經由網絡傳輸到廠區監控平臺。整個系統設計框架如下圖1所示。在圖1中,檢測平臺采用mini6410開發板作為基板,外接OV9650攝像頭用于采集取水口周圍圖像信息,采用HC-SR04超聲測距模塊檢測集水井水位,加氯間水射器壓力、二氧化氯壓力,離心泵一次側電壓值等運行數據經各自的變送器轉換為4~20mA電流送往基板A/D轉換接口,運行數據及圖像數據經網絡傳輸到廠區監控中心。傳輸方式有兩種,一種方式根據監控中心發來的命令,按照命令要求實時采集相關數據進行傳送。另一種方式是每天定時集中采集兩次,統一發往監控中心。
檢測系統分為遠程監控終端和現場檢測平臺,現場檢測平臺操作系統采用嵌入式linux2.6.30內核,內核裁剪過程中對100M以太網配置及視頻捕獲有關驅動等配置著重進行了處理,保留內核自帶的A/D轉換功能。針對HC-SR04超聲模塊的工作特點,利用開發板預留管腳GPB0接Trigger信號,GPB12接echo信號,并增添超聲模塊驅動程序到內核。驅動程序采用linux misc驅動模式開發,文件名為HCSR04.c,具體設計步驟如圖2示:

圖2 超聲模塊驅動程序流程圖
驅動程序的主要功能是:當應用程序調用read函數向驅動申請水位數據時,驅動程序將向超聲傳感器發送trigger信號,并獲取系統當前jiffies值,超聲測距模塊接收到trigger信號后會通過超聲發生裝置發送超聲波,當接收到超聲回波后,超聲模塊將產生echo信號觸發eint11中斷,在中斷處理函數中再次獲取系統當前jiffies值,并根據以下公式得到液位距離值傳送到用戶空間:

上式中,△J為兩次獲取的jiffies的差值。
將上述驅動源文件及makefile文件放到內核目錄下,并修改頂層kconfig文件,編譯內核,燒寫到板子上。應用程序采用Qt進行開發,據此根文件系統制作中添加QT-4.7.0相關庫,采用busybox-1.20制作。
根據任務特點,應用層劃分為視頻捕獲,數據采集,數據傳輸三個功能模塊。
在Linux系統中普遍采用V4L技術[3]實現視頻處理,當前最新技術為V4L2,圖3給出V4L2實現圖像捕獲的設計流程:
上述流程圖中第二步的主要目的是為了了解攝像設備當前的工作參數,如能夠拍攝多高,多寬的圖像,能拍攝jpeg格式,bmp格式還是png格式的圖像等。
攝像設備的各種輸出格式由struct v4l2_fromat類型的結構體變量進行描述。這一類型在v4l2.h頭文件中作出定義,在使用時只要將該頭文件包含到自己的程序中,就可以直接用來定義變量了,具體使用形式如下:


圖3 采用V4L2技術進行視頻捕獲的主要流程
第三步通過以下語句修改捕獲的圖像格式等信息。
(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);//設置圖像格式
打開攝像設備,成功設置格式后,接下來需要向驅動申請幀緩存,一般申請數不超過5,根據設計需要我們申請兩幀(struct v4l2_requestbuffer)。對申請到的幀緩存,采用mmap函數映射到用戶空間,方便提取圖像數據。將幀緩存放入緩存隊列后,就可以開始圖像采集了。
現場需要監控的數據,除取水口圖像數據,還有取水泵電壓、液位等,這些數據在應用層按照linux環境下訪問普通文件的方法一樣訪問對應于/dev目錄下的相關設備文件,通過read函數調用,對應的設備驅動程序會將采集的數據拷貝到用戶空間。

表1 主要設備部件及其性能
操作指標
(1)電機起動電壓54 kV—63 kV 電流≤36A
(2)電機溫升≤75℃
(3)出水壓力,0.4MPa—0.6 MPa
數據傳輸分成兩個部分:(1)圖像數據傳輸。(2)普通數據傳輸。為了方便遠程監控平臺處理,在檢測端開啟兩個線程,分別獨立發送圖像數據和普通數據,根據監控要求,每天傳輸兩幀圖像,數據量不大,在設計時采用面向連接的TCP/IP網絡協議實現。
具體設計采用Qt提供的線程類實現[4,5],QT通過三種形式提供了對線程的支持。它們分別是,一、平臺無關的線程類,二、線程安全的事件投遞,三、跨線程的信號-槽連接。這使得開發輕巧的多線程Qt程序更為容易,并能充分利用多處理器機器的優勢。
Qt包含下面一些線程相關的類:

表2 Qt線程類
在設計過程中需要考慮如何區分哪一個線程用來傳送圖像,哪一個線程用來傳送檢測數據和控制命令,這樣才不至于使發送端和接收端出現紊亂,本文采用的辦法是通過套接字描述符來區分,當主控室發來連接請求,監控端的listen函數偵聽到后,將自動調用incomingconnection函數與之響應,該函數是QTcpServer類的一個虛函數,在該函數的實現中將為本次連接請求創建相應的套接字,而系統將為該套接字創建套接字描述符,唯一的標識本次連接,設計時將該套接字描述符保存到事先開辟的全局內存空間中,當發送或接收方通過該連接進行通信時,通過在Qthread的run函數中比對相關的socketDescriptor就可以判斷到底是傳送圖像的線程在活動還是用來傳送數據的線程在活動,據此發送接收方可以實現正確的通信,而不至于發生錯誤。
本文圍繞南化集團連云港堿廠茅口取水站的實際監控需要,以mini6410嵌入式開發板為平臺,通過裁剪linux2.30.6內核,開發、修改內核中相關設備驅動程序實現了一種能夠對取水口現場進行監視和控制的取水口監控系統,實踐證明該系統簡單有效,能夠完成取水口相關生產環節的監控任務。
[1]謝瑩.基于Web架構的視頻監控系統設計與實現[D].武漢:華中科技大學,2011.
[2]馬俊驥.基于無線網絡的視頻監控系統設計與實現[D].成都:電子科技大學,2010.
[3]陳福,馬莉,周樹杰,等.基于嵌入式系統的視頻圖像捕獲研究與實現[J].微計算機信息,2005(25):12-13.
[4]陳琦.QT 的編程技術及應用[J].科技信息.2008(33):503-504.
[5]劉小春,張有為,向偉.嵌入式Linux下Qt/Embedded應用關鍵技術研究[J].微計算機信息.2007(35):62-63.
[6]孫瓊.嵌入式Linux應用程序開發詳解[M].北京:人民郵電出版社,2006.