文献标识码:A
DOI:10.16157/j.issn.0258-7998.2017.06.015
中文引用格式:吴姣,郝玉锴,徐宁,等. 一种使用MATLAB/Simulink的Arduino模型化开发方法[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.
0 引言
基于模型的软件开发(Module-Based Software Development,MDB)是一种软件开发的理念和方法[1],其原则是使用具有完善定义和支撑工具的可视化建模语言在系统工程的层级构建系统模型作为设计的基础,通过对模型的不断细化和测试来进行系统设计和验证,在此过程中持续消除其中的错误和缺陷,以保障系统设计的正确性和对设计需求的全部覆盖[2]。该方法可有效地缩短开发时间,提高开发效率,特别适合航空航天等高安全要求领域,如F/A-22和“好奇”号火星车都使用了基于模型的设计和开发方法。
MATLAB是由MathWorks公司发布的面对科学计算、可视化以及交互式程序设计的高性能计算环境。
Simulink是MATLAB最重要的组件之一,它提供一个动态系统建模、仿真和综合分析的集成环境。
Arduino是一个开放源代码的软硬件平台,具有使用类似Java的Processing/Wiring开发环境[3-4]。
本文研究了基于模型的软件开发特点和在高安全软件开发领域主要工作流程,基于MATLAB/Simulink软件平台进行Arduino模型化开发实例分析,实现了模型设计、模型调试、自动代码生成、自动下载运行以及在线调试等功能,进行Arduino的模型化开发方法研究和分析。
1 基于模型的软件开发
基于模型的软件开发使用了模型设计的工作流程和开发与测试相结合的软件开发平台,使得系统设计和验证过程相统一,减少了开发成本,缩短了开发周期,降低了软件缺陷率[5]。在基于模型的软件开发过程中,系统模型是设计的基础,需求分析、设计实现和测试验证的过程都是围绕系统模型进行的。模型在整个设计实现的过程中不断被细化、分解和复用,模型的测试和验证配合实际实现同步进行,产品的缺陷随着开发过程的进行不断地暴露和解决,避免了实现完成后测试发现问题再进行更改的现状,同时自动代码生成有效地减少了人为引入错误的可能,自动化的验证和确认使测试工程师能够开发完整的、基于需求并可在自动产生的代码上重用的测试用例。
1.1 与传统软件开发方法的对比
传统的软件开发流程模型如图1所示。基于模型的设计流程模型如图2所示。
相对于传统的软件开发方法,基于模型的设计优势在于:
(1)开发和验证测试的过程始终结合在一起,产品从需求分析到设计和实现的各个阶段均通过模型进行不断的验证;(2)产品的缺陷可以在初期的需求分析阶段通过模型验证暴露出来,大大降低了后期设计完成后测试的难度和更改量,开发者只需关心算法和模型设计,源代码使用工具软件自动进行生成和测试验证;(3)缩短了开发周期,降低了开发成本。
1.2 基于模型的软件开发工作流程
1.2.1 行业标准
应用于高安全环境下的软件,例如航空电子系统,它们的开发与验证过程需要严格遵循各种标准[6]。DO-178B[7]是由美国航空无线电技术委员会(RTCA)提出的航空工业软件开发标准,该标准建立了一套航空机载系统和设备合格审定相关的软件要求[8],定义了软件开发各个阶段的安全性目标,对航电行业的软件安全性标准影响巨大。
DO-178B定义了5个软件层级:A、B、C、D、E,这5个软件层次所导致的失效状态是由系统安全评估过程决定的[9]。确定的构件级别应与其能够产生的最严重的失效条件相对应,A级为失效会产生最严重后果的等级,之后依次弱化,E级表述为“无安全性影响”[10]。更新的DO-178C[11]标准以附件形式发布了以模型开发、形式化验证、面向对象、工具鉴定等为代表的新一代软件研制技术[12]。
1.2.2 生命周期
DO-178B/C定义了各层软件都应满足的各个过程的具体目标,定义的软件生命周期可以划分为3类过程[13]。软件计划过程:定义并协调一个项目的软件开发与系统集成过程;软件开发过程:包括软件需求分析、设计、编码、整合过程,同时还包括各过程间的跟踪;整合过程:保证软件生命周期及其输出的正确、可控、可信,包括验证、软件配置管理、软件质量保证、合格审定联络过程。
1.2.3 工作流程
根据上述基于模型设计的工作流程和DO178B/C软件生命周期的各个过程,结合MATLAB/Simulink软件得到具体的模型化开发方法[14]的工作流程如图3所示。
1.3 Arduino的模型化开发方法
在MATLAB_supportPackages的配合下,调试完成后的Simulink模型可以直接在Arduino平台上独立运行或者与连接的PC配合运行。Arduino平台可以帮助用户在不需要手动编程的情况下理解嵌入式系统的设计流程,可以使用Simulink来设计控制系统和机器人应用算法,可以应用基于模型设计技术,在仿真中验证算法,验证过程可以符合DO-178B标准,也可以将算法作为独立的应用程序,在Arduino平台上的ATmega处理器上实现。结合基于模型的软件开发工作流程,Arduino的模型化开发方法可以总结为:
(1)使用Simulink建立仿真模型,在建立的过程中,验证和确认该模型;(2)模型验证和确认后,使用Simulink自动生成可以在Arduino上运行的C语言代码;(3)生成的代码编译后下载到Arduino目标机上运行,运行过程数据可以在MATLAB软件中观察并且在Simulink中在线整定和修改。
安装MATLAB_supportPackages后,Simulink中封装Arduino平台模型库。
2 Arduino模型化开发
2.1 功能需求
示例开发的功能为通过Arduino模拟量输入口获取的热敏电阻的电阻值,采样量化后通过一定的算法将该电阻值转换为当前的温度值,在白板上写出温度值,如果温度改变,则擦除原有数据,重新写出当前温度值。硬件连接好之后,软件功能可以细分为:(1)读取Arduino的一路模拟量输入口;(2)处理模拟数据为温度值;(3)将温度值传送到输出模块;(4)输出模块擦除原来温度值,写入新的温度值。本节采用模型化的方法对上述功能需求进行开发。
2.2 模型设计
2.2.1 算法设计
热敏电阻是电阻值随温度变化的开云棋牌官网在线客服传感器,其典型特点是电阻值对温度非常敏感,在不同的温度下会表现出不同的电阻值,从而根据表现的电阻值逆推出其所处的环境温度值。本文选用负温度系数热敏电阻(NTC)503,其电阻值随温度的升高而降低,存在一个非线性的已知关系:
2.2.2 模型设计和调试
根据式(2)及具体参数值,设计经过Arduino模拟量读取端口采样和量化(0~1 023)后的电阻值转换为温度值的算法模型图4所示。
通过MATLAB模拟采样后端口输入信号,输入0~1 023全部数据,模型相应输出经过计算后的温度值。
2.2.3 模型集成
新建一个Simulink项目,图5所示为建立读取Arduino的模拟量输入口和处理模拟数据为温度值以及将温度值传送到输出模块的模型。设置Pulse Geneartor,更改需要的频率、占空比,以及相应的pin number等。
2.3 自动生成代码和运行
在线调试完以后可以进行自动生成代码和在线烧写,打开配置窗口,选择“Prepare to Run”,选择对应的控制板型号为Arduino Mega 2560,设置端口(可以选自动或手动),设置波特率(相当于IDE编程时setup()函数中的Serial.begin())。设置完成保存后,回到Simulink编辑窗口,点击"Run"开始自动下载并在完成后运行。
2.4 在线调试
本文使用的Arduino mega 2560硬件平台,具有4路串行通信端口与PC进行数据交互,可以在Simulink环境中直接在线整定PID参数、监视实际信号变化,通过Scope工具查看转换后的实时温度输出信号,如图6所示。
3 分析和验证
生成程序代码共9 794行,其中有效代码行数为5 924行,占60.17%,注释行数为2 541行,占25.81%。有9个程序头文件,25个c/cpp程序文件,可执行文件hex和bin各一个,可以直接下载到目标机运行,其他中间文件40个。生成的代码和程序涉及的功能如表1所示。
传统软件和系统开发的验证步骤一般位于项目的末尾,如瀑布模型等。对于复杂系统与软件项目,如果仅依靠后期验证发现问题再进行修改,其代价往往是难以估量的,因为问题可能在需求或者设计阶段就已经存在了。在基于模型的设计过程中,可以将验证过程提前到模型设计阶段,通过系统早期验证提高产品质量,缩短开发周期,减少纠错成本。
相对于不确定性很高的人工测试来说,对于高安全相关项目,在开发的过程中,就可以使用Simulink Module Advisor工具自动检测模型是否符合DO-178B标准,也可以检查模型或子系统的配置是否会导致系统仿真错误或者无效,检查模型设置是否会生成无效代码。检查完成后,自动生成报告,列出不符合项,提出模型设置建议。开发人员根据报告进行不符合项的修改,重复检查过程,直至满足协议要求。
4 结论
基于模型的软件开发是一种新颖的软件开发的理念和方法,在高安全环境要求下的软件领域有着广泛应用。本文介绍了基于模型的软件开发特点和行业标准,并且与传统的软件开发方法进行了对比,总结了基于模型的软件开发的典型工作流程。在此基础上,基于MATLAB/Simulink软件平台进行Arduino模型化开发实例分析,实现了模型设计、模型调试、自动代码生成、自动下载运行以及在线调试等功能,并且进行了生成代码分析和协议符合性验证,探索了完整的Arduino的模型化开发方法。
参考文献
[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的仿真环境设计研究[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] 朱和铨,徐浩军,张鹏,等.模型驱动的软件构件研制保证水平验证方法[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] 刘杰.基于模型的设计及其嵌入式实现[M].北京:北京航空航天大学出版社,2010:345-349.
[14] 渠博岗,易映萍.基于CCS与MATLAB/Simulink联合仿真平台的构建与实现[J].电子技术应用,2016,42(4):106-110.
作者信息:
吴 姣,郝玉锴,徐 宁,李向东
(中航工业西安航空计算技术研究所,陕西 西安710115)