资讯详情

同元国产化建模仿真与代码生成解决方案

现代工业系统信息域软件的规模和复杂性大大提高。以汽车为例,软件规模在十年内扩大了十倍,传统上是基于软件工程 文档 代码的开发过程越来越难以满足产品快速迭代的需要。

模型驱动技术可以实现控制算法和被控物理对象的全数字抽象。通过在功能层面验证设计的正确性,在实施阶段自动生成代码,部署到实际控制器和各种实时模拟平台进行实时闭环验证。因此,基于模型的设计方法(Model Based Design,简称MBD)广泛应用于航空航天机载控制器、汽车电子、工业控制、机器人等嵌入式产品。

MBD具有以下特点:

1.层次化建模自然实现了高内聚低耦合的优良特性;

2.图形化系统建模便于统一设计规范,团队分工并行开发且集成便利,使得整体开发速度加快;

3.生成代码与模型一致性强,有效避免引入人工编码Bug;

4.设计本身就是可执行的规格,设计的正确性可以在早期通过模拟来验证。

代码生成是基于模型设计控制器软件的核心环节。因此,基于模型设计工具的软件工程师最关心的功能是自动生成代码。

同元软件完全独立开发多领域统一建模仿真软件MWORKS.Sysplorer及相关工具为您提供国产化建模仿真和代码生成解决方案。

同元国产化建模仿真和代码生成解决方案https://mp.weixin.qq.com/s/zFlVfVJRrFnVPgISSc3BwA

代码生成过程包括模型建立、数据字典、代码生成和集成。如下图所示,首先使用MWORKS.Sysplorer模型设计包括模型开闭环模拟和验证;然后使用数据字典统一管理模型中的数据对象;然后使用代码生成工具自动生成嵌入式控制器代码;最后将生成的代码集成到运行目标环境中。

图2-1代码生成流程

MWORKS.Sysplorer支持工业设计知识的模型表达和模块化包装、系统的物理集成、系统状态方程的自动推导、控制策略嵌入式C代码的自动生成、参数分析和优化。用于同元本地建模仿真和代码生成解决方案MWORKS.Sysplorer建立和设计模型。

数据字典可以统一管理模型中的数据对象,并规定这些数据对象在生成代码中的表达,使建立的模型能够有效地转换为高可读性的嵌入式通用C代码,方便用户集成到目标硬件中。

数据字典的应用提供了三个便利:

