第二十篇,Simulink使用痛点记录

在工作实践中发现了MATLAB&&Simulink一些虽不致项目失败但的确很不方便的点,记录下来以备持续研究,并做分享;都是个人认为比较基础的能力或者容易做到的特性,MATLAB&&Simulink却没有,不知道是中了传统码农思想的毒还是什么,总之感觉MATLAB&&Simulink这种伟大产品不应该有这些缺憾。

  1. Data Inspector里有的是平滑曲线,有的是阶梯状。这个通过修改设置应该能够解决,不过我还没找到或者说没专门去找,没有需求刺激吧,暂时这么用着也不影响什么。

  2. 默认数据类型不能统一设置为single。MATLAB&&Simulink的默认数据类型是double,由于它是无类型声明的编程语言,虽说可以在用到的地方显式指定数据类型,但毕竟编程理念不是如此,所以用起来很不习惯也不方便;尤其对于嵌入式MBD开发,由于板上资源有限,尽可能地用float替换double,希望code generation后浮点类型都为single/float,但没找到可统一设置的选项,挨个变量、参数去显式声明显然不是编程的正常路数,不得不说这是MATLAB&&Simulink一个明显的瑕疵,而且亟待解决。

  3. 不支持动态、变长数据。码农们都用过malloc、new,或者std::vector等容器,可以自如地伸缩数据集的元素个数,这不光是编程中的需求,也契合现实世界。比如有一个容器存储、传输路上看到的所有汽车的属性,汽车的数量显然不固定,有多有少还可能一辆没有,这是典型的变长数据集,常规的编程语言中都是基操,但MATLAB&&Simulink竟然不支持,当然我说的是code generation的需求,这样不光内部不方便,对外做接口也很不友好,提前设定一个固定或者足够大的维度,要么难以准确确定要么设的过大导致浪费,不得不说也是又一个明显的瑕疵,而且亟待解决。

  4. 数据字典中的定义的枚举类型不能直接使用。在引用了数据字典的Simulink模型中是可以直接使用的,但假如我单独写了一个m脚本也要用相关的枚举类型,比如这个脚本用来解析存储在txt或者csv中的和该枚举类型相关的数据,并把解析结果回灌到相关Simulink模型中做仿真,这时候有强需求却不被满足,就很难受并不可思议了。尝试过,数据字典中定义的bus或者叫结构体是可以很容易导出到m文件并使用的,但枚举就不行,有什么本质差异吗?

  5. 二维或多维数组问题。在数据字典中定义了一个二维标定量,直接code generation后发现生成的.c里没有保持我设计的维度而是硬展开成了长长的一维,一下子抹去了设计中的物理含义,几乎无法使用;查询后得知,若要保持原维度设计,需要做两件事,第一在数据字典中对该参数勾选Preserve Dimension,第二将Simulink模型的列优先设置为行优先。理解一下并经调试发现,MATLAB&&Simulink默认使用列向量而非行向量,没有深究背后的数学原理和作者的设计意图,仅提一下设置方法:Configuration Parameters->Code Generation->Interface->Data exchange interface->Array layout,把默认的Column-major改成Row-major;这样虽然可行,但由于不懂原理担心改了会不会带来什么副作用,就暂且没改,不过毕竟要用二维数据所以早晚要改,持续关注吧,看看到时候究竟会发生什么。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值