基于模型的设计是一个快速有效的开发动态系统的过程,包括控制系统、信号处理和通信系统。 在基于模型的设计中,系统模型是开发过程(需求、设计、实施、测试和集成)的中心部分。当软件和硬件的设计要求(例如定点数据和时序行为)都被包含之后,就能够自动生成嵌入式系统的代码并创建系统验证的测试用例(例如系统在环)。这样不仅节省了时间,而且避免了手写代码的错误。
基于模型的设计采用以下方法提高效率:
• 项目团队共用一个通用的开发环境
• 融合测试和设计,能够连续的识别并修正错误
• 自动生成嵌入式软件代码
• 开发和复用测试用例
• 通过复用设计来配置多处理器和目标硬件的系统
在基于模型的设计中,关键一步就是生成c代码以及对算法进行目标处理器代码开发。自动从模型生成c代码,以进行特定平台应用的开发,其优势在于:
• 避免在simulink模型中手写代码
• 消除手写代码的错误
• 保持代码质量的一致性
• 通过一键点击重生成代码
上图表示的是一个简单的代码生成工作流,生成优化的代码会下载到处理器硬件上。代码生成过程会涉及到多个软件工具的配合使用,如下图所示:
嵌入式代码生成过程介绍
首先在simulink环境中完成系统浮点模型的搭建,对系统模型进行离线仿真,仿真结果满足期望,再进行模型的离散化、定点化以及定标。离散化在数字控制器设计和硬件在回路仿真中是一个非常重要的步骤。
model discretizer可以选择性地将模型中的连续模块转换为等价的离散模块。 使用model discretizer过程如下:
• 识别模型中的连续模块;
• 改变模型的参数从连续到离散;
• 对模型中所有连续模块或选中的连续模块应用离散化设置;
• 创建可配置的子系统包含连同原始连续模块一起的多个离散化配置;
• 可以在不同的离散化设置中进行切换,评估模型的仿真结果。
下图是个模型离散化示意图:
离散化工作完成后,进行仿真,仿真满足期望值,此时进入模型的定点化过程。
fixed-point advisor可以完成浮点模型/子系统-定点模型/子系统的转换,使用fixed-point advisor进行模型转换并获得一个初始定标,用于后续在fixed-point tool中进行细化。
fixed-point advisor为模型simulink信号对象推荐数据类型,但它不能自动保存simulink信号对象。为了保存修改,需要在模型关闭之前在基本工作空间或模型工作空间保存simulink信号对象。
模型定标前提条件:
• 如果使用设计小值/大值信息,添加信息到模块中;
• 确保模型模块和信号使用定点数据类型。
定标完成后,需要确定定标后模型的仿真结果与浮点模型仿真结果精度上相差并不是太多,才可认为定标工作结束。完成定标工作后,进入嵌入式代码生成,首先要进行求解器配置,如下图:
选择ert.tlc,点击build按钮, rtwec软件便会执行以下的编译过程 :
• 模型编译
• 代码生成
• 执行生成的代码 (可选项),生成代码的文件结构如下图所示:
下面对生成文件概要介绍:
• ert_main.c:主函数实例,由rtwec软件默认生成;
• model.c:模型算法代码;
• model.h:声明模型数据结构,程序入口和数据结构的公共接口。并通过访问宏的方式提供了实时模型数据结构的接口,如果要实现手写代码和生成代码接口交互,就需要在手写代码中包含模型的model.h文件;
• model_private.h:模型及其子系统本身需要使用的宏和数据;
• model_types.h::实时模型数据结构和参数结构的全局声明。这些结构在函数声明和函数复用时可能需要使用;
• rtwtypes.h:生成代码的数据类型、结构和宏. 大多数其它生成代码模块需要使用这些定义;
• model_data.c:选择性生成。包含参数和常量模块i/o的定义。如果在模型中这些数据没有被用到,那么model_data.c文件就不会被生成。
代码优化
进行应用系统开发的重要一步就是要考虑具体应用的要求是什么,分为以下几个方面:
• debugging:设置优化代码生成选项,使build过程可调试;
• traceability:设置优化代码生成选项,提供模型元素和代码之间的映射;
• efficiency:减少ram、rom和执行时间;
• safety:降低错误的可能性。
在configuration parameters或model explorer对话框中设置solver、 data import/export、optimization、diagnostics和real-time workshop的选项都会影响到仿真时模型的行为及生成的代码。代码优化需要去除不必要的代码,去除不必要的数据,优化数据存储。
客户收益
自动代码生成,节省开发周期。对于复杂算法的设计,自动代码生成是比较具有吸引力的。因为复杂的算法必须是一个经过测试的算法模型,通过人工编写的代码,可能需要反复的调试才能使用,而通过matlab/simulink生成的代码是使用经过无数次测试的代码生成器得出的代码,具有极高的可用性,并且通过matlab/simulink提供的代码只需要较少的调试时间。这样大大节约了客户开发时间,同时保证了模型和代码的一致性。