此外,数据字典还可以自动完成模型中数据信息的分类。模型中的数据信息通常分为参数、信号和常数:

  • 参数:一般来说,模拟\在运行过程中保持不变,可根据需要校准数据。(通常是一些需要手动设置的调试常量。

  • 信号:系统计算模型中根输入输出端口的变量。(初始值和范围通常只给定。

  • 常数:指一些恒定的物理常数。(如重力加速度、万有引力常数、圆周率等。,通常产生常数或宏。

图2-2数据字典配置界面

在数据字典中,参数、信号构在数据字典中相似,上图列表中各项目的含义如下:

  • Name:模型中参数的命名。

  • Alias:设置模型生成代码时对应参数的别名。

  • Description:注释相应的参数,包括功能描述等。

  • Initial Value\Value:在模型中设置数据的初始值。

  • Dimensions:表示变量的维度,若变量为1维,通常情况下该栏为空。

  • Minimum:最小参数值。

  • Maximum:最大参数值。

  • Unit:参数单位。

  • data type:表示参数数据类型。有Int、Float、Bool选择三种类型,Auto用户根据需要手动选择用户之前的默认值。

  • storage type:表示存储类型。有Exported Global、Imported Extern、ImportedExternPointer选择三种类型,其中Exported Global内部定义的全局变量,Imported Extern表示导入外部定义的全局变量,ImportedExternPointer指向外界定义的全局变量指针表示导入。

  • header file:将生成的变量指定到头文件中。

界面右侧的五个按键功能如下:

  • 新字典:选择模型,并在选择模型的基础上建立新的数据字典。

  • 导入字典:导入已完成的数据字典。

  • 批量绑定:将端口信号和参数自动提取到选择面板,快速构建数据对象。

  • 新:在数据字典中增加空行,用户可以定制配置。

  • 删除:删除选中行。

所有数据设置完成后,单击应用程序,代码生成工具将自动检测数据配置是否完整。如果没有错误,请单击确定,以完成数据字典的建立。如果有错误,可以根据提示进行修改,直到它是正确的。下图显示了代码生成工具检测到一个变量值的错误提示。

图2-3 代码生成工具检测到错误

在确保模型正确并通过数据字典正确管理绑定数据后,使用代码生成工具MWORKS.Sysplorer代码生成中建立的模型,具体操作如下图所示:

根据生成的文件数量和结构,生成代码的文件组织方法可分为多种方案Modular型和Compact类型。默认情况是Compact设计师可以根据模型生成代码后的集成习惯,选择代码生成文件的组织形式。

图2-4Modular型(上)和Compact型(下)

此外,MWORKS.Sysplorer代码生成工具还支持多种扩展功能:

MWORKS.Sysplorer代码生成工具提供一套内置的数据类型别名。如果用户用自己的别名定义,可以打开数据类型替换,用户的别名将用于生成代码。

图2-5打开和生成定义代码的数据类型替换功能

默认情况下,代码生成工具中变量名的最大长度为32个字符。mo当文件结合内部命名规则命名使标识符长度超过31字符时,模型命名将采用前半部分字符 数字区分符 模型内部识别符号的规则构成了新的模型名称。例如,它被称为modelletgonorth.mo该模型将自动缩略为以下名称:

图2-6长时间识别模型缩略规则

代码生成工具中的标识符命名风格支持四种类型:下划线分为全大写、下划线分为全小写、小驼峰和大驼峰。标识符命名对象为未使用数据字典管理的内部变量和函数名。

图2-7 下划线分割全大写

图2-8下划线分割全小写

图2-9 小驼峰

图2-10 大驼峰

代码生成配置窗口为用户提供插入自定义代码的功能。代码生成工具将代码文件分为include、macro、type、global_variable_declare、global_variable_define、function_declare、function_define七个段,每个段运行开始前和结束后、实例生成前和生成后用户可根据需要插入正确的代码。例如在function_declare函数声明段中的实例前、后加入自定义代码:

图2-11 在实例前后插入自定义代码

上述设置生成的代码为:

图2-12 生成代码效果

在代码生成工具中用户可自定义入口函数名,若函数名为空则使用代码生成工具的默认名。

图2-13 用户自定义入口函数名

将设定的初始化函数名与Step函数名作用到生成代码中,如下图所示:

图2-14 生成代码的入口函数名

此外,用户可根据需要勾选“是否生成终止函数”生成终止函数,并在函数体中手写代码实现预期功能。例如,在实时仿真时间结束时用于数据管理与缓存清除。

代码生成工具对生成代码进行代码保护,目前代码保护支持数据除零保护、数据溢出保护等。

图2-15 代码保护选项

代码保护效果如下图所示:

图2-16 数据除零保护

图2-17 数据溢出保护

代码生成工具能够实现快速制作控制器产品原型,并应用于通用嵌入式产品研发过程中,因此生成代码的运行结果与模型仿真结果的一致性验证变得极为重要。如下图所示,采用背靠背验证方案将MWORKS.Sysplorer中的模型仿真数据与MCU中的实物运行数据进行差分运算,得到运算结果趋近于零,说明生成代码的运行结果与模型仿真结果一致。

图2-18 MWORKS.Sysplorer模型仿真数据与MCU实物运行数据一致性验证

以PID控制建模仿真作为实例,进行一致性验证。下图为某工况下PID模块的应用:

图2-19 某工况下PID模块的应用

下图分别为某工况下PID模块的应用在MWORKS.Sysplorer中导出的仿真结果与生成代码在某嵌入式平台运行结果:

图2-20 MWORKS.Sysplorer导出仿真结果(上)和生成代码在某嵌入式平台运行结果(下)

示例结果显示,模型仿真数据与硬件平台中的实物运行数据结果一致。

同元国产化建模仿真与代码生成解决方案支持多个实时硬件平台以及包括STM32、NXP、TI等多个半导体厂商的MCU平台,此外还支持多种操作系统,如Windows、VxWorks、Pharlap、Linux多种版本, 包括Redhat、CentOS等。

图2-21 支持的部分操作系统展示

本文使用树莓派小车执行智能避障功能作为同元国产化建模仿真与代码生成解决方案演示案例。

树莓派作为目前热门的开发板,受到广大电子爱好者的追捧。本案例选择某品牌的树莓派小车作为硬件载体,执行小车智能躲避障碍物的操作演示。

树莓派小车结构如下图所示,树莓派小车包含由两个直流电机带动的主动轮和一个钢珠作为从动轮。

图3-1 树莓派小车结构

在树莓派小车避障系统中,障碍检测模块作为传感器,判定前方是否有障碍物;树莓派作为控制器,接收障碍检测模块的信号,经过控制算法处理后对电机驱动模块发出指令;电机驱动模块作为执行器,根据指令实现小车转向避障。

图3-2 树莓派小车避障系统

其中,障碍检测模块设置在树莓派小车左右两边,由红外收发器和比较器组成。红外收发器中的红外发射管将检测方向遇到障碍物的信息发送至红外接收管,红外接收管作为半导体器件,将红外线光信号转变为电信号,随着红外光强度的增加电流也随之增大。由红外接收管输出的模拟信号,经过LM393比较器处理后输出为数字信号,同时绿色指示灯点亮。障碍检测模块通过读输出的逻辑电平,判定前方是否有障碍物。

图3-3 小车障碍检测模块

电机驱动模块由2个直流电机和6个驱动接口组成,其中驱动接口IN1和IN2连接小车左电机,IN3和IN4连接小车右电机及其他2个使能管脚。同时IN1、IN2、IN3和IN4可输出PWM脉冲来实现小车调速。

图3-4 电机驱动模块控制原理

首先设置控制策略目标为:树莓派小车在前进途中遇到障碍物时,由树莓派接收障碍检测模块发出的障碍信号并做出避障决策,树莓派小车根据决策进行合理避障。根据嵌入式代码生成流程,对树莓派小车进行以下操作:

1.利用MWORKS.Sysplorer建立电机控制模型并设置前进、后退、转向三种状态。

2.建立状态机模型,其避障逻辑为:遇到障碍后,小车先后退再转向前进,从而达到避障目的。

3.使用数据字典对模型中的数据对象进行统一管理,并设定这些数据对象在生成代码中的表现形式。

4.使用代码生成工具对模型进行代码生成,将电机控制模型和状态机模型生成的代码相互集成。

5.将集成的代码烧写进树莓派小车中进行编译。

图3-5 基于MWORKS.Sysplorer建立电机控制模型

按照上述流程进行代码生成,具体操作如下:

 

除了使用MWORKS.Sysplorer代码生成工具生成的代码外,用户也可以引入自定义代码。这是因为代码生成工具生成的是标准C代码,能够顺利地与其他标准C代码进行集成。

最后,将生成代码导入树莓派开发板,树莓派开发板根据提示修整代码进行gcc编译,完成编译后生成可执行文件。由树莓派小车在布置场地环境中执行小车智能躲避障碍物的功能操作,演示场景如下:

如今控制器在家电领域的多样化需求及快速响应能力逐渐被重视,异地开发团队配合的默契度、对代码接口的一致性以及自动化部署等需求,都能在同元国产化建模仿真与代码生成解决方案中实现。此外,在低速车辆控制器、机器人控制等领域同元也在积极探索,实现合作与创新。同元致力于为客户提供多领域、多元化的同元国产化建模仿真与代码生成解决方案,持续提升国产化工业软件自主创新力,帮助实现装备制造业数字化转型升级。

标签: 模块式连接器modular

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台