中国汽车工程师之家--聚集了汽车行业80%专业人士 

论坛口号:知无不言,言无不尽!QQ:542334618 

本站手机访问:直接在浏览器中输入本站域名即可 

  • 134查看
  • 0回复

[Simulink] 既然simulink库中有Relay模块,为何还要自己开发滞回功能?

[复制链接]

该用户从未签到

发表于 26-4-2024 22:07:39 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


有铁子后台留言,simulink的模块库中有个Relay模块,可以实现滞回功能啊。直接用不就行了,怎么还要费事巴力的自己做模型,这不是闲的吗?

既然simulink库中有Relay模块,为何还要自己开发滞回功能?w2.jpg

由于问的铁子比较多,没法一个个回复,这里统一说明下原因:还真不是闲的。

Relay模块实现的基本逻辑是:通过将输入与指定的阈值进行比较,输出指定的 'on' 或 'off' 值。中继状态时的 on/off 状态不受上限和下限之间输入的影响。

既然simulink库中有Relay模块,为何还要自己开发滞回功能?w3.jpg

但是,这里有个问题,当滞回的边界不是某个特定值,而是一条曲线或一组曲线时,Relay就不太好用了。这也是我们自己建立滞回模块的初衷。

得益于simulink开放的编程环境,我们可以基于自身的使用需求及建模习惯开发类似的功能模块。

例如,用switch封装建立个简易的if-else模块,就可以提高模型的可读性,也更有利于模型界面的整理。

既然simulink库中有Relay模块,为何还要自己开发滞回功能?w4.jpg

再举个例子,对于建模时,非常常见的一个问题就是除0。虽然大多数情况下simulink不会报错,但有时候看着一个个警告也难受啊。

在某些特性的情况下仿真可能会出现奇点,导致仿真异常停止,而这种错误还极难排查。

为了防止除数为0,每次进行除法运算时,都需要对除数进行预处理,或通过+eps(极小值),或通过saturation进行除数的阈值限制。

还有一种方法就是自己建立一个除法模块。

如下图所示,根据除数的符号,将除数分别限制在(-inf,-eps)以及(eps,inf)之间,即可有效避免除0的情况。

将模型封装后写入到自定义的模块库中,这样就不用每次都要对除数进行预处理了。

既然simulink库中有Relay模块,为何还要自己开发滞回功能?w5.jpg

对于一些常用的功能,铁子们可以根据建模习惯或规范建立自定义的模型库,这样可以大大增加建模效率。

毕竟工作效率提升了,摸鱼的时间就增加了。


快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 7-5-2024 15:44 , Processed in 0.267703 second(s), 30 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.