基于模型设计

摘要

基于模型设计的方法运用在嵌入式软件的设计与开发,可以大幅度提高软件的设计质量及缩短开发周期。在半导体固态制冷酒柜软件控制算法为例,利用基于模型设计的方法,设计并发开了整套控制算法。与原有的成熟人工编写算法做对比,基于模型设计的方法更加直观清晰,有效剔除控制算法设计的冗余部分,在自动生成C代码的部分C代码一次运行成功可以有效避免手工编写代码的重复报错问题并精简代码量。

一、为什么使用基于模型设计的方法?

随着基于模型设计的方法的日益成熟,在汽车、航空航天、通信、电力等多方领域都已经得到了实践,嵌入式系统也以从曾经的日常消费类电子产品逐渐迈入高端工业级产品中。根据摩尔定律,硬件技术不断发展,产品的价格不断下降、功能的越来越强大,嵌入式系统的涉及范围越来越大。与此同时在产品的开发生命周期也越来越短,嵌入式软件的开发需求与变化越来越多,软件开发的质量与效率逐渐失衡。在对软件的规范、安全等各方面也需要更为严格的控制来形成规范化软件。基于模型设计的方法进行嵌入式软件开发打破上述情况,产品的控制算法可以有更多的时间被精细设计,无需浪费大量时间进行人为编写代码,大幅提高人员价值。国内外汽车行业已率先使用基于模型设计的方法进行产品研发,自动生成代码逐步取代人工编写代码[1]。本文通过半导体固态制冷酒柜嵌入式软件设计,验证基于模型设计可以大幅度提高控制算法的开发效率及自动生成代码的代码质量,证明了此方法的可行性和便捷性。

二、基于模型设计与传统方法的对比

传统的嵌入式软件设计与开发流程为“垂直式”流程如一图所示,传统的开发方式有便捷,易于实现的优势。但随着功能的丰富,软件需求的增加,嵌入式软件的代码量剧增,控制算法之间的耦合关系越来越复杂,因此在软件设计结束之后用硬件产品做验证的开发模式对产品的开发周期带来了极大的考验并且由于高度依赖硬件,随之产生的成本也有巨大提升。这也对前期的人力、物力的资源投入带来了巨大压力。同时在[2]中也进一步说明了,传统的嵌入式软件开发在测试阶段,超过一半的错误是由于编写技术规范时引入程序中,而在编写代码的过程中仅仅能发现8%,剩下的大约40%错误都要等待测试验证阶段发现解决。

传统垂直式嵌入式软件开发流程
基于模型设计的T型嵌入式软件开发流程
基于模型设计的嵌入式软件开发设计流程如图二所示,可以看到这是一个“T”型流程在不同阶段之间传输仅为模块化的设计模型,所以可以进行对模块化模型可以进行阶段性测试,实时交互与改进,可视化的模型与实时的用例验证与测试使控制算法逻辑更容易理解,减少歧义,也可以更早的规避不必要的错误产生。此外,不同的开发人员可以根据各自的设计任务快速修改模型,使产品的模块迭代更加直观,响应更加迅速。
在模型设计与验证测试通过后,主要代码由标准化设计之后的自动生成代码工具迅速完成,然后进行程序烧写入硬件电路板在进行产品验证。这样做是从根本上由软件设计开发的结果质量管控变成了软件设计开发的过程质量管控。初看可能增加了工作流程,但在实际上一旦软件开发完成就可以保障高质量和一个较低的错误发生率,不仅解放了大量的手写代码工作,而且从根本上解决了手写代码带来的传统模式下人为性的错误。基于模型设计的方法已经在以德国、美国、日本为首的汽车电子行业得到了广泛的实践应用,代码的自动生成也逐渐替代了传统开发模式的手动编程得到了良好的效果 [3]。

三.控制算法的系统设计与仿真

传统经验半导体固态制冷控制方法,如下图3状态机模式,通过文字描述,不同的颜色代表不同状态之间的切换,状态的切换又受到温度、电压等因子的影响。由于受控条件复杂,极容易在程序设计过程中出现重复条件、范围叠加或缺失情况,也容易在编写代码过程中出现编程细节性错误,也大幅增加了复查和验证的难度。因此,利用传统的控制方式作为原型对照,使用模型设计的方式,根据需求重新对半导体固态制冷的控制方法的嵌入式软件进行设计开发。

首先,选择建立正确的模型是嵌入式软件开发设计的基石,所以在基于模型设计的方法应用中正确的建模工具选择就变得尤为重要。 目前在汽车电子企业中最为广泛应用的仿真建模工具为MATHWORK公司发布的Simulink平台。该平台为嵌入式软件设计和开发提供了丰富的模块库,Stateflow逻辑建模工具,Embedded coder 自动生成代码工具,Model sequence test模型测试工具等等[4]。复杂的逻辑控制关系都可以通过状态的互相转换图完成的表示出来。在半导体固态制冷控制设计中,控制算法是一种二维框架下的控制逻辑算法,此算法的搭建可以清晰的表达算法的逻辑。
基于模型设计的对比

