本文承接之前的simulink的MBD开发的文章,这次我们来唠唠,MBD生成代码后,如何跟底层代码进行集成,并生成对应的hex,mot,A2L等相关文件!

啥叫集成?

集成就好像结婚,谈恋爱,找女朋友!找一个臭味相同的两个人,然后一起结婚,生个小孩,这个小孩就是对应的mot,hex 文件。

你找女朋友最重要的是啥?其实就是“臭味相同”其实就是共同的爱好,生活等,也就是集成代码中,需要弄清楚底层应用层的接口与需求,只有这样集成才不会有bug,结婚后才会幸福美满。

如何谈恋爱,如何结婚呢?高富帅有高富帅的玩法,今天搞个法拉利,明天搞个兰博基尼,屌丝有屌丝玩法,今天送个花,明天请吃个麻辣烫,今天压马路,明天逛公园,只要功力够强最终都可以到幸福的港湾,就像代码集成,高大上的大公司,集成就是买买买,各种工具链,然后一键生成,屌丝公司就是各种盗版,发挥群众力量,搞各种脚本,来进行标准化的集成,不过最终还是能生成同样的软件。

扯了半天,今天我就来当次非诚勿扰的主持人,搞个事情,聊聊如何谈恋爱,如何集成!哈哈哈!整的自己跟孟非一样土豪,其实自己就是个屌丝!

软件代码集成整体架构:

Simulink 的代码集成,分为两种方法,一种是老土,老土的方法,Low 逼工程师,Low 逼公司专用,另外一种就是高大上的方法,高端大气上档次,土豪公司专用。下面来逐个介绍。先来科普一下简单的软件架构。

包含三层,我们大多都是生成对应的APP层代码,然后与RTE,底层进行集成!在整体的软件架构中,Simulink 的APP成生成的代码架构也根据对应的需求及公司的情况,也不同。如下所示。

应用层Simulink 生成代码的架构:

应用层的模块依据功能,分为多个block, 但是block的封装方式,造成在集成时候,代码的架构 不同,一种为library模式,一种是Model Reference模式,如下图所示:

区别定义:

Matlab 官方定义,如果不会重用的子模式,大多用model reference,经常被重用的大多用Library,比如某个均值算法,逼近算法,PID算法等。

代码生成时候定义,library 里面的模块通过一些设置可以重入函数,如果不是一些特定的设置,不会生成单独的.C,.H文件,而应用model refernece 时候,会生成一系列的单独文件。

应用场景:

如果你们公司开发的人很多,职责分析很明确,建议用model reference,如果小公司,开发的人又是集成的人,一个人身兼多职,就直接library 的模式就可以!要不你会很累!一砖多能的人一般都在小公司,那下面来介绍一下小公司的集成方法。

Low 逼XX 公司专用方法:

小公司大多由于人及资源的限制,大多数都是依靠公共的软件与资源进行集成编译,在运行完初始化函数以及底层的驱动函数后,底层软件提供对应的调度接口,按照软件的调度顺序,进行周期调度Step函数,事件型的函数大多都在应用层处理,底层就不管了,大致的架构如下图所示:

其中下面描述的Step流程内容如下所示,偶们的一些项目大多用的是Bat 脚本与Python 脚本进行 集成编译。

Before Build:利用Bat 脚本将所需要的应用层c文件,放入对应的文件夹,修改查看函数名字是否符合底层要求等:

Build:用python 调用编译器内核或者后台打开编译器,link所有的文件进行编译。

After Buid:有的公司也叫PB(Post Build),将生成的文件打标签,放入对应的文件夹,有的公司还调用hex view在hex里面进行添加对应内容 以及check 对应的checksum ,一般你所看到的版本,日期,项目名字的信息大多都在这个步骤完成。

以上这种方法大多依靠NB的技术大拿,从而减少公司买一些整套的软件管理编译专用软件的钱,大多数新能源企业都是这么搞,就因为省钱!但是还有一些土豪世界500强,用的是高大上的方法。

土豪公司专用方法:

为啥说土豪,是因为很多编译步骤都是在云端实现或者有对应的专用软件,而且这些专用软件都是土豪公司自制,很多世面上都没有,具体如下图所示:

在这个编译过程中大多会用到,QAC,Clearcase,Doors ,ClearQuest等大型软件,之间的耦合也是通过一些脚本进行连接,大多数目前用的是Perl 或者Python.

编译的过程也包含三个步骤,但是大多都是后台运行,一般看不到。

今天就先扯这么多吧, 集成就这么多了吗?当然不是,还有一个很重要的知识点,就是不同速率的任务函数如何在simulink中实现,就是一个屌丝如何追求白富美,一个高富帅如何追求丑小鸭,那我们就下次再来屡吧!

讲解的视频,最近实在太忙,就不搞了,等有时间给大家免费补上,感觉不错分享个朋友圈,点个赞,来犒劳一下本吊丝的辛勤劳作!

之前发布的Simulink 资料已经恢复,感兴趣朋友,关注微信公众号,回复“simulink ”就可以获取下载方法,谢谢喽!

在这里就不谢任何人了,所有图片介绍,都是本屌丝搞得,若与你的文章雷同,你肯定是盗版,哈哈!

知乎专栏: 汽车控制系统Live名称:电池管系统BMS 技术,市场,工作现状与挑战

