Simulink是一个大的仿真器,从而我们可以利用Simulink进行仿真。如果想要实现从“当前值”向“目标值”按一定速率逼近,我们可以利用StateFlow实现这个功能。
实现这个功能的内部逻辑是:当前值和目标值进行比较,若当前值>目标值,则当前值递减;反之当前值<目标值,则当前值递增。
举例:当前值按照0.1/s的变化速率向目标值调节
首先,要先确定或者设置采样时间,如下图
其次,确定每次增加的StepValue。如上图,设置的采样时间是0.1s,变化速率是0.1/s,因此StepValue为0.01(每0.1s变化0.01)
最后,当前值和目标值进行判断,并递增或递减,模型如下图(第一个模型有漏洞,用第二个模型),
但是,如果用上图方式实现该功能,则会在达到目标值出现抖动或者出现锯齿。结果如下图
其原因是因为,变量TargetValue和变量CurrentValue数据类型均是single,就会导致TargetValue和CurrentValue的存在精度误差,从而比较不准确,因此在建模的时候,尽量避免在StateFlow中的“条件判断”里面使用“>、<、=”。
那怎么解决这个问题呢?可以使用两个数值相减,如下图:
结果如下图:
从而避免精度误差的问题