3.1控制算法的建模

根据设计原型图,将每一种状态单独建模,之后根据原有设想的状态之间的切换方式在单独状态的模块之间加入状态转换线,实现模型初步设计如图5,每一个方格代表一种状态而这是根据固态制冷半导体制冷片冷、热两端的温度所确定。而竖线是控制温度的阈值,当满足一定温差的阈值状态也会发成切换。最终形成如图4的控制算法模拟模型。
控制算法建模
在这里插入图片描述
如图4,在Simulink中的Stateflow环境下建立模块,模型具备输入输出端口。输入为控制变量,输出为半导体制冷片的控制量。端口的输入量进入内部图5中进行控制逻辑算法。再由控制算法流程适配对应的路径得到输出。与传统的嵌入式软件设计图3对比,基于模型设计的方法更为直观,在内部算法逻辑控制流程也更为直接清晰。

3.2模型数据管理

在传统嵌入式软件开发中变量的查找复杂多变,不同工程师习惯的不同,创建方式的不同,为代码的修改及变量赋值有效性带来了一定的困难。
基于模型设计的方式,可以将所有变量进行统一管理,形成变量数据字典更容易对变量进行整体管理。
数据变量管理

3.3模型测试框架搭建

对系统进行仿真,利用Simulink可视化开发环境使用Model sequence test可自动生成3.1所搭建的控制模型的测试模型如图6。基于模型设计的测试是覆盖在整个模型搭建的所有过程中加入用例进行软件在环测试,在不同的时期,用例设计如图7已验证现有算法是否符合功能要求。用例的全面性决定控制算法的全面性。
模型测试框架
测试用例设计
此外,还可以评估嵌入式代码在处理器上的运行过程,通过嵌入式代码运行在模型中被控对象的模型间数据。已更快的发现在编译器或者处理器产生的其他错误。

3.4模型测试覆盖度分析

基于模型设计的方法可以在全流程进行统一建模,并且通过用例测试验证各模块的有效性,例如下图8,是利用Simulink环境中的Simulink Design Verifier工具对半导体固态制冷的控制算法进行验证。在通过不同用例分析之后,可以利用覆盖度分析的方法,确认模型的每一块算法是否通过验证并且输出验证的完成度。同时可以实时系统观察到算法的利用情况,根据这些数据的显示,可以了解到用例测试验证的全面性。若验证情况以达到全面,说明算法出现冗余需要进行优化。
模型测试覆盖度分析

3.5模型测试批量管理

在覆盖度测试完成,各个版本控制算法准确无误。然后进行如图9针对不同版本的模型进行统一的管理并进行批量验证,获取连续运行或者单步运行的仿真结果如图10,并与验证预期结果进行对比,判断模型设计是否达到最终的系统目标的要求。
在这里插入图片描述
在这里插入图片描述

3.6自动生成代码与集成

自动生成代码是基于模型设计的一个重要组成部分。目前Simulink平台中Embedded coder自动代码生成工具支持定制化的MCU芯片,因此基于模型设计的方法开发嵌入式软件不仅可以对控制算法模型进行代码的自动生成如图11也支持整个产品所有功能、通信、驱动等全代码自动生成。

在这里插入图片描述
同时生成分别具有主函数功能实现的程序文件、定义私有参数和数据结构的程序文件、本地模型和子模型的定义及数据文件和模型参数数据的声明文件。这加强了嵌入式软件开发的适配问题,在不同产品的嵌入式软件开发中,存在多种MCU芯片的使用,而自动代码生成的分类封装文件可以使软件工程师在底层驱动代码的整合上直接利用接口文件进行集成。集成完成之后即可进行代码编译并下发到硬件电路板中。


总结

在基于模型设计的放法中选取半导体固态制冷控制算法进行实例验证,在开发的效率上得到了大大提升,在之前的二维框架下的算法分支进行了冗余项的剔除、精简了控制算法。在自动生成代码的方面,代码的生成质量与原始手工代码相对比有从原有的235行减少到212行且代码成功运行。
与传统的设计开发方式对比,利用基于模型设计的方法,通过交互式界面设计与仿真同时进行,减少设计歧义。前期无需硬件的加入,自动化的构建、组织、执行模型,自动化的模型覆盖度测量降低前期的资源投入成本,较少开发人员负担。在自动代码生成的过程中,有效避免手工编码错误,较少的手动集成代码量,提高了嵌入式软件的设计开发效率和代码运行的可靠性。同时,模块化的模型代码设计更有益于隐性知识转化为显性知识的知识管理于继承。未来基于模型设计的嵌入式软件设计方法结合OTA等新功能将会为软件的高质量快速迭代创新提供有效路径,同时也为控制算法设计的部署、测试、优化提供新方向。

猜你喜欢

转载自blog.csdn.net/thatdaniel/article/details/117512759