《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 一種使用MATLAB/Simulink的Arduino模型化開發(fā)方法
NI-LabVIEW 2025
一種使用MATLAB/Simulink的Arduino模型化開發(fā)方法
2017年電子技術應用第6期
吳 姣,郝玉鍇,徐 寧,李向東
中航工業(yè)西安航空計算技術研究所,陜西 西安710115
摘要: 針對在測量和控制領域廣泛使用的開源的低成本軟硬件平臺Arduino,研究了其使用MATLAB/Simulink軟件進行模型化軟件開發(fā)的方法和工作流程;進行了Arduino模型化開發(fā)實例分析,實現(xiàn)了模型設計、模型調(diào)試、自動代碼生成、自動下載運行以及在線調(diào)試等功能;進行了生成代碼分析和協(xié)議符合性檢查,探索了完整的Arduino模型化開發(fā)方法;驗證了使用MATLAB/Simulink進行Arduino模型化開發(fā)的可行性、便捷性以及對高安全協(xié)議的符合性。
中圖分類號: TP311
文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2017.06.015
中文引用格式: 吳姣,郝玉鍇,徐寧,等. 一種使用MATLAB/Simulink的Arduino模型化開發(fā)方法[J].電子技術應用,2017,43(6):60-63.
英文引用格式: Wu Jiao,Hao Yukai,Xu Ning,et al. An Arduino module-based development method using MATLAB/Simulink[J].Application of Electronic Technique,2017,43(6):60-63.
An Arduino module-based development method using MATLAB/Simulink
Wu Jiao,Hao Yukai,Xu Ning,Li Xiangdong
AVIC Xi′an Aeronautic Computing Technique Research Institue,Xi′an 710115,China
Abstract: Based on the Arduino platform, an open source, low-cost hardware and software platform which is widely used in the measurement and control fields, the software development methods and workflows based on model are investigated in use of MATLAB/Simulink. Meanwhile, the examples of Arduino model development are analyzed, finally it completes the model design, model testing, automated code generation, automatically download and run, online debugging and so on, explores the full Arduino modeling method development, verifies Arduino model development feasibility and convenience using MATLAB/Simulink.
Key words : module-based software development;DO-178B/C;MATLAB/Simulink;Arduino

0 引言

    基于模型的軟件開發(fā)(Module-Based Software Development,MDB)是一種軟件開發(fā)的理念和方法[1],其原則是使用具有完善定義和支撐工具的可視化建模語言在系統(tǒng)工程的層級構建系統(tǒng)模型作為設計的基礎,通過對模型的不斷細化和測試來進行系統(tǒng)設計和驗證,在此過程中持續(xù)消除其中的錯誤和缺陷,以保障系統(tǒng)設計的正確性和對設計需求的全部覆蓋[2]。該方法可有效地縮短開發(fā)時間,提高開發(fā)效率,特別適合航空航天等高安全要求領域,如F/A-22和“好奇”號火星車都使用了基于模型的設計和開發(fā)方法。

    MATLAB是由MathWorks公司發(fā)布的面對科學計算、可視化以及交互式程序設計的高性能計算環(huán)境。

    Simulink是MATLAB最重要的組件之一,它提供一個動態(tài)系統(tǒng)建模、仿真和綜合分析的集成環(huán)境。

    Arduino是一個開放源代碼的軟硬件平臺,具有使用類似Java的Processing/Wiring開發(fā)環(huán)境[3-4]。

    本文研究了基于模型的軟件開發(fā)特點和在高安全軟件開發(fā)領域主要工作流程,基于MATLAB/Simulink軟件平臺進行Arduino模型化開發(fā)實例分析,實現(xiàn)了模型設計、模型調(diào)試、自動代碼生成、自動下載運行以及在線調(diào)試等功能,進行Arduino的模型化開發(fā)方法研究和分析。

