1 基于模型设计的趋势

现代工业系统信息域软件规模和复杂度大幅提升。以汽车为例,软件规模十年间膨胀十倍,传统基于“软件工程+文档+代码”的开发过程越来越难以适应产品快速迭代的需要。

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

MBD具有以下特点:

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

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

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

4.设计本身就是可执行的规格书,通过仿真在早期即可验证设计的正确性。

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

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

同元软控完全自主研发的多领域统一建模仿真软件MWORKS.Sysplorer及相关工具为大家提供了国产化建模仿真与代码生成解决方案。

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

在同元国产化建模仿真与代码生成解决方案中,其代码生成流程包括模型建立、数据字典、代码生成与整合集成。如下图所示,首先利用MWORKS.Sysplorer进行模型设计,该设计过程涵盖了模型开闭环仿真与验证;其次使用数据字典对模型中的数据对象进行统一管理;接着使用代码生成工具进行嵌入式控制器代码的自动生成;最后将生成的代码集成到运行目标环境中。

图2-1 代码生成流程

2.1 模型建立

MWORKS.Sysplorer支持工业设计知识的模型化表达和模块化封装、系统的物理集成、系统状态方程的自动推导、控制策略嵌入式C代码的自动生成及参数分析与优化等功能。在同元国产化建模仿真与代码生成解决方案中,使用MWORKS.Sysplorer进行模型建立与设计。

2.2 数据字典

数据字典可以对模型中的数据对象进行统一管理,并规定这些数据对象在生成代码中的表现形式,使所建立的模型能够高效地转换为可读性高的嵌入式通用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 代码生成工具检测到错误

2.3 代码生成

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

生成代码的文件组织方式有多种方案供选择,根据生成的文件数量和结构可以分为Modular型和Compact型。其中默认的是Compact型,设计人员可以根据模型生成代码后的集成习惯,选择代码生成文件组织形式。

图2-4 Modular型(上)和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 数据溢出保护

2.4 一致性验证

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

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

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

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

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

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

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

2.5 支持多种操作系统

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

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

3 案例介绍

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

3.1 树莓派小车介绍

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

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

图3-1 树莓派小车结构

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

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

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

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

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

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

3.2 流程概述

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

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

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

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

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

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

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

3.3 代码集成

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

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

3.4 编译下载与执行

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

4 展望

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

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

  1. xml建模包括以下_为什么要进行建模仿真?

    没有"模型"作为基础的话,很多当今的前沿概念将无法真正落地! 今天,数字孪生.人工智能.工业互联网.边缘计算这些概念在整个产业里非常的火热,但是,要知道,如果这些概念没有" ...

  2. 程序阅读_全面详解LTE:MATLAB建模仿真与实现_自学笔记(1)调制与编码_程序阅读

    程序阅读_全面详解LTE:MATLAB建模仿真与实现_自学笔记(1)调制与编码_程序阅读 在粗浅地掌握了LTE知识后,从今天开始对<全面详解LTE:MATLAB建模仿真与实现>一书的学习. ...

  3. UCanCode发布领先的大型组态建模仿真CAD与GIS开源套件2019版本

    2019年. 成都 UCanCode发布升级E-Form++可视化源码组件库2019全新版 ! --- 全面性能提升,UCanCode有史以来最强大的版本发布! E-Form++可视化源码组件库企业版 ...

  4. 程序阅读_全面详解LTE_MATLAB建模仿真与实现_自学笔记(2)OFDM_程序阅读

    程序阅读_全面详解LTE:MATLAB建模仿真与实现_自学笔记(2)OFDM_程序阅读 本章详细阅读 LTE 标准中的 OFDM 帧结构和实现,讨论 OFDM信号的时-频映射和多种适应信道带宽的资源元 ...

  5. PDManer[元数建模]-v4.1.0发布:一款简单好用的数据库建模平台

    [PDManer元数建模-v4],历时四年,持续升级,工匠精神,做一款简单好用的数据库建模平台. 元数建模平台,使用React+Electron+Java技术体系构建. [PDMan-v2] --&g ...

  6. 用Turtle实现狗追兔子的建模仿真

    用Turtle实现狗追兔子的建模仿真 问题背景 模型假设 符号说明 微分模型建立与求解 Turtle动画仿真 模型评价与推广 参考文献 鸣谢!!! 附上完整代码 好用!Python 好看!MATLAB ...

  7. 一体化建模仿真平台20-sim v4.6.3发布丨附下载

    20-sim是一种机电一体化系统的建模和仿真程序.利用20-sim可以像绘制工程方案一样灵活地的键入模型.这些模型能用于仿真和分析多域动态系统的特性,也可以创建控制系统,甚至可以生成C代码并用于快速原 ...

  8. 元过程建模以及一种元过程建模工具MetaEdit+的介绍

    Meta-Process Modeling http://www.answers.com/topic/meta-process-modeling The term Meta-process model ...

  9. PDManer[元数建模]-v4.0.0发布:一款简单好用的数据库建模平台

    [PDManer元数建模-4.0],历时四年,持续升级,工匠精神,做一款简单好用的数据库建模平台. 元数建模平台,使用React+Electron+Java技术体系构建. [PDMan-v2] --& ...

最新文章

  1. 深信服5月26日笔试
  2. 收藏 | 卷积神经网络中10大拍案叫绝的操作!
  3. 解决Surface Pro外接移动硬盘经常睡眠的问题
  4. Hibernate框架基本使用
  5. 拓端tecdat|在R语言中轻松创建关联网络
  6. php curl get 微信文章,微信公众号开发:获取 access_token 的两种方式 cURL 函数 和 file_get_contents 函数...
  7. 学校为什么要单位接收函_学校让我签三方,居然是因为···
  8. 斯托克斯公式与一些概念
  9. vue项目中页面打印插件(去除页眉页脚)
  10. win7鼠标指针主题包_双飞燕FB35双模蓝牙鼠标评测 终于能让手放松了
  11. unity4和unity5区别
  12. Mina中的zkApp交易snark
  13. STM32学习笔记——OLED的使用
  14. Centos7 jdk8,Tomcat9的安装与配置
  15. HTML5权威指南读书笔记03(第7,8章)--icon,base,锚点,一些七七八八的元素
  16. 什么是CISAW认证?有什么价值?
  17. Android 第三方ROM CyanogenMod 源码下载,编译,刷机
  18. 02-ROS的工程结构
  19. 计算机编程中的aa是什么意思,output是什么意思 output的例句 编程中output表示输出参数...
  20. Android POI 百度地图——周边检索

热门文章

  1. oracle spool生成文件,用spool+unix shell生成文本文件
  2. 赛码习题:约德尔测试
  3. 经济学原理---11 公共物品和共有资源-- 读书笔记
  4. Python Hander处理器以及自定义opener使用步骤
  5. 小别离三个演员都长大了,确定他们这不是成长日常
  6. HDU 2102 A计划(广度优先搜索+数据)
  7. 【wikioi】1033 蚯蚓的游戏问题(费用流)
  8. 编程和数学是什么关系?编程学习为什么会这么火呢?
  9. 说说python自带的speech和speech_recognition的使用以及效果
  10. 制作游戏为生:Levelord的11个技巧