李向陽,劉顯勤,張向文
(北京航天發(fā)射技術(shù)研究所,北京,100076)
應(yīng)用有限狀態(tài)機的實時操作系統(tǒng)平臺流程控制軟件實現(xiàn)技術(shù)
李向陽,劉顯勤,張向文
(北京航天發(fā)射技術(shù)研究所,北京,100076)
在分析嵌入式實時操作系統(tǒng)(Real-Time Operating System,RTOS)平臺與嵌入式無操作系統(tǒng)平臺流程控制軟件架構(gòu)不統(tǒng)一、無法實現(xiàn)代碼重用的基礎(chǔ)上,提出一種應(yīng)用有限狀態(tài)機的實時操作系統(tǒng)流程控制軟件架構(gòu),解決了架構(gòu)不統(tǒng)一導(dǎo)致代碼無法重用的問題,并經(jīng)過實際應(yīng)用驗證,證明架構(gòu)可行。
實時操作系統(tǒng);有限狀態(tài)機;軟件架構(gòu);代碼重用
流程控制軟件是武器發(fā)射平臺的重要組成部分,用于實現(xiàn)武器發(fā)射平臺的展開、撤收等流程動作的控制;同時通過串口、CAN總線、以太網(wǎng)等通信方式實現(xiàn)與其他系統(tǒng)的通信;通過串口、CAN總線、以太網(wǎng)等接口實現(xiàn)參數(shù)的配置查詢等功能。
流程控制軟件要求具有實時性、確定性。因此,運行的平臺一般采用嵌入式無操作系統(tǒng)平臺或嵌入式實時操作系統(tǒng)平臺,比如 VxWorks。為了實現(xiàn)多個任務(wù)并行工作,嵌入式無操作系統(tǒng)平臺的流程控制軟件一般采用有限狀態(tài)機的架構(gòu)方式實現(xiàn),而實時操作系統(tǒng)平臺具有特有的多任務(wù)并行工作的優(yōu)勢,一般通過采用多線程的架構(gòu)方式實現(xiàn)。
隨著武器型號的發(fā)展,型號軟件的研制周期越來越短,而流程控制軟件需要充分的測試驗證才能確保軟件的可靠性。因此,對軟件的通用化、代碼的重用率要求越來越高。目前,現(xiàn)有型號采用嵌入無操作系統(tǒng)平臺實現(xiàn)的流程控制軟件數(shù)量多,已經(jīng)實現(xiàn)架構(gòu)統(tǒng)一,并形成了一定數(shù)量的重用代碼,使得采用嵌入式無操作系統(tǒng)平臺的流程控制軟件在開發(fā)效率、可靠性、后期維護性等方面得到了較大提高,同時也大大減少了軟件調(diào)試和試驗的時間,降低了研制成本。而采用嵌入式實時操作系統(tǒng)平臺實現(xiàn)的流程控制軟件數(shù)量少,可重用代碼相應(yīng)也少。
采用有限狀態(tài)機架構(gòu)方式實現(xiàn)的流程控制模塊與采用多線程架構(gòu)方式實現(xiàn)的流程控制模塊一般無法實現(xiàn)通用,這給軟件重用帶來困難,增加了流程控制軟件研制投入,降低了流程控制軟件的可靠性。同時,流程控制軟件中需要流程急停及流程急停繼續(xù)、流程急停退出操作,采用有限狀態(tài)機的架構(gòu)方式實現(xiàn)時已經(jīng)將各個工作任務(wù)進行了一定粒度的劃分,只要控制狀態(tài)跳轉(zhuǎn)即可;而采用多線程的架構(gòu)方式實現(xiàn)流程急停操作時需要采用線程掛起的方式,流程急停繼續(xù)操作需要采用線程恢復(fù)的方式,流程急停退出操作需要采用線程重啟的方式。這種在軟件正常工作中對線程掛起、恢復(fù)及重啟操作屬于非常規(guī)的使用方式,有可能對軟件系統(tǒng)造成不可預(yù)知的影響。
本文在對有限狀態(tài)機架構(gòu)方式及多線程架構(gòu)方式的流程控制軟件分析的基礎(chǔ)上,提出了一種有限狀態(tài)機和實時操作系統(tǒng)相結(jié)合的流程控制軟件實現(xiàn)技術(shù)。
嵌入式無操作系統(tǒng)平臺的有限狀態(tài)機方式的流程控制軟件采用主循環(huán)和一到多個中斷組成的前后臺系統(tǒng),主循環(huán)和中斷之間通過共享資源實現(xiàn)通信。嵌入式無操作系統(tǒng)平臺應(yīng)用層結(jié)構(gòu)示意如圖1所示。
中斷用于實現(xiàn)硬件處理、定時處理等工作,其他流程控制模塊(或配置查詢功能模塊、故障處理功能模塊)、通信處理功能模塊、數(shù)據(jù)處理功能模塊、硬件處理功能模塊、網(wǎng)關(guān)處理功能模塊的并行處理工作采用有限狀態(tài)機的方式實現(xiàn),由主循環(huán)負責(zé)調(diào)度。
采用有限狀態(tài)機架構(gòu)方式實現(xiàn)的流程控制軟件是將各功能模塊的功能進行一定粒度的劃分,即劃分出來的工作片段占用毫秒級及以下(不超過1 ms)的處理時間,多個工作片段共同完成該功能,并且每個工作片段完成后能夠回到主循環(huán),不影響其他功能模塊工作的實時性。有限狀態(tài)機以“事件驅(qū)動”方式工作[1,2],在確定轉(zhuǎn)移條件發(fā)生時,做出相應(yīng)動作,變更工作狀態(tài)。以流程控制為例的狀態(tài)轉(zhuǎn)移如圖2所示。流程控制共分為8個狀態(tài)。軟件上電后首先進入初始狀態(tài),接收到啟動流程指令后轉(zhuǎn)入流程進行處理狀態(tài),如果流程正常執(zhí)行結(jié)束則轉(zhuǎn)入流程正常結(jié)束狀態(tài);如果流程中產(chǎn)生故障則轉(zhuǎn)入流程急停處理狀態(tài),在流程急停處理完成后進入流程暫停狀態(tài),在流程暫停狀態(tài)接收到急停退出指令則轉(zhuǎn)入流程退出處理狀態(tài),處理完成進入流程非正常結(jié)束狀態(tài);在流程暫停狀態(tài)接收到忽略故障指令則轉(zhuǎn)入流程繼續(xù)處理狀態(tài),處理完成進入流程進行處理狀態(tài),流程結(jié)束轉(zhuǎn)入流程正常結(jié)束狀態(tài);在流程正常結(jié)束狀態(tài)或流出非正常結(jié)束狀態(tài)接收到啟動流程指令都可繼續(xù)進行流程控制。
主循環(huán)的調(diào)度方式如圖 3所示。主循環(huán)負責(zé)循環(huán) 調(diào)用所有外部模塊和軟件自身的功能模塊。
采用有限狀態(tài)機的方式實現(xiàn)的流程控制軟件通過有限狀態(tài)機來代替操作系統(tǒng)對多個并行工作進行調(diào)度,能夠滿足流程控制軟件實時性和確定性的要求。
嵌入式實時操作系統(tǒng)平臺應(yīng)用層軟件采用多線程的架構(gòu)方式實現(xiàn),線程間采用消息隊列、信號量、共享資源等實現(xiàn)通信[3]。嵌入式實時操作系統(tǒng)平臺應(yīng)用層結(jié)構(gòu)示意如圖4所示。
流程控制功能模塊、配置查詢功能模塊、故障處理功能模塊、通信處理功能模塊、數(shù)據(jù)處理功能模塊、硬件處理功能模塊、網(wǎng)關(guān)處理功能模塊等每個模塊采用一個或多個線程實現(xiàn)。以某流程控制軟件為例,其通過流程處理主線程、流程處理從線程、硬急停線程、急停處理線程、故障處理線程、配置查詢線程、CAN數(shù)據(jù)處理線程、CAN數(shù)據(jù)發(fā)送線程、以太網(wǎng)接收線程、以太網(wǎng)發(fā)送線程[4~8]共同實現(xiàn),流程處理軟件啟動及線程工作方式如圖5所示。
線程之間通過信號量、消息隊列及共享資源實現(xiàn)信息交換。其中流程處理主線程實現(xiàn)流程控制的主任務(wù),流程處理從線程實現(xiàn)與流程控制主任務(wù)并行的任務(wù),如果有多于2個并行的流程控制任務(wù)還要增加更多的流程處理線程。當(dāng)硬急停線程采集到急停命令后掛起流程處理主線程、從線程,并執(zhí)行相應(yīng)的急停處理工作。當(dāng)急停處理線程通過CAN總線數(shù)據(jù)處理線程接收到流程急停轉(zhuǎn)移指令后恢復(fù)流程處理主、從線程,接收到流程急停退出指令后重啟流程處理主、從線程。嵌入式實時操作系統(tǒng)平臺流程控制軟件實現(xiàn)如圖6所示。
采用上述架構(gòu)實現(xiàn)的流程控制軟件,一個線程負責(zé)連續(xù)完成一個工作,不完成一個固定工作相關(guān)函數(shù)不退出。因此,在嵌入式無操作系統(tǒng)平臺上實現(xiàn)的流程控制軟件無法完全應(yīng)用在多線程架構(gòu)下的流程控制軟件;同樣,采用這種方式實現(xiàn)的流程控制軟件也無法應(yīng)用在嵌入式無操作系統(tǒng)平臺上。如果能將在嵌入式無操作系統(tǒng)平臺上采用的有限狀態(tài)機架構(gòu)方式實現(xiàn)的流程控制軟件的方法也應(yīng)用在實時操作系統(tǒng)平臺上,則能解決軟件重用的問題,并能夠避免采用線程掛起、線程恢復(fù)及線程重啟等操作,確保軟件運行的可靠性。
3.1 控制軟件實現(xiàn)
將原有的嵌入式實時操作系統(tǒng)平臺流程控制軟件直接與外設(shè)交互的工作采用單獨的線程實現(xiàn),其他流程處理主線程、流程處理從線程、急停處理線程、故障處理線程、配置查詢線程合并為一個工作處理線程,如圖7、圖8所示。工作處理線程采用有限狀態(tài)機的方式工作,按嵌入式無操作系統(tǒng)平臺方式實現(xiàn)流程控制、配置查詢、故障處理、數(shù)據(jù)處理等工作。工作處理線程工作方式與嵌入式無操作系統(tǒng)平臺的工作方式相同,如圖8所示。
3.2 控制軟件驗證
某型號的流程控制軟件需要運行在龍芯+VxWorks操作系統(tǒng)平臺(嵌入式實時操作系統(tǒng)平臺),其實現(xiàn)的流程控制、配置查詢等功能與另外一個型號運行在XC164處理器平臺(嵌入式無操作系統(tǒng)平臺)的流程控制軟件基本一致。
因此,該軟件研制時通過采用有限狀態(tài)機的嵌入式實時操作系統(tǒng)平臺架構(gòu)方式,將另外一個型號的嵌入式無操作系統(tǒng)平臺流程控制軟件移植到嵌入式實時操作系統(tǒng)平臺,其研制周期由原來的3~4個月縮短為1.5個月。代碼重用情況如表1所示。除網(wǎng)關(guān)處理功能模塊原有的軟件不涉及,硬件處理功能模塊由于運行平臺不同而導(dǎo)致與硬件處理部分差異較大外,其他功能模塊重用率平均達到89.2%。
表1 代碼重用情況統(tǒng)計
采用有限狀態(tài)機的嵌入式實時操作系統(tǒng)平臺架構(gòu)方式加重用嵌入式無操作系統(tǒng)平臺流程控制軟件實現(xiàn)的流程控制軟件,經(jīng)過了各項試驗考核,軟件運行可靠。
本文提出的應(yīng)用有限狀態(tài)機的實時操作系統(tǒng)平臺流程控制軟件架構(gòu)通過應(yīng)用具體型號流程控制軟件研制,證明此種架構(gòu)的可行性。采用此種架構(gòu)實現(xiàn)的流程控制軟件提高了軟件的可重用程度及開發(fā)效率,降低了研制成本,提高了軟件的可驗證程度。同時,采用此種架構(gòu)實現(xiàn)的流程控制軟件規(guī)避了線程掛起、線程恢復(fù)及線程重啟等對操作系統(tǒng)線程的非常規(guī)操作,進一步提高了軟件的可靠性。
[1] 單茂華. 基于有限狀態(tài)機的絕緣在線監(jiān)測裝置軟件模型與實現(xiàn)[J]. 測控技術(shù), 2007, 26(9): 79-81.
[2] 魏丙楠. 有限狀態(tài)機在嵌入式軟件中的應(yīng)用[J]. 計算機與信息技術(shù), 2005(10): 59-60.
[3] 王金剛. VxWorks程序員指南[M]. 北京: 清華大學(xué)出版社, 2003.
[4] 孫健. VxWorks下幾種任務(wù)設(shè)計模型的分析與實現(xiàn)[J]. 數(shù)字技術(shù)與應(yīng)用2015(1): 2-3.
[5] 李勇華. 嵌入式操作系統(tǒng) VxWorks的實時性能測試分析[J]. 電子技術(shù)與軟件工程, 2014(2): 1-2.
[6] 饒冬. 基于 Linux的航天地面站測控軟件架構(gòu)設(shè)計[J]. 遙測遙控, 2015(4): 31-36.
[7] 吳慧婷. 一種高可靠性嵌入式軟件架構(gòu)設(shè)計[J]. 軟件導(dǎo)刊, 2015(10): 1-2.
[8] 劉玉寶. 基于嵌入式軟件架構(gòu)的可靠性分析方法. 科技資訊, 2014 (8):1-2.
Software Realization of Flow-control Software on RTOS Base on FSM
Li Xiang-yang,Liu Xian-qin,Zhang Xiang-wen
(Beijing Institue of Space Lauch Technology, Beijing, 100076)
Software code can not reuse because difference of software architecture between embendded RTOS and embendded without OS. This article presents a software architecture of RTOS base on Finite State Machine(FSM). This method resolves problem of code reuse, practical application proves this architecture.
Real-time operating system; Finite state machine; Software architecture; Code reuse
TP311.1
A
1004-7182(2017)02-0080-07
10.7654/j.issn.1004-7182.20170218
2016-07-31;
2016-11-03
李向陽(1977-),男,高級工程師,主要研究方向為電液系統(tǒng)控制