1 基于模型的軟件開發(fā)

    基于模型的軟件開發(fā)使用了模型設計的工作流程和開發(fā)與測試相結合的軟件開發(fā)平臺,使得系統(tǒng)設計和驗證過程相統(tǒng)一,減少了開發(fā)成本,縮短了開發(fā)周期,降低了軟件缺陷率[5]。在基于模型的軟件開發(fā)過程中,系統(tǒng)模型是設計的基礎,需求分析、設計實現(xiàn)和測試驗證的過程都是圍繞系統(tǒng)模型進行的。模型在整個設計實現(xiàn)的過程中不斷被細化、分解和復用,模型的測試和驗證配合實際實現(xiàn)同步進行,產(chǎn)品的缺陷隨著開發(fā)過程的進行不斷地暴露和解決,避免了實現(xiàn)完成后測試發(fā)現(xiàn)問題再進行更改的現(xiàn)狀,同時自動代碼生成有效地減少了人為引入錯誤的可能,自動化的驗證和確認使測試工程師能夠開發(fā)完整的、基于需求并可在自動產(chǎn)生的代碼上重用的測試用例。

1.1 與傳統(tǒng)軟件開發(fā)方法的對比

    傳統(tǒng)的軟件開發(fā)流程模型如圖1所示?;谀P偷脑O計流程模型如圖2所示。

qrs1-t1.gif

qrs1-t2.gif

    相對于傳統(tǒng)的軟件開發(fā)方法,基于模型的設計優(yōu)勢在于:

    (1)開發(fā)和驗證測試的過程始終結合在一起,產(chǎn)品從需求分析到設計和實現(xiàn)的各個階段均通過模型進行不斷的驗證;(2)產(chǎn)品的缺陷可以在初期的需求分析階段通過模型驗證暴露出來,大大降低了后期設計完成后測試的難度和更改量,開發(fā)者只需關心算法和模型設計,源代碼使用工具軟件自動進行生成和測試驗證;(3)縮短了開發(fā)周期,降低了開發(fā)成本。

1.2 基于模型的軟件開發(fā)工作流程

1.2.1 行業(yè)標準

    應用于高安全環(huán)境下的軟件,例如航空電子系統(tǒng),它們的開發(fā)與驗證過程需要嚴格遵循各種標準[6]。DO-178B[7]是由美國航空無線電技術委員會(RTCA)提出的航空工業(yè)軟件開發(fā)標準,該標準建立了一套航空機載系統(tǒng)和設備合格審定相關的軟件要求[8],定義了軟件開發(fā)各個階段的安全性目標,對航電行業(yè)的軟件安全性標準影響巨大。

    DO-178B定義了5個軟件層級:A、B、C、D、E,這5個軟件層次所導致的失效狀態(tài)是由系統(tǒng)安全評估過程決定的[9]。確定的構件級別應與其能夠產(chǎn)生的最嚴重的失效條件相對應,A級為失效會產(chǎn)生最嚴重后果的等級,之后依次弱化,E級表述為“無安全性影響”[10]。更新的DO-178C[11]標準以附件形式發(fā)布了以模型開發(fā)、形式化驗證、面向?qū)ο?、工具鑒定等為代表的新一代軟件研制技術[12]。

1.2.2 生命周期

    DO-178B/C定義了各層軟件都應滿足的各個過程的具體目標,定義的軟件生命周期可以劃分為3類過程[13]。軟件計劃過程:定義并協(xié)調(diào)一個項目的軟件開發(fā)與系統(tǒng)集成過程;軟件開發(fā)過程:包括軟件需求分析、設計、編碼、整合過程,同時還包括各過程間的跟蹤;整合過程:保證軟件生命周期及其輸出的正確、可控、可信,包括驗證、軟件配置管理、軟件質(zhì)量保證、合格審定聯(lián)絡過程。

1.2.3 工作流程

    根據(jù)上述基于模型設計的工作流程和DO178B/C軟件生命周期的各個過程,結合MATLAB/Simulink軟件得到具體的模型化開發(fā)方法[14]的工作流程如圖3所示。

qrs1-t3.gif

