劉林華, 張予祥
(上海船舶運輸科學研究所 艦船自動化系統(tǒng)事業(yè)部,上海 200135)
隨著計算機技術和微電子技術的不斷發(fā)展,嵌入式系統(tǒng)開發(fā)技術得到廣泛應用,各種性能優(yōu)良的微控制器(STM32系列MCU和LPC系列MCU)逐漸出現(xiàn)。此外,隨著主機遙控系統(tǒng)的自動化水平和各控制設備的網(wǎng)絡化、智能化程度不斷提高,傳統(tǒng)意義上的單片機已不能滿足遙控控制器的性能要求。相對于電子技術的快速發(fā)展,主推進裝置技術的發(fā)展相對緩慢,但不同船舶主推進裝置的配置有所不同(主機調(diào)速器不同、是否需接/脫排控制等),造成系統(tǒng)開發(fā)各不相同,嚴重影響著主機遙控系統(tǒng)開發(fā)的周期和產(chǎn)品的質(zhì)量。
傳統(tǒng)的開發(fā)方法是不采用任何操作系統(tǒng),僅采用主循環(huán)和中斷模式開發(fā),這類系統(tǒng)一般控制對象比較單一,控制過程比較簡單,采用操作系統(tǒng)反而會影響效率。隨著MCU硬件資源越來越豐富,程序功能越來越多樣,引入FreeRTOS嵌入式實時操作系統(tǒng)不僅能更有效、更合理地利用現(xiàn)有的中央處理器(Central Processing Unit,CPU)資源,而且能簡化應用軟件的設計,縮短應用的開發(fā)周期,保證系統(tǒng)的可靠性和實時性。
基于上述情況,本文采用LW_OOPC面向?qū)ο蟮脑O計方法,抽象并提煉出控制對象的基本屬性和行為,設計出一套基于FreeRTOS+ARM架構(gòu)的遙控控制器,增強軟件代碼的復用性,縮短系統(tǒng)開發(fā)的周期,提升產(chǎn)品的質(zhì)量。
船用主機遙控是指在駕駛室或集中控制室內(nèi)對主推進設備進行遠距離操縱,是船舶機艙自動化體系的一個重要組成部分??煽康拇弥鳈C遙控系統(tǒng)可極大地改善輪機員的工作條件,提高主機運行的可靠性和經(jīng)濟性,以及船舶航行的安全性。船用主機遙控系統(tǒng)涉及的控制內(nèi)容較多,不同的控制等級和主推進設備配置造成不同主機遙控系統(tǒng)的控制功能迥異。
遙控控制器作為主機遙控系統(tǒng)的核心部件,主要負責控制邏輯運算、控制策略實現(xiàn)和控制輸出等。表1為主機遙控控制器的基本功能,在具體實現(xiàn)時,根據(jù)主推進設備的配置和規(guī)范要求的控制等級對這些功能進行刪減。
表1 主機遙控控制器的基本功能
本文以某型船為原型設計遙控控制器,基本要求如下:
1) 主推進裝置配置為主機、齒輪箱和調(diào)距槳;
2) 調(diào)速器為電子調(diào)速器,具有后備控制功能;
3) 控制位置為駕駛室、集中控制室和機旁;
4) 需實現(xiàn)表1中給出的接/脫排控制以外的所有控制功能。
為實現(xiàn)遙控控制器控制功能,采用ST公司的STM32f107作為主控芯片。STM32f107是STM32互聯(lián)型系列微控制器中的一款性能較優(yōu)的產(chǎn)品,采用32位ARM Cotex-M3內(nèi)核,72 MHz運行頻率,具有快速可嵌套中斷,同時集成有各種高性能工業(yè)標準接口和外設(2個12高速AD、2個12位DA、2個I2C接口、3個SPI接口和8個定時器等),滿足遙控控制器實時控制性能要求。遙控控制器由控制核心板、母線板和控制擴展板組成,其中:母線板為控制核心板和控制擴展板提供物理連接;控制擴展板提供擴展IO接口,對外采用D型插頭連接,提升控制器的可靠性和環(huán)境適應性。遙控控制器核心板硬件原理圖見圖1,該控制器可提供4路頻率信號采集通道、8路模擬量輸入信號采集通道、4路4~20 mA電流輸出通道、24路開關量采集通道、4路CAN總線通道和2路兩線RS485總線通道。
圖1 遙控控制器核心板硬件原理圖
軟件設計主要分為3部分:
1) 在STM32f107上實現(xiàn)FreeRTOS的移植;
2) 分析控制對象的屬性和行為,利用LW_OOPC宏技術對各控制對象類進行設計;
3) 在嵌入式實時系統(tǒng)FreeRTOS中對各任務功能進行組織劃分設計,實現(xiàn)系統(tǒng)功能。
FreeRTOS作為一款輕量級操作系統(tǒng),提供有任務管理、時間管理、信號量管理、消息隊列和內(nèi)存管理等功能,具有源碼公開、可裁減、可移植和調(diào)度策略靈活等特點。該移植主要針對STM32f107系列芯片,采用的編譯軟件是keil4。移植的主要內(nèi)容集中在portmacro.h和port.c 2個文件中,其中:portmacro.h文件包含與編譯器相關的數(shù)據(jù)類型的定義、堆棧的增長方向、時鐘節(jié)拍的定義、相關的宏定義和函數(shù)聲明;port.c文件包含移植的相關函數(shù)和匯編函數(shù),主要包括堆棧的初始化函數(shù)、系統(tǒng)心跳管理函數(shù)、任務調(diào)度器的啟動函數(shù)、任務切換函數(shù)、臨界區(qū)的進入與退出函數(shù)和中斷設置函數(shù)等。
在面向?qū)ο蟮乃季S下,軟件由一群有智慧、善傳遞信息的對象組成。遙控控制器的控制對象是主機(含調(diào)速器)和調(diào)距槳,并與安保控制器進行信息交互,需抽象出以下類,并分析其屬性和行為(見表2)。LW_OOPC的本質(zhì)是運用C語言宏技巧,巧妙地利用函數(shù)指針和struct結(jié)構(gòu)實現(xiàn)面向?qū)ο蟮幕炯夹g。利用LW_OOPC宏技術進行系統(tǒng)分析設計,可使UML模型與C程序緊密對應,進而提高C程序的質(zhì)量。
表2 遙控控制器控制對象
圖2 遙控控制器程序任務關系
遙控控制器采用FreeRTOS嵌入式實時操作系統(tǒng)架構(gòu)設計開發(fā)。為保證應用軟件多任務處理的實時性和可靠性,需合理地將程序的各功能模塊劃分為不同任務,同時使用FreeRTOS消息隊列和互斥信號量機制設計各任務間的通信接口,實現(xiàn)任務間的通信。遙控控制器程序任務關系和任務分配分別見圖2和表3。
表3 遙控控制器程序任務分配
主程序任務作為控制程序的核心,接收輸入處理任務處理的操作指令和設備狀態(tài)參數(shù),經(jīng)過內(nèi)部邏輯運算和優(yōu)化處理,由輸出任務輸出指令對各設備進行控制。為合理組織主程序任務程序結(jié)構(gòu),保證主機、調(diào)距槳和安保控制器對象有序運行,設計出controller對象對各對象進行協(xié)調(diào)指揮,以構(gòu)成層級式控制架構(gòu)。controller類根據(jù)操作人員的指令和設備的運行狀態(tài)向各對象發(fā)出指令信號。
下面對遙控控制器程序中主程序任務的設計與實現(xiàn)進行討論。通過UML類圖設計、接口分析和狀態(tài)機分析等技術對各類實現(xiàn)功能和接口進行分析實現(xiàn),并利用cotroller類進行組裝運行。輸入輸出任務和CAN通信任務等仍采用面向過程的結(jié)構(gòu)化程序設計,這里不作展開分析。
賦予對象人性是面向?qū)ο蟮年P鍵步驟。軟件由一群有智慧、善傳遞信息的對象組成,這些對象擔負著主動提供服務的責任,支持整個軟件系統(tǒng)的功能。一旦開發(fā)人員分析出對象的屬性和行為并確定類,即可根據(jù)類生成軟件對象。遙控控制器程序需實現(xiàn)的類見圖3。
圖3 遙控控制器程序需實現(xiàn)的類
在控制軟件運行過程中,各對象會在不同狀態(tài)之間轉(zhuǎn)移。例如,主機可分為停機、啟動過程、運行和停機過程等4個狀態(tài)(見圖4)。采用State模式設計,將每個條件分支放入一個獨立的類中(見圖5),由此可根據(jù)對象自身的情況將對象的狀態(tài)作為一個對象,且該對象可不依賴其他對象獨立變化,提高系統(tǒng)設計的彈性。
圖4 主機狀態(tài)圖
圖5 主機狀態(tài)類圖
“信息傳遞”作為對象之間互相溝通的管道,在本質(zhì)上是通過函數(shù)調(diào)用實現(xiàn)的,只是函數(shù)是被對象封裝起來的。當對象A傳遞信息給對象B時,意味著對象A中的某個函數(shù)調(diào)用對象B中的某個或多個函數(shù),具體調(diào)用對象B中的哪些函數(shù),由對象B根據(jù)實現(xiàn)功能內(nèi)部判定。以controller、engine和governor對象為例分析對象間的“信息傳遞”見圖6。
圖6 controller、engine和governor對象間的“信息傳遞”
主程序任務是控制器軟件的核心,實現(xiàn)對各控制對象控制功能的邏輯運算。采用LW_OOPC宏技術對類進行封裝,使主程序代碼更簡潔,邏輯更清晰(見圖7)。各類在不同的頭文件和C文件中實現(xiàn),功能的變更僅需通過更改各類的子函數(shù)來實現(xiàn),涉及面小,更易維護。
圖7 主程序任務代碼
本文采用LW_OOPC面向?qū)ο蟮木幊趟悸?基于FreeRTOS+ARM架構(gòu)設計出一套船舶主機遙控的遙控控制器。該遙控控制器已在某學校定制的主機遙控系統(tǒng)培訓系統(tǒng)中得到實踐運用,運行狀態(tài)穩(wěn)定。對于后續(xù)的系統(tǒng)開發(fā)而言,可有針對性地設計實現(xiàn)控制對象類,提高軟件的復用性和可靠性。本文在LW_OOPC框架的基礎上對實現(xiàn)該遙控控制軟件的封裝進行了初步探索,下一步將利用面向?qū)ο蟮木幊坛S玫脑O計方法對控制軟件進行深化和改良。