摘 要:針對當前工業(yè)控制領域對測控系統(tǒng)提出的將測控分散到現(xiàn)場,、實現(xiàn)遠程監(jiān)控的要求,,給出了一種應用于測控系統(tǒng)的基于Linux的嵌入式系統(tǒng)的設計方案,能保證測控任務完成的實時性,、可靠性,,可以連到工業(yè)以太網(wǎng),實現(xiàn)遠程監(jiān)控,,在工業(yè)控制領域有很好的應用前景。
關鍵詞:嵌入式系統(tǒng),;Linux,;測控系統(tǒng);網(wǎng)絡控制,;工業(yè)以太網(wǎng)
0 引 言
當前,,在工業(yè)控制領域,網(wǎng)絡控制技術快速發(fā)展。網(wǎng)絡控制要求測控系統(tǒng)必須具備兩方面的功能:一方面要在現(xiàn)場完成復雜的測控任務,,通常一些任務具有一定的實時性的要求,;另一方面要求測控系統(tǒng)能夠與某一類型的控制網(wǎng)相連,實現(xiàn)遠程監(jiān)控,。而在目前應用的大多數(shù)測控系統(tǒng)中,,嵌入式系統(tǒng)的硬件采用8/16位的單片機;軟件多采用匯編語言編程,,僅包含一個簡單的循環(huán)處理的控制流程,;單片機與單片機或上位機之間通信通過RS232、RS485來組網(wǎng),。這些網(wǎng)絡存在通信速度慢,、聯(lián)網(wǎng)功能差、開發(fā)困難的問題,。而工業(yè)以太網(wǎng)已逐步完善,,在工業(yè)控制領域獲得越來越多的應用。工業(yè)以太網(wǎng)使用了TCP/IP協(xié)議,,便于聯(lián)網(wǎng),,并具有高速控制網(wǎng)絡的優(yōu)點。現(xiàn)在,,32位嵌入式CPU價格的下降,,性能指標的提高,為嵌入式系統(tǒng)的廣泛應用提供了可能性,?;谏鲜銮闆r,我們將嵌入式系統(tǒng)應用于測控系統(tǒng),,可大大提高測控系統(tǒng)的性能,,嵌入式系統(tǒng)一般應用嵌入式操作系統(tǒng)來開發(fā)。在嵌入式操作系統(tǒng)的選擇上,,由于Linux有完整開放的源代碼,,可針對具體應用修改和優(yōu)化系統(tǒng),內(nèi)核穩(wěn)定,,適用于多種CPU和多種硬件平臺,,支持網(wǎng)絡等特點,因而選擇Linux作為嵌入式操作系統(tǒng),。
1 測控系統(tǒng)總體設計
1.1 設計目標
測控系統(tǒng)以基于Linux的嵌入式系統(tǒng)為核心,,設計目標歸納起來主要有以下幾點:
(1)測控任務在現(xiàn)場完成。測控系統(tǒng)采用分散的控制策略,,系統(tǒng)正常運行時上位機只起到狀態(tài)監(jiān)控的作用,。在工業(yè)現(xiàn)場完成數(shù)據(jù)測量,、數(shù)據(jù)處理、過程控制等多種任務,,能確保一些任務完成的實時性,。
(2)具有一定的自診斷、自校正的功能,,將故障情況上傳給上位機,,便于維護人員查錯、排錯,。具有動態(tài)顯示和數(shù)據(jù)存儲能力,。
(3)測控系統(tǒng)可連到工業(yè)以太網(wǎng),通過工業(yè)以太網(wǎng)實現(xiàn)遠程監(jiān)控,。
1.2 技術路線
嵌入式系統(tǒng)以嵌入式微處理器為核心,,運行嵌入式Linux 操作系統(tǒng)。應用程序可通過網(wǎng)絡進行更新,;通過鍵盤進行人機對話,;數(shù)據(jù)可通過LCD現(xiàn)場顯示;重要數(shù)據(jù)可以文件形式保存在Flash存儲器中,;數(shù)據(jù)和報警信息可通過串口向上位機傳輸,,也可通過以太網(wǎng)口向工業(yè)以太網(wǎng)或Inernet發(fā)布信息,用戶通過顯示界面查看設備狀態(tài),,設置設備參數(shù),,實現(xiàn)遠程監(jiān)控、遠程維護,。
1.3 總體框圖
圖1 系統(tǒng)框圖
2 基于Linux的嵌入式系統(tǒng)的設計
2.1 硬件設計
考慮一般測控系統(tǒng)對嵌入式系統(tǒng)要求比較多的功能有:鍵盤接口,、顯示接口、A/D(或D/A)轉換單元,、可擴展的I/O接口,、打印機接口、與PC機通信的串行接口,、以太網(wǎng)口等,。實現(xiàn)的嵌入式系統(tǒng)硬件框圖如下:
圖2 硬件框圖
針對測控系統(tǒng)的應用,選擇Motorola的Coldfire系列的MCF5307.MCF5307是一款高性能,、低價位,、高集成度的微處理器,為嵌入式控制應用而設計,。MCF5307的處理能力達70 MIPS,,工作頻率88.47 MHz,總線頻率44.236 MHz,,為運行Linux提供硬件上的支持,,在開發(fā)板上還集成有16 M的SDRAM、2 M的FLASH,、10 baseT以太網(wǎng)接口,、RS232/RS485串口、I/O接口等,。
2.2 軟件設計
嵌入式操作系統(tǒng)是整個嵌入式系統(tǒng)的核心,。我們選擇Linux,但典型的Linux是為桌面配置的,,內(nèi)核十分龐大,,而嵌入式系統(tǒng)的RAM存儲容量很小,因此,,要把Linux操作系統(tǒng)裝入有限的內(nèi)存,,就要對它進行裁剪,在裁剪過程中涉及的主要技術有:
(1) 內(nèi)核的精簡,。標準Linux是面向PC的,,集成了許多PC需要而嵌入式系統(tǒng)并不需要的功能。對一些可獨立加上或卸下的功能塊,,可在編譯內(nèi)核時,,僅保留嵌入式系統(tǒng)所需的功能支持模塊,刪除不需要的功能,。例如,,測控系統(tǒng)要連入以太網(wǎng),就要提供對TCP/IP的支持,,編譯時加上TCP/IP棧,;而SCSI、 Floppy之類的外設在我們的嵌入式系統(tǒng)中完全沒有必要,,編譯時可去掉,。這樣,重新編譯過的內(nèi)核顯著減小,。
(2) 虛擬內(nèi)存機制的屏蔽,。經(jīng)過分析發(fā)現(xiàn),虛擬內(nèi)存是導致Linux實時性不強的原因之一,。在工業(yè)控制中一些任務要滿足一定的實時性的要求,,屏蔽內(nèi)核的虛擬內(nèi)存管理機制可以增強Linux的實時性。當要更改內(nèi)核的某項機制時,,一般不必大規(guī)模的改寫代碼,,可采用條件編譯的方法。思路是用#ifdef或 #ifndef屏蔽現(xiàn)有語句,,在#else宏編譯語句中包括自己編寫的代碼,。實現(xiàn)虛擬內(nèi)存的機制有:地址映射機制,、內(nèi)存分配和回收機制,緩存和刷新機制,、請頁機制,、交換機制、內(nèi)存共享機制,,將實現(xiàn)這些機制的數(shù)據(jù)結構和函數(shù)屏蔽或修改,,還要修改與之相關的文件。需要改動的文件主要在 /include/linux,、/mm,、/drivers/char、/fs,、/ipc/kernel,、/init目錄下。主要的改動如下:與虛存有關的主要的數(shù)據(jù)結構是vm_area_struct,,將進程的mm_struct結構中的vm_area_struct去掉,,vm_area_struct利用了vm_ops來抽象出對虛擬內(nèi)存的處理方法,屏蔽與虛擬內(nèi)存操作有關的函數(shù),。內(nèi)存映射主要由do_mmap()實現(xiàn),,改寫此函數(shù)的代碼。取消交換操作,,屏蔽用于交換的結構和函數(shù)聲明,,以及實現(xiàn)交換的代碼。取消內(nèi)核守護進程kswapd.
(3) 設備驅動程序的編寫,。確定了內(nèi)核的基本功能后,,就要為特定的設備編寫驅動程序,可按照在Linux下編寫驅動程序的規(guī)則編寫,。編寫的設備驅動程序應具有以下功能:①對設備初始化和釋放,;②把數(shù)據(jù)從內(nèi)核傳到硬件和從硬件讀取數(shù)據(jù);③讀取應用程序傳遞給設備文件的數(shù)據(jù)和回送應用程序請求的數(shù)據(jù),;④檢測和處理設備出現(xiàn)的錯誤,。
實現(xiàn)上述步驟后,一個小型的Linux 操作系統(tǒng)就構造完成了,。構造后的Linux包括進程管理,、內(nèi)存管理和文件管理,支持多任務并行,;開發(fā)基于閃存的文件系統(tǒng),,應用程序和重要數(shù)據(jù)以文件的形式被存放在閃存文件系統(tǒng)中;有完整的TCP/IP協(xié)議棧,,Linux內(nèi)建有對以太網(wǎng)控制器的支持,,可以通過以太網(wǎng)口連到工業(yè)以太網(wǎng)上,,實現(xiàn)遠程監(jiān)控。
還要將裁剪好的內(nèi)核移植到所用的目標板上,,通常移植內(nèi)核時,,首先要將內(nèi)核編譯成針對該處理器的目標代碼。而我們所用的嵌入式微處理器MCF5307 是ColdFire系列,,它有一些不同于其它CPU的地方,一些內(nèi)核程序要改寫,,涉及到編寫Linux的引導代碼和修改與體系結構相關部分的代碼,,主要是內(nèi)存管理和中斷處理部分。將Flash作為系統(tǒng)的啟動設備,,引導代碼放在Flash上,。系統(tǒng)加電后,由引導代碼進行基本的硬件初始化,,然后把內(nèi)核映象裝入內(nèi)存運行,。
對于應用程序的開發(fā),針對測控系統(tǒng)的具體應用,,利用Linux 提供API接口開發(fā)應用程序,。測控系統(tǒng)要完成多個任務,因為屏蔽了虛擬內(nèi)存機制,,所有的任務共同享有物理內(nèi)存,,存在于統(tǒng)一的線性空間中。任務中的地址為真正的物理地址,,由于不需要進行地址空間映射,,在任務切換時的上下文切換時間大大減少,提高了響應的速度,,實時性增強,。Linux采用基于優(yōu)先級的輪轉法調度策略,能夠實現(xiàn)多個任務并行,。各個任務的實時性要求不同,,可通過劃分優(yōu)先級,使實時性要求高的任務劃分為實時進程,,具有較高的優(yōu)先級,,優(yōu)先得到調度,保證一定的實時性的要求,。任務間通過信號量,、消息隊列等機制通信。
在嵌入式系統(tǒng)中軟件開發(fā)的主要模塊有:數(shù)據(jù)采集模塊,,數(shù)據(jù)處理模塊,,數(shù)據(jù)顯示模塊,,通信和數(shù)據(jù)發(fā)布模塊,故障診斷模塊,。其中故障診斷模塊實現(xiàn)實時自診斷,,在系統(tǒng)工作期間,對系統(tǒng)內(nèi)部進行部分測試,。即將診斷程序設置在嵌入式系統(tǒng)中中斷級別最低的中斷服務程序,,在不影響系統(tǒng)工作的前提下,進行實時診斷,。如發(fā)現(xiàn)故障且復診后仍有錯,,通過顯示界面顯示,并上傳給上位機,,保證系統(tǒng)的可靠性,。
在嵌入式Linux的開發(fā)中,采用主—從模式,,通過串行口或以太網(wǎng)口,,使目標板和宿主機相連。使用的是GNU的系列工具,,GNU具有免費開放的源代碼,,也為我們開發(fā)基于Linux的應用程序提供了方便。它包括一系列的開發(fā)調試工具,。主要組件有:
gcc:編譯器,,可做成交叉編譯的形式,即在宿主機上開發(fā)編譯目標機上可運行的二進制文件,;
Binutils:一些輔助工具,,包括objdump(可以反編譯二進制文件)、as(匯編編譯器),、ld(連接器)等等,;
Gdb:調試器,可使用多種交叉調試方式,,如gdbserve(使用以太網(wǎng)絡調試),。
最后,將調試好的內(nèi)核和應用程序燒錄到閃存中,。裁剪后的Linux已成經(jīng)功移植到目標平臺上,,在開發(fā)板上運行良好。經(jīng)過測試,,已滿足一般的實時性要求,。
3 結 論
我們開發(fā)的基于Linux 的嵌入式系統(tǒng)應用于測控系統(tǒng),能滿足當前工業(yè)控制領域對測控系統(tǒng)提出的要求,保證測控任務完成的實時性,、可靠性,,可連到工業(yè)以太網(wǎng)實現(xiàn)遠程監(jiān)控。其硬件,,接口采用插板的形式,,結構簡單,易于裝卸,,方便系統(tǒng)集成和維護,。軟件方面,用戶可針對具體應用作相應修改或刪除即可,,因而提高了測控系統(tǒng)的開發(fā)效率,,在工業(yè)控制領域有很好的應用前景。
參考文獻:
[1] 王學龍.嵌入式Linux系統(tǒng)設計與應用[M].北京:清華大學出版社,,2001.
[2] 鄒思鐵.嵌入式Linux設計與應用[M].北京:清華大學出版社,2002.
[3] Scott Maxwell.Linux內(nèi)核源代碼分析[M].北京:機械工業(yè)出版社,,2000.
[4] 趙敏哲.64位Linux操作系統(tǒng)與應用實例[M].北京:機械工業(yè)出版社,,2000.
[5] 馮永紅,朱善君.裁剪Linux技術分析[A].沈緒榜.2001嵌入式系統(tǒng)及單片機國際學術交流會論文集[C].北京:北京航空航天大學出版社,,2001.225-229.
[6] 劉燕英.嵌入式Linux的實現(xiàn)及應用[A].沈緒榜.2001嵌入式系統(tǒng)及單片機國際學術流會論文集[C].北京:航空航天大學出版社,,2001.230-233.
[7] 邢國良,等.基于Linux的實時操作系統(tǒng)的分析與研究[J].小型微型計算機系統(tǒng),,2001,,22(8):1018-1021.
[8] 蔣書波,等.實時操作系統(tǒng)用于嵌入式應用系統(tǒng)的設計[J].電測與儀表,,2001,,38(42):41-44.