1.3 Arduino的模型化開發(fā)方法

    在MATLAB_supportPackages的配合下,調(diào)試完成后的Simulink模型可以直接在Arduino平臺上獨立運行或者與連接的PC配合運行。Arduino平臺可以幫助用戶在不需要手動編程的情況下理解嵌入式系統(tǒng)的設計流程,可以使用Simulink來設計控制系統(tǒng)和機器人應用算法,可以應用基于模型設計技術,在仿真中驗證算法,驗證過程可以符合DO-178B標準,也可以將算法作為獨立的應用程序,在Arduino平臺上的ATmega處理器上實現(xiàn)。結合基于模型的軟件開發(fā)工作流程,Arduino的模型化開發(fā)方法可以總結為:

    (1)使用Simulink建立仿真模型,在建立的過程中,驗證和確認該模型;(2)模型驗證和確認后,使用Simulink自動生成可以在Arduino上運行的C語言代碼;(3)生成的代碼編譯后下載到Arduino目標機上運行,運行過程數(shù)據(jù)可以在MATLAB軟件中觀察并且在Simulink中在線整定和修改。

    安裝MATLAB_supportPackages后,Simulink中封裝Arduino平臺模型庫。

2 Arduino模型化開發(fā)

2.1 功能需求

    示例開發(fā)的功能為通過Arduino模擬量輸入口獲取的熱敏電阻的電阻值,采樣量化后通過一定的算法將該電阻值轉(zhuǎn)換為當前的溫度值,在白板上寫出溫度值,如果溫度改變,則擦除原有數(shù)據(jù),重新寫出當前溫度值。硬件連接好之后,軟件功能可以細分為:(1)讀取Arduino的一路模擬量輸入口;(2)處理模擬數(shù)據(jù)為溫度值;(3)將溫度值傳送到輸出模塊;(4)輸出模塊擦除原來溫度值,寫入新的溫度值。本節(jié)采用模型化的方法對上述功能需求進行開發(fā)。

2.2 模型設計

2.2.1 算法設計

    熱敏電阻是電阻值隨溫度變化的半導體傳感器,其典型特點是電阻值對溫度非常敏感,在不同的溫度下會表現(xiàn)出不同的電阻值,從而根據(jù)表現(xiàn)的電阻值逆推出其所處的環(huán)境溫度值。本文選用負溫度系數(shù)熱敏電阻(NTC)503,其電阻值隨溫度的升高而降低,存在一個非線性的已知關系:

qrs1-gs1-2.gif

2.2.2 模型設計和調(diào)試

    根據(jù)式(2)及具體參數(shù)值,設計經(jīng)過Arduino模擬量讀取端口采樣和量化(0~1 023)后的電阻值轉(zhuǎn)換為溫度值的算法模型圖4所示。

qrs1-t4.gif

    通過MATLAB模擬采樣后端口輸入信號,輸入0~1 023全部數(shù)據(jù),模型相應輸出經(jīng)過計算后的溫度值。

2.2.3 模型集成

    新建一個Simulink項目,圖5所示為建立讀取Arduino的模擬量輸入口和處理模擬數(shù)據(jù)為溫度值以及將溫度值傳送到輸出模塊的模型。設置Pulse Geneartor,更改需要的頻率、占空比,以及相應的pin number等。

qrs1-t5.gif

2.3 自動生成代碼和運行

    在線調(diào)試完以后可以進行自動生成代碼和在線燒寫,打開配置窗口,選擇“Prepare to Run”,選擇對應的控制板型號為Arduino Mega 2560,設置端口(可以選自動或手動),設置波特率(相當于IDE編程時setup()函數(shù)中的Serial.begin())。設置完成保存后,回到Simulink編輯窗口,點擊"Run"開始自動下載并在完成后運行。

2.4 在線調(diào)試

    本文使用的Arduino mega 2560硬件平臺,具有4路串行通信端口與PC進行數(shù)據(jù)交互,可以在Simulink環(huán)境中直接在線整定PID參數(shù)、監(jiān)視實際信號變化,通過Scope工具查看轉(zhuǎn)換后的實時溫度輸出信號,如圖6所示。

qrs1-t6.gif

3 分析和驗證

    生成程序代碼共9 794行,其中有效代碼行數(shù)為5 924行,占60.17%,注釋行數(shù)為2 541行,占25.81%。有9個程序頭文件,25個c/cpp程序文件,可執(zhí)行文件hex和bin各一個,可以直接下載到目標機運行,其他中間文件40個。生成的代碼和程序涉及的功能如表1所示。

