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