![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MBD
文章平均质量分 57
modolllee
BMS AE;MBD
展开
-
Autosar Blockset Software Architect笔记
Software Architect自上而下的使用上没什么问题。但是项目经常是多人协同开发,自下而上的方式开发的。关联swc后,顶层目录下添加Port和Port之间的连线,工作还是比较机械繁琐的。虽然没有图形化的操作界面,但matlab还是开放了一些接口,通过二次开发的方式快速实现。首先要获取模型的对象, archModel = autosar.arch.createModel(archModelName,true);%创建新的模型 archModel=autosar.arch.loadM原创 2021-08-13 14:07:50 · 952 阅读 · 0 评论 -
函数复用-For Each Subsystem
最近发现了一个被忽略掉的simulink库模块For Each Subsystem,在同一个子系统下用来替代函数的复用,使用起来非常便捷。结合matlab自带的例子sldemo_foreach_vectorized,简单说明一下。复用的部分封装在For Each Subsystem中,上边的输入信号Signal和Coeffs在复用模块中每次调用是不同的,但它们为同一类输入,把他们放在一个相同维度的数组(实现这个数组的输入可以通过Mux或着Vector Concatenate。)中。同时在Fo原创 2021-02-03 14:42:18 · 1710 阅读 · 0 评论 -
如何在stateflow中实现 位运算
m脚本中是有位运算函数的:bitand,bitor,bitxor...stateflow选择action language 为Matlab时,这些函数都是可以使用的:生成的代码如下图:但是,stateflow中action language 一般选择为C,这就有点蛋疼了。我在R2014a之前的版本上直接使用C的位运算符 &,| 时,都会直接转化成&&,||。位运算直接变成了...原创 2018-05-07 16:46:32 · 5015 阅读 · 2 评论 -
Simulink Merge 在Matlab R2010a版本中留下的坑
Merge的主要用法是把多个信号组合成一个信号。使用方法在help文档有详细描述。我这里主要说明一下matlab不同版本的默认设置对该block的影响。R2010a版本中Underspecified initialization detection的默认设置是:classic;Detect multiple driving blocks executing at the same原创 2018-01-22 19:10:39 · 3925 阅读 · 0 评论 -
stateflow 状态中嵌入循环的几种方式
我以求绝对值为例做说明m语音实现:注意此处的chart运行环境是Matlab ,不是C。C环境中是无法在状态机中识别if语句的,另外C中运算符 (?:),在chart中也无法识别,否则可以直接通过b=a>0?a:-a; 来实现。节点实现:还可以通过函数调用的方式实现,函数在Graphic Function或者Simulink Function中实现。原创 2018-01-03 09:52:13 · 12076 阅读 · 4 评论 -
建模规范
建模其实很自由的一项编码方式,不要太多的语法知识,简单接触过后就可以搭建功能复杂的模型生成代码供工程使用了。但是不按照一定的规范建模,结果很可能搭出来的模型可读性差、执行效率低、代码臃肿。而建模规范去一条一条的学习,枯燥不说效率也很低下。比较好的方式可以直接借助于tool来建模使之搭建的更有水平,同时学习建模规范。 使用的工具就是model advisor中的 MAAB检查, 界面如下:。原创 2017-01-17 10:51:08 · 2880 阅读 · 0 评论 -
基于模型开发总结
基于模型开发总结本Markdown编辑器使用[StackEdit][6]修改而来,用它写博客,将会带来全新的体验哦:对象: 汽车电子嵌入式应用层开发 环境: Simulink ** 优势: 1. 善于处理复杂的时序、逻辑、运算(定点化数学运算) 2. 可以基于PC完成功能验证测试 3. 自动生成的代码不存在基本的语法问题 流程: 1. 需求分析 2. 框架设计原创 2017-01-10 16:39:53 · 4315 阅读 · 0 评论 -
定点化
Simulink是有定点化工具(fixed-point tool),没有用过,因为我想生成一个不带有浮点数的代码的话只要把所有的数据类型定义为非浮点的形式就好了。 首先 要做的是找到模型中的浮点数(当然如果建模的时候没有对数据类型进行特别设置的话,默认的数据类型都是double型的浮点数)。找浮点数有两个方法:以R2014a为例,选择菜单栏中的Display/Signal & Ports/Po原创 2017-01-16 11:08:38 · 10053 阅读 · 0 评论 -
搭建Simulink模型
完成设置后就可以搭建模型了。 Code Generation 的模板一般采用Function-Call Generator模块。(也有直接对subsystem直接采用 build This Subsystem的形式生成代码,这里不推荐)如下: 生成文件 按照上篇文章描述进行的设置会生成以子系统名为名的.c和.h文件,以及rtwtypes.h。如下: Model.c即函数的源文件。 Mo原创 2017-01-10 18:15:28 · 8445 阅读 · 0 评论 -
Stateflow 状态机是怎么代码实现的
在处理时序问题上优选的就是Stateflow,利用状态之间的跳转完成时序任务的编码,非常的简洁直观高效。但是代价是有的,建模太过自由,在生成代码上可能就会产生几倍代码量。避免这个问题,就有必要仔细考虑一下模型是如何生成代码的。 简单的说就是,每个状态对应一个状态标志位,所有的状态标志位(包括整个模型所有chart)会在定义在一个结构体中。状态之间的跳转通过Switch-Case完成,每个c原创 2017-01-15 12:14:18 · 7369 阅读 · 1 评论 -
函数的复用
函数的复用可以通过以下几种方式实现: 1. 添加到lib库中 建立一个lib库,用来存放经常使用的模块,使用的时候直接从lib里边copy,生成的函数就是可以复用的。 2. chart默认可复用 嵌套在simulink模型中的chart模块是auto可reusable的,为了确保复用成功,可将Code Generation中Function packing 由默认的auto模式改为Reus原创 2017-01-15 12:13:10 · 2548 阅读 · 0 评论 -
MBD怎么给simulink设置
不同的matlab版本,有细微差别,但大体上需要对以下设置进行关注(以R2014a为例): solver: 嵌入式要求是离散的,所以需要固定步长,离散求解器。 Data Import/Export: 该项可以暂时不用关注,仿真验证需要借助inspector时需要对里边的内容进行设置 Optimization: 该项在对代码优化时需要关注,初学咱不关注 Diagnostics : 该项原创 2017-01-10 17:04:57 · 1669 阅读 · 0 评论