qrs1-b1.gif

    傳統(tǒng)軟件和系統(tǒng)開發(fā)的驗證步驟一般位于項目的末尾,如瀑布模型等。對于復雜系統(tǒng)與軟件項目,如果僅依靠后期驗證發(fā)現(xiàn)問題再進行修改,其代價往往是難以估量的,因為問題可能在需求或者設計階段就已經(jīng)存在了。在基于模型的設計過程中,可以將驗證過程提前到模型設計階段,通過系統(tǒng)早期驗證提高產(chǎn)品質(zhì)量,縮短開發(fā)周期,減少糾錯成本。

    相對于不確定性很高的人工測試來說,對于高安全相關項目,在開發(fā)的過程中,就可以使用Simulink Module Advisor工具自動檢測模型是否符合DO-178B標準,也可以檢查模型或子系統(tǒng)的配置是否會導致系統(tǒng)仿真錯誤或者無效,檢查模型設置是否會生成無效代碼。檢查完成后,自動生成報告,列出不符合項,提出模型設置建議。開發(fā)人員根據(jù)報告進行不符合項的修改,重復檢查過程,直至滿足協(xié)議要求。

4 結論

    基于模型的軟件開發(fā)是一種新穎的軟件開發(fā)的理念和方法,在高安全環(huán)境要求下的軟件領域有著廣泛應用。本文介紹了基于模型的軟件開發(fā)特點和行業(yè)標準,并且與傳統(tǒng)的軟件開發(fā)方法進行了對比,總結了基于模型的軟件開發(fā)的典型工作流程。在此基礎上,基于MATLAB/Simulink軟件平臺進行Arduino模型化開發(fā)實例分析,實現(xiàn)了模型設計、模型調(diào)試、自動代碼生成、自動下載運行以及在線調(diào)試等功能,并且進行了生成代碼分析和協(xié)議符合性驗證,探索了完整的Arduino的模型化開發(fā)方法。

參考文獻

[1] BIGLARI H.Past,present and future of satety-critical realtime embedded software development[M].New York:Fairchild Control Corporation,2008.

[2] 王偉,李育挺,馬松輝.基于模型的驗證與測試技術[J].計算機測量與控制,2013,21(4):987-989.

[3] Arduino.What is Arduino?[EB/OL].(2014-09-29).http://www.arduino.cc/en/Guide/Introduction.

[4] 趙廣元,王文慶,蔡秀梅.基于Arduino和Matlab/Simulink的仿真環(huán)境設計研究[J].測控技術,2015,34(8):123-125.

[5] Yu Shitao,Yang Shiwei,Yang Lin,et al.Module-based development of real-time software system for electronic unit pump system[J].Chinese Journal of Mechanical Engineering,2007,20(1):25-30.

[6] 金志威,劉萬和,薛茜男,等.形式化方法在機載電子硬件研制中的應用研究[J].電子技術應用,2015,41(6):143-146.

[7] RTCA/DO-178B.Software considerations in airborne systems and equipment certification[Z].Washington D.C:Radio Technical Commission for Aeronautics,Inc.,1992.

[8] 何鑫,劉暢,鄭軍.基于DO-178B的軟件測試技術研究[J].計算機測量與控制,2013,21(6):1470-1473.

[9] 蔡喁,鄭征,蔡開元,等.機載軟件適航標準DO-178B/C研究[M].上海:上海交通大學出版社,2013:129-130.

[10] 朱和銓,徐浩軍,張鵬,等.模型驅(qū)動的軟件構件研制保證水平驗證方法[J].航空學報,2015,36(3):907-920.

[11] RTCA/DO-178C.Software considerations in airborne systems and equipment certification[Z].Washington D.C:Radio Technical Commission for Aeronautics,Inc.,2008.

[12] 王金林,牟明,邢亮.GJB5000A與DO-178B/C的綜合應用研究[J].航空計算技術,2015,45(1):100-102,107.

[13] 劉杰.基于模型的設計及其嵌入式實現(xiàn)[M].北京:北京航空航天大學出版社,2010:345-349.

[14] 渠博崗,易映萍.基于CCS與MATLAB/Simulink聯(lián)合仿真平臺的構建與實現(xiàn)[J].電子技術應用,2016,42(4):106-110.



作者信息:

吳  姣,郝玉鍇,徐  寧,李向東

(中航工業(yè)西安航空計算技術研究所,陜西 西安710115)

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權禁止轉(zhuǎn)載。