基于嵌入式實時操作系統(tǒng)的現(xiàn)場控制系統(tǒng)
1 引言
今天,隨著控制、計算機、通訊、網(wǎng)絡等技術(shù)的發(fā)展,信息交換領(lǐng)域正在迅速覆蓋從工廠的現(xiàn)場設備層到控制、管理的各個層次?;谝蕴W(wǎng)的工業(yè)控制網(wǎng)絡具有數(shù)據(jù)傳輸率高、可靠性好、易維護、可遠程傳輸、互操作性好等優(yōu)點。隨著互聯(lián)網(wǎng)技術(shù)的普及與推廣,以及網(wǎng)絡通信速率的提高、交換技術(shù)的發(fā)展,使得它受到了全球的擁護和軟硬件支持,并得到了迅速發(fā)展和普及。本文設計和開發(fā)了具有工業(yè)以太網(wǎng)功能的現(xiàn)場控制設備。
2 嵌入式操作系統(tǒng)的選擇
實時嵌入式操作系統(tǒng)的種類繁多,大體上可以分為兩種:商用型和免費型的。商用型的實時操作系統(tǒng)功能穩(wěn)定、可靠、有完善的技術(shù)支持和售后服務,但往往價格昂貴,如QNX和Windows CE等。免費型的實時操作系統(tǒng)在價格方面具有優(yōu)勢,目前主要有Linux和μC/OS-II。由于商用實時操作系統(tǒng)的成本太高,采用免費軟件是最好的選擇,因此嵌入式實時操作系統(tǒng)最終選擇了μC/OS-II。
3 μC/OS-Ⅱ下多任務程序的設計
程序的一開始通過一些宏定義對與μC/OS-Ⅱ運行環(huán)境相關(guān)的一些配置參數(shù)、服務器的IP地址、網(wǎng)關(guān)以及子網(wǎng)掩碼等局域網(wǎng)參數(shù)做了設置,主程序中負責硬件初始化,初始化實時多任務操作統(tǒng),初始化TCP/IP協(xié)議棧,建立任務,為其分配優(yōu)先級,激活各任務將其置為就緒態(tài)。然后在系統(tǒng)內(nèi)核RTOS的調(diào)度下,各個任務按照優(yōu)先級的不同依次投入運行,任務運行結(jié)構(gòu)如圖1所示。
圖1 任務運行調(diào)度示意圖
3.1 故障監(jiān)控任務
監(jiān)控任務用來監(jiān)視當前程序運行狀態(tài),它的優(yōu)先級為最高,它判斷前一個運行任務的運行狀態(tài),如果有錯誤發(fā)生就采取相應的糾錯方案,否則退回到等待狀態(tài)。被監(jiān)視任務正常運行時其執(zhí)行時間是可預估的,被監(jiān)視任務在其即將運行完畢時向監(jiān)視任務發(fā)送消息說明自身運行正常。被監(jiān)視任務運行時,監(jiān)控任務處于等待態(tài),等待被監(jiān)視任務給它發(fā)送消息,等待時間被設定為預計的任務正常運行所需的最大時間。若等待時間內(nèi)監(jiān)視任務收到消息,則認為發(fā)送消息的任務運行正常,依照各任務執(zhí)行順序的先后下一任務開始運行,監(jiān)視任務等待下一任務發(fā)送的消息。若等待時間已過,監(jiān)控任務仍未收到消息,則系統(tǒng)的時間管理函數(shù)將強行把監(jiān)視任務設置為就緒態(tài)。因為監(jiān)控任務的優(yōu)先權(quán)是最高的,監(jiān)控任務將首先投入運行,它將搶占對CPU的控制權(quán)并采取相應的糾錯方案,進行相應的故障處理,從而避免死機的發(fā)生。任務實現(xiàn)的流程圖如圖2所示。
圖2 故障監(jiān)控任務流程圖[!--empirenews.page--]
3.2 模擬量輸入輸出與數(shù)字量處理任務
模擬量輸入輸出任務屬于周期性執(zhí)行的任務。它包括幾個組成部分:模擬信號量的輸入,控制算法的運算,產(chǎn)生控制輸出。任務首先從物理通道讀取經(jīng)過A/D轉(zhuǎn)換后的傳感器信號,對其進行平滑濾波、工程單位轉(zhuǎn)換和報警檢測后與控制給定值進行比較,其誤差經(jīng)過內(nèi)置的PID控制功能塊運算后,得到相應的控制量,此控制量經(jīng)過工程單位轉(zhuǎn)換后直接送給D/A轉(zhuǎn)換輸出給現(xiàn)場執(zhí)行機構(gòu),控制其輸出,從而實現(xiàn)了現(xiàn)場化的閉環(huán)控制。
數(shù)字量指的是變量的輸入或輸出值只能是0或者1這兩種狀態(tài)中的一種。與模擬量輸入輸出任務相同,數(shù)字量處理任務也屬于周期性執(zhí)行的任務,它負責讀取現(xiàn)場開關(guān)量狀態(tài)并完成對離散輸出的控制。相對來說讀取數(shù)字量輸入是比較簡單的任務,對數(shù)字量的基本操作,就是微處理器的相應的端口進行讀寫。比較復雜的是對于脈沖累計型的輸入信號和要求以預定義的一定頻率轉(zhuǎn)換輸出狀態(tài)的輸出信號,在嵌入式實時操作系統(tǒng)下可以通過設定任務的執(zhí)行間隔來得到簡化
3.3 Web Server守護任務
服務器功能是通過Web Server守護任務來實現(xiàn),它的服務是被動的,需要用戶對它進行訪問,然后響應用戶的請求。系統(tǒng)通過監(jiān)聽來自客戶機的連接請求,一旦監(jiān)聽到連接建立請求并建立連接后,接收來自客戶端的數(shù)據(jù),并根據(jù)相應的命令返回所請求的頁面作為響應。任務實現(xiàn)的流程圖如圖3所示。
圖3 Web Server守護任務流程圖
3.4 通訊任務
網(wǎng)絡通信任務是基于C/S模式的,即客戶/服務器模式?,F(xiàn)場設備作為服務方,它在等待客戶的請求,提供數(shù)據(jù)和信息,客戶方是控制方,它可以運行于工業(yè)現(xiàn)場的同等現(xiàn)場設備,也可以是遠程瀏覽器,客戶方提出請求,對應著雙方約定好的命令,現(xiàn)場設備在驗證命令后,開始根據(jù)不同的命令字發(fā)送相關(guān)數(shù)據(jù)或者修改本地參數(shù)變量。通訊任務主要完成兩方面的任務,一方面考慮到工業(yè)現(xiàn)場中,不同的控制節(jié)點之間有相互數(shù)據(jù)交換的需求,另一方面用于響應客戶端瀏覽器中嵌入的applet通過Socket連接向服務器請求實時數(shù)據(jù)的請求,二者的區(qū)別在于通過不同的通信端口向服務器請求數(shù)據(jù)。
通訊任務主要通過Socket編程實現(xiàn),現(xiàn)場設備控制器和現(xiàn)場設備之間的通信采用TCP協(xié)議,通信端口選擇1000;而瀏覽器內(nèi)嵌的applet與服務器的通訊則選擇2000端口。應用于工業(yè)現(xiàn)場的程序應該是“健壯”的,然而在實際中,已經(jīng)打開的TCP Socket連接隨時可能會中斷,原因是多方面的,可能是網(wǎng)絡問題引起的連接超時,或者是接收端發(fā)出了RST重置標識或放棄連接等等。因此在應用程序中設計了一個狀態(tài)機檢測機制,隨時檢測TCP Socket上的連接狀態(tài),根據(jù)當前連接的不同狀態(tài)采取相應的處理方法,這樣就增強了程序的“健壯性”。程序中先后對兩個端口的Socket連接進行監(jiān)視并根據(jù)其不同狀態(tài)轉(zhuǎn)入不同條件下處理,由于對兩個端口的操作原理基本相同,區(qū)別在于Socket連接建立后,自定義的通信內(nèi)容的不同所引起的服務器對其響應的不同。[!--empirenews.page--]
3.5 電子郵件服務任務
電子郵件服務通常情況下處于休眠狀態(tài)。當有報警發(fā)生,由監(jiān)控任務將其投入運行,一旦執(zhí)行完畢,自動刪除所在任務。通過電子郵件,系統(tǒng)可可以主動地發(fā)送信息。守護任務通常處于休眠狀態(tài),只有當?shù)竭_系統(tǒng)發(fā)送日志的時間或者系統(tǒng)異常時,由相應的任務啟動。在系統(tǒng)正常的情況下,定時向企業(yè)數(shù)據(jù)庫發(fā)送系統(tǒng)運行日志。當有系統(tǒng)異常發(fā)生時,守護任務通過Internet向系統(tǒng)管理和維護人員發(fā)送E-mail報警,通知其對系統(tǒng)進行維護。任務實現(xiàn)的流程圖如圖4所示。
圖4 電子郵件服務任務流程圖
4 嵌入式Web Server中服務器與客戶端交互技術(shù)的實現(xiàn)
嵌入式Web Server功能塊主要是通過CGI程序來獲取用戶的請求、查詢條件并利用應用程序為其提供后臺服務,結(jié)果使用HTML方式描述,并直接回送到客戶端的瀏覽器。CGI是Web服務器在調(diào)用外部程序時的接口規(guī)范協(xié)議,它規(guī)定了一套標準的參數(shù)格式和環(huán)境變量,擴展Web服務器的功能.使之能夠執(zhí)行一些Web服務器本身不能完成的任務,如與各類應用服務器通訊、訪問數(shù)據(jù)庫等。這里我們通過CGI和HTML Form機制可以從瀏覽器中得到用戶組態(tài)和控制輸出等簡單操作的輸入信息。作為Web服務器外部進程運行的CGI程序與Web服務器之間的通訊屬于進程的通信,開銷大,速度低。當有多份并發(fā)的同樣請求時,必須為每個請求建立一個進程;若Web服務器將重復收到多個同樣的請求,必須不斷重復準備地址空間、建立運行進程、回收空間、撤銷進程的過程。因此與當前流行的ASP、JSP和PHP方式相比,CGI的方式的進程本質(zhì)上效率不高。但是Dynamic C只支持CGI接口,而且從工業(yè)控制的實際情況出發(fā),在工業(yè)以太網(wǎng)內(nèi)部對于現(xiàn)場設備的訪問與商用Web服務器不同,不會有太量請求同時并發(fā)執(zhí)行的情況,因此CGI完全可以滿足需要
工業(yè)控制經(jīng)常需要以動態(tài)曲線形式顯示現(xiàn)場的各種數(shù)據(jù),公共網(wǎng)關(guān)接口CGI雖然能夠提供客戶端瀏覽器與嵌入式Web服務器間的信息交換,但CGI只能為數(shù)據(jù)的傳輸提供通道、進行處理,而不具有繪制圖型的功能;而瀏覽器頁面描述語言HTML也由于其本身的局限性,只能提供靜態(tài)的畫面。為此瀏覽器端程序使用了Java Applet技術(shù),程序功能是定時向現(xiàn)場設備發(fā)送TCP連接請求,并利用所獲取的數(shù)據(jù)在瀏覽器網(wǎng)頁上繪制動態(tài)曲線,目的是在客戶端實現(xiàn)友好的交互式顯示模式并提供實時數(shù)據(jù)。
本文作者創(chuàng)新點:
本文深入研究了在嵌入式實時操作系統(tǒng)環(huán)境下控制軟件的開發(fā),通過對現(xiàn)場設備軟件結(jié)構(gòu)的分析,合理地對控制軟件進行任務劃分,使之成功的運行于嵌入式實時操作系統(tǒng)μC/OS-II上,并根據(jù)實時調(diào)度算法對多個任務進行統(tǒng)一管理和調(diào)度。