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