电池管理系统BMS-技术现状与前景​www.zhihu.com

微信公众号: 新能源控制系统及MBD开发

用函数实现simulink_VCU/BMS基于模型的开发---Simulink 代码集成相关推荐

  1. Matlab/Simulink自动生成STM32代码_基于模型的开发_环境搭建

    目录 前言 官方简介 Matlab R2018b安装 STM32-MAT/TARGET 安装 STM32CubeMX 安装 STM32CubeIDE, Keil安装 ST-Link驱动安装 微信公众号 ...

  2. 飞控教程基于模型的开发(across)

    摘自:https://mp.weixin.qq.com/s/SESLziI-qk_UYLX56Upl9A 飞控教程&基于模型的开发 原创 across超越者 across说 7月28日 ACR ...

  3. 纯电动整车控制器-基于模型的开发

    开发背景 整车控制开发要求的功能越来越多,特别是乘用车项目,蠕行功能.定速巡航功能等高端功能需要VCU实现控制.另外还有很多复杂的逻辑控制,使用状态机特别好处理.当然以前的C语言也可以做,但是确实没M ...

  4. 基于模型的强化学习比无模型的强化学习更好?错!

    作者 | Carles Gelada and Jacob Buckman 编辑 | DeepRL 来源 | 深度强化学习实验室(ID:Deep-RL) [导读]许多研究人员认为,基于模型的强化学习(M ...

  5. 基于模型的无人机开发

    一.产品介绍: 我们阿木实验室提供以下的课程体系和打包工具:本课程包含学习教程,开发环境工具包,一台基础版无人机JCV-410. 课程将全面,细致地讲解如何基于模型(Simulink)的方法设计一套功 ...

  6. 天欧黄汉知:基于模型的智能驾驶性能开发和测试方法

    除了道路测试,软件模拟也很重要. 车云按:2017年6月21日-22日,由中国安全产业协会.TIAA车载信息服务产业应用联盟与车云网共同主办的2017年中国安全产业峰会暨首届交通安全产业论坛在北京召开 ...

  7. R语言构建文本分类模型:文本数据预处理、构建词袋模型(bag of words)、构建xgboost文本分类模型、基于自定义函数构建xgboost文本分类模型

    R语言构建文本分类模型:文本数据预处理.构建词袋模型(bag of words).构建xgboost文本分类模型.基于自定义函数构建xgboost文本分类模型 目录

  8. sklearn基于make_scorer函数为Logistic模型构建自定义损失函数+代码实战(二元交叉熵损失 binary cross-entropy loss)

    sklearn基于make_scorer函数为Logistic模型构建自定义损失函数+代码实战(二元交叉熵损失 binary cross-entropy loss) # 广义线性模型中的各种连接函数: ...

  9. ML之ME/LF:基于不同机器学习框架(sklearn/TF)下算法的模型评估指标(损失函数)代码实现及其函数(Scoring/metrics)代码实现(仅代码)

    ML之ME/LF:基于不同机器学习框架(sklearn/TF)下算法的模型评估指标(损失函数)代码实现及其函数(Scoring/metrics)代码实现(仅代码) 目录 单个评价指标各种框架下实现 1 ...

最新文章

  1. java 安装后找不到文件_(已解决)jdk安装 系统找不到文件C:\ProgramData\Oracle\Java\javapath\java.exe...
  2. RFI远程文件包含的漏洞
  3. SharpMap分析手记
  4. io流不关闭会怎么样_幸福树一个月不浇水会怎么样
  5. Android高效开发:
  6. Potato的暑期训练day#1题解 ——毒瘤构造
  7. SciSharpCube:容器中的SciSharp,.NET机器学习开箱即用
  8. 如何使用Elixir和Phoenix快速入门构建CRUD REST API
  9. php解析验证码,全面解析PHP验证码的实现原理 附php验证码小案例
  10. linux对磁盘进行分区_如何在Linux中对磁盘进行分区
  11. php异步发送邮件,php通过fsockopen异步发送邮件
  12. 希望这篇文章对理解C#的对象模型有所帮助
  13. maccms10自动播放下一集
  14. 海外服务器配置多少带宽比较合适?
  15. 如何开启计算机cpu虚拟化,如何开启cpu虚拟化_VMware Workstation 中如何开启CPU 的虚拟化支持?...
  16. 京东商家下单未付款?订单催付教程
  17. LA 7456 Least Crucial Node
  18. PC版微信发送无损视频除了使用压缩还有另外的方法
  19. 鸿蒙OS开源代码精要解读之——init
  20. subscription-manager repos --enable <repo>

热门文章

  1. 利用代码生成right scope数据
  2. CRM_PRICING_MERGE_FROM_BUPA_OW
  3. Use tcode ST01 to log authorization check
  4. Java AOP研究之@Aspect注解的工作原理
  5. 语义化版本(semantic versioning)机制里的一些范围标识符
  6. React的工作原理,为什么我直接从JSBin copy到本地的代码无法执行
  7. 一些通过SAP ABAP代码审查得出的ABAP编程代码优化建议
  8. SAP Hybris Enterprise Commerce Platform ECP和SAP CRM架构比较
  9. SAP Customer Data Cloud的Audit log设置
  10. 一个用JavaScript生成思维导图(mindmap)的github repo