摘 要: 在以太網(wǎng)和TCP/IP協(xié)議基礎(chǔ)上,運(yùn)用32位微控制器采集多媒體信號(hào)在內(nèi)的多種信息并進(jìn)行遠(yuǎn)程傳輸?shù)亩嗝襟w遠(yuǎn)程監(jiān)控網(wǎng)的整體模型。介紹了監(jiān)控節(jié)點(diǎn)平臺(tái)的軟件和硬件設(shè)計(jì),并分析了系統(tǒng)性能。
關(guān)鍵詞: 32位微控制器 以太網(wǎng) Linux 圖像信號(hào)采集
1 應(yīng)用背景
傳統(tǒng)的監(jiān)控網(wǎng)絡(luò)建立在以單片機(jī)和PC機(jī)構(gòu)成的計(jì)算機(jī)網(wǎng)絡(luò)上,最常用的聯(lián)網(wǎng)手段是使用串行總線,如RS485等。自從上世紀(jì)80年代以來(lái),現(xiàn)場(chǎng)總線技術(shù)在工業(yè)過(guò)程監(jiān)控網(wǎng)絡(luò)上得到了廣泛的應(yīng)用?;诖思夹g(shù)的監(jiān)控網(wǎng)絡(luò),由于受帶寬限制而只能用于傳送簡(jiǎn)單的數(shù)據(jù)(如溫度、壓力采樣值等),且傳輸距離僅在車間范圍。
隨著安全監(jiān)控技術(shù)的發(fā)展需要,監(jiān)控系統(tǒng)要求處理圖像、視頻、音頻信號(hào)。為滿足這些要求,通常的做法是建立專用的信號(hào)網(wǎng)絡(luò)傳輸圖像和聲音信號(hào),一般為模擬信號(hào)。而這樣的網(wǎng)絡(luò)布線成本高,維護(hù)困難。如果需要遠(yuǎn)程監(jiān)控,還要采用特殊手段對(duì)信號(hào)進(jìn)行轉(zhuǎn)換,接入遠(yuǎn)程監(jiān)控網(wǎng)絡(luò)。如果能利用目前計(jì)算機(jī)網(wǎng)絡(luò)中廣泛應(yīng)用的以太網(wǎng),則這些問(wèn)題便可以得到解決。
應(yīng)用以太網(wǎng)進(jìn)行信號(hào)傳輸具有如下優(yōu)點(diǎn)。
(1)高帶寬。目前百兆以太網(wǎng)廣泛應(yīng)用,千兆以太網(wǎng)逐漸成熟。(2)安全性高。以太網(wǎng)及TCP/IP協(xié)議上實(shí)現(xiàn)了多種有效的加密手段。(3)容易互聯(lián)。遵循TCP/IP協(xié)議,采集到的數(shù)據(jù)可以方便地共享給遠(yuǎn)程用戶。(4)利用現(xiàn)有資源,減少布線維護(hù)成本。
雖然傳統(tǒng)的8或16位單片機(jī)也可以支持以太網(wǎng)控制器,但由于其本身處理能力有限,因此不能利用以太網(wǎng)高帶寬的特性。本文將采用32位嵌入式處理器PXA255建立數(shù)據(jù)采集節(jié)點(diǎn)。由于手持應(yīng)用的32位處理器PXA255處理能力強(qiáng),可以運(yùn)行在400MHz,處理器支持多個(gè)運(yùn)行級(jí)別和內(nèi)存管理,因此從硬件上支持操作系統(tǒng),很適合作為采集終端。
2 多媒體平臺(tái)設(shè)計(jì)
多媒體監(jiān)控系統(tǒng)的示意圖如圖1所示。一個(gè)C類以太網(wǎng)段最多可以支持254個(gè)節(jié)點(diǎn),而通過(guò)路由器等中繼設(shè)備,一個(gè)監(jiān)控系統(tǒng)理論上可以支持的節(jié)點(diǎn)數(shù)目沒(méi)有上限。通過(guò)以太網(wǎng)關(guān),可以方便地實(shí)現(xiàn)數(shù)據(jù)在Internet上的共享,并保證數(shù)據(jù)安全。
作為實(shí)驗(yàn)室系統(tǒng),本文設(shè)計(jì)了2個(gè)采集節(jié)點(diǎn)和1臺(tái)PC作為監(jiān)視節(jié)點(diǎn)的系統(tǒng)。采集節(jié)點(diǎn)以32位嵌入式微控制器PXA255為中心,采集視頻、聲音和鍵盤輸入等信號(hào),通過(guò)以太網(wǎng)和監(jiān)視節(jié)點(diǎn)通信。監(jiān)視節(jié)點(diǎn)顯示上述信號(hào)的實(shí)時(shí)狀態(tài)。系統(tǒng)的核心是數(shù)據(jù)采集端的設(shè)計(jì)和實(shí)現(xiàn)。
2.1 硬件設(shè)計(jì)
監(jiān)控節(jié)點(diǎn)的硬件模塊示意圖如圖2所示。其中微控制器為PXA255;SDRAM是2片K4S561632A;構(gòu)成Strong ARM 1111 Processor的是Xscale的擴(kuò)展芯片,提供了USB Host控制器;音頻芯片使用CS4201;以太網(wǎng)控制器使用LAN91C96;Flash采用2片28F128J3A,為系統(tǒng)提供32MB的靜態(tài)數(shù)據(jù)存儲(chǔ)空間。
圖中未標(biāo)出的還有PXA255的JTAG接口,用于燒寫Flash和測(cè)試硬件電路。視頻采集設(shè)備采用了Logitech公司的QuickCam網(wǎng)絡(luò)攝像頭,該攝像頭采用USB接口和采集板USB Host接口連接。
QuickCam使用CMOS感光元件,采集速率為30幅/秒、640×480分辨率16色圖像。USB攝像頭直接為采集板提供數(shù)字圖像信號(hào),免去了傳統(tǒng)采集設(shè)備從模擬信號(hào)到數(shù)字信號(hào)轉(zhuǎn)換的過(guò)程。同時(shí),USB設(shè)備具有即插即用特性,使得更換設(shè)備更方便。
圖中LCD Panel是可選設(shè)備。PXA255可支持640×480真彩色LCD顯示屏。實(shí)驗(yàn)室系統(tǒng)中采集端連接了1個(gè)5英寸的LCD顯示屏,可用于檢驗(yàn)采集端之間傳輸圖像的效果。
2.2 軟件設(shè)計(jì)
(1)ARM Linux上的程序設(shè)計(jì)
系統(tǒng)軟件采用了自由軟件ARM Linux。ARM Linux是桌面和服務(wù)器上廣泛使用的GNU/Linux操作系統(tǒng),是以ARM為核心的處理器上的移植版本。與流行的商業(yè)嵌入式操作系統(tǒng)相比,ARM Linux的內(nèi)核由于和桌面GNU/Linux系統(tǒng)內(nèi)核一致,因而內(nèi)核穩(wěn)定性得到保證。其源代碼目前遵循GPL協(xié)議發(fā)布,可以保證系統(tǒng)的可維護(hù)性。
在ARM Linux中訪問(wèn)硬件的方式與桌面Linux和UNIX類似。硬件設(shè)備在ARM Linux系統(tǒng)中由設(shè)備節(jié)點(diǎn)表示,每個(gè)設(shè)備節(jié)點(diǎn)都有1個(gè)主設(shè)備號(hào)和1個(gè)次設(shè)備號(hào)。二者的組合在同一系統(tǒng)中是惟一的。應(yīng)用程序通過(guò)訪問(wèn)設(shè)備節(jié)點(diǎn)訪問(wèn)硬件,操作系統(tǒng)調(diào)用設(shè)備號(hào)對(duì)應(yīng)的驅(qū)動(dòng)程序來(lái)響應(yīng)應(yīng)用程序的請(qǐng)求。
PXA255集成了AC97CODEC芯片控制接口。本系統(tǒng)使用了CS4201CODEC芯片,采集端因此具備了采集聲音信號(hào)的能力。音頻設(shè)備在ARM Linux系統(tǒng)中表示為一個(gè)字符類型設(shè)備,因此讀寫該類型設(shè)備的數(shù)據(jù)單位為字符。
ARM Linux對(duì)USB攝像頭設(shè)備提供底層支持。采集節(jié)點(diǎn)采用了Logitech公司的QuickCam攝像頭,CMOS感光部件能提供640×480分辨率、16位色深的圖像。攝像頭設(shè)備在ARM Linux文件系統(tǒng)中也是字符類型設(shè)備,可以以字符為單位讀出數(shù)據(jù)。但一幅完整的圖像一般由多個(gè)字符組成,因此只讀一幅圖像的一部分通常是沒(méi)有意義的。此外,多次使用read系統(tǒng)調(diào)用,在應(yīng)用程序和內(nèi)核之間進(jìn)行上下文切換,對(duì)系統(tǒng)影響很大。因此,對(duì)這種設(shè)備一般使用內(nèi)存影射的方式訪問(wèn)。通過(guò)mmap系統(tǒng)調(diào)用把驅(qū)動(dòng)程序或者內(nèi)核空間內(nèi)存影射到用戶空間,使得應(yīng)用程序可以直接訪問(wèn)影射的內(nèi)存,避免了多次上下文切換。
ARM Linux為系統(tǒng)提供以太網(wǎng)控制器的驅(qū)動(dòng)程序和與UNIX相似的TCP/IP協(xié)議棧。通信程序是建立在標(biāo)準(zhǔn)Socket接口上的客戶/服務(wù)器程序,采集端運(yùn)行網(wǎng)絡(luò)服務(wù)器、接受監(jiān)控端請(qǐng)求、發(fā)送數(shù)據(jù)到監(jiān)控端并處理監(jiān)控端的命令。
(2)采集端程序設(shè)計(jì)
具體實(shí)現(xiàn)中,采集端軟件由3個(gè)獨(dú)立的線程構(gòu)成。主線程流程圖如圖3所示,其流程如下:建立一個(gè)Socket服務(wù)器和監(jiān)控端建立的基于流的Socket連接;建立若干管道作為不同信號(hào)由采集線程到網(wǎng)絡(luò)通信線程之間的數(shù)據(jù)緩沖區(qū);打開(kāi)攝像頭和其他采集設(shè)備;啟動(dòng)網(wǎng)絡(luò)通信和數(shù)據(jù)采集2個(gè)線程后,主線程放棄CPU,直至網(wǎng)絡(luò)通信線程結(jié)束才被重新調(diào)度。
網(wǎng)絡(luò)通信線程流程圖如圖4所示。主要部分采用select系統(tǒng)調(diào)用,以等待可用的采集數(shù)據(jù)和監(jiān)控端的命令。此處利用了Linux系統(tǒng)中Socket連接和管道都可以用統(tǒng)一的文件描述符表示的特點(diǎn)。select系統(tǒng)調(diào)用處于阻塞線程,直到任一描述符有可讀數(shù)據(jù):即如果Socks連接得到了監(jiān)控端命令,則根據(jù)該命令停止采集和傳輸,直到對(duì)硬件進(jìn)行配置后才重新進(jìn)入采集程序;如果管道中有采集數(shù)據(jù)可用,則把數(shù)據(jù)發(fā)送到監(jiān)控端。
采集線程流程圖如圖5所示。在ARM Linux操作系統(tǒng)中,獲得內(nèi)核空間用內(nèi)存映像機(jī)制獲取圖像。具體說(shuō)就是使用ARM Linux的mmap函數(shù),把QuickCam捕獲的圖像映射到用戶內(nèi)存空間,用ioctl系統(tǒng)調(diào)用向攝像頭驅(qū)動(dòng)程序發(fā)送命令。VIDIOCMCAPTURE命令攝像頭獲取一幅圖像,VIDIOCSYNC命令圖像同步到映射的用戶內(nèi)存空間。同步命令返回后,映射內(nèi)存為最近獲取的圖像。采集線程把數(shù)據(jù)直接復(fù)制到相應(yīng)管道。
其他數(shù)據(jù)(如聲音、鍵盤輸入)由于數(shù)據(jù)量較小且不確定,一般不采用內(nèi)存空間映射的方法獲取,而直接采用read系統(tǒng)調(diào)用。但因?yàn)樵跀?shù)據(jù)源無(wú)數(shù)據(jù)可讀時(shí),read會(huì)阻塞直到有數(shù)據(jù)為止。因此,如果有多個(gè)數(shù)據(jù)源,也應(yīng)該使用select系統(tǒng)調(diào)用,由系統(tǒng)輪詢各個(gè)數(shù)據(jù)源,直到其中一個(gè)有可讀數(shù)據(jù)時(shí)使用read,再進(jìn)入select輪詢狀態(tài)。這樣可以使多個(gè)數(shù)據(jù)源任一個(gè)有數(shù)據(jù)時(shí)都可以得到及時(shí)處理。
3 性能指標(biāo)
QuickCam攝像頭每秒可獲得近30幅640×480分辨率的16位色圖像。但由于JPEG壓縮算法需要較高的CPU資源,采集端實(shí)際可獲得10幅/秒圖像。圖像為320×240分辨率16位色,經(jīng)過(guò)JPEG壓縮后最小可達(dá)2KB以下??紤]到需要控制圖像失真和壓縮時(shí)間,因此選擇壓縮比為10:1,每幅圖像大約10KB。壓縮比小于40:1,一般可以認(rèn)為圖像壓縮是無(wú)損的。
通過(guò)10M以太網(wǎng)交換機(jī)連接采集板和PC控制臺(tái)端,最大傳輸能力為7Mbps,因此理論上系統(tǒng)每秒可以傳輸90幅圖像。實(shí)驗(yàn)表明,采集端得到的圖像確實(shí)可以送達(dá)監(jiān)控端。
以太網(wǎng)的數(shù)據(jù)鏈路層和物理層協(xié)議與現(xiàn)場(chǎng)總線不同,采用的是CMSA/CD方式。如果總線負(fù)載超過(guò)25%,多媒體傳輸速度會(huì)受到數(shù)據(jù)碰撞的影響。采用點(diǎn)名方式分時(shí)采集各點(diǎn)數(shù)據(jù)可以避免多個(gè)采集端同時(shí)發(fā)送多媒體數(shù)據(jù),還可以利用實(shí)時(shí)交換機(jī)代替普通交換機(jī)獲得更好的實(shí)時(shí)性能。
如果需要提高系統(tǒng)的性能,則減少壓縮算法占用的CPU時(shí)間是關(guān)鍵。此外,將單獨(dú)采集圖像的系統(tǒng)性能和圖像與聲音等同時(shí)采集的系統(tǒng)性能做對(duì)比,可以發(fā)現(xiàn),在采集端加入其他中斷源對(duì)于采集圖像信號(hào)也有較大影響。
4 結(jié)束語(yǔ)
系統(tǒng)已實(shí)現(xiàn)了采集平臺(tái)與監(jiān)控中心、平臺(tái)之間的視頻、音頻以及溫度壓力報(bào)警等信號(hào)的互傳。目前工作的重點(diǎn)是在系統(tǒng)上實(shí)現(xiàn)對(duì)視頻和音頻信號(hào)的硬件壓縮解壓,進(jìn)一步提高信號(hào)傳輸速度和質(zhì)量。
由于Linux系統(tǒng)的API和UNIX系統(tǒng)兼容,使得大多數(shù)為UNIX和Linux編寫的應(yīng)用程序都可以不經(jīng)修改或稍加修改就可應(yīng)用在本系統(tǒng)中,如目前已經(jīng)應(yīng)用的JPEG圖像壓縮算法庫(kù)等。這使得該系統(tǒng)不僅適合視頻信號(hào)采集,而且在工業(yè)監(jiān)控的很多領(lǐng)域都有了應(yīng)用前景。
參考文獻(xiàn)
1 Intel Corporation.Intel PXA255 Processor Design Guide. http://www.intel.com,2003
2 Intel Corporation.Intel PXA255 User′s Menu.http://www. intel.com,2003
3 Rubini A.Linux Device Drivers.北京:中國(guó)電力出版社,2000
4 Jerry D G.多媒體數(shù)字壓縮原理與標(biāo)準(zhǔn).北京:電子工業(yè)出版社,2000
5 呂風(fēng)軍.數(shù)字圖像處理編程入門.北京:清華大學(xué)出版社,1999
6 Steven W R.UNIX環(huán)境高級(jí)編程.北京:機(jī)械工業(yè)出版社,2000