故障码循环显示专项

01--背景

这篇博文之前在IT模型中的信号处理与优先级控制-优快云博客介绍过,其中有一个模块是counter up模块,这个是Simulink内自带的DSP系统内的模块

该封装子系统内部无法看到逻辑,因为引用的是s-function

之前在写这篇博文时--故障码循环显示时也是直接引用的,现在重新基于需求再搭建一次故障码循环展示模块

02--需求

当前置位的故障码在一个信号中以人为规定的时间进行循环显示

03--输入输出

输入:

①故障标志位  err_flg

②故障标志位对应的故障码 err_code

输出

①故障码循环显示信号 err_display

04--模型开发

假设某个微控制器有5个故障码,分别为15,27,36,42,59,其中故障码15,36,42对应标志位置1,15,36,42以每1000ms在一个信号上显示一次

新建空白模型,并设置好求解器时间,步长等

将输入的故障码及标志位搭建好

使用选择器模块,输入为故障码数组,索引为标志位置1对应的数组,要想单独找出标志位置1的数组,需要用到find模块

选择器是基于索引为1起始的,且索引为向量,大小为5个(5个故障码)

上面相当于已经把置位对应的故障码刷选出来了,下一步如何让其按照标定的时间进行循环显示

其实可以再拉一个选择器,让其输入为刚刚搭建的选择器的输出,索引为对应的置位的标志位索引的计数即可,上述例子中有3个故障进行了置位,那么就让索引从1,2,3(为什么索引不是0,1,2,是因为现在我们的选择器索引都是从1开始而不是0)进行循环即可

注意上述find模型索引也从1开始

用状态机搭建一个计数模块,即从1开始计数,每隔标定时间进行自增

模型运行后,初始化输出为1,大于标定设置时间跳转到累积模块,输出此时加1,经过一半的标定时间跳转到中间模块,在经历另外一半标定时间后跳回累积模块,此时因为进入条件为输出加1,此时输出为2,一直循环下去,直到reset置1后,输出清0,reset什么时候置1,那就是同时置位的故障码达到最大个数的时候。

示波器已经按照我们设定的时间在1,2,3中进行循环了

现在只需要再引入另外一个选择器就可以实现故障码循环显示了

上面常数100即为可标定的显示时间间隔

示波器输出

该模型放在资源中

------------------------------------------------补充------------------------------------------------------------------------

2024.12.30  上午

如果仿真到这里的同学会发现,如果故障码个数很多并且当前一直有不少于2个故障置位,那么上述模型确实不会有什么问题,但是如果只有一个故障置位,或者没有任何故障置位,模型会怎么样??报错!

只有1个故障置位,理论上就没有循环可言就应该显示一个故障就行了,而上述模型却不能完成这样的功能,因为,状态机的设置会导致选择器的输入只有一个故障码,而索引必须要有2个才能进行reset,这就导致选择器的输入个数与索引个数不匹配而报错。

当没有故障置位时呢?直接报错,因为状态机内初始化就是至少有一个索引了而输入什么都没有,这种情况需要引入If子系统把没有故障进行分离。

经过如下调整,已经能够覆盖所有当前故障的个数了

外观:

子系统内部:

状态机:

没有故障码时仿真结果:

故障码为1个时仿真结果:

故障码为5个时仿真结果:

---------------------------------------补充----------------------------------------------------------

2024.12.30 下午

经过仿真测试发现,上述更改的模型虽然已经能够支持需求,但是只能支持静态索引数是固定的值,即当有3个故障置位,但是在后续该3个故障置位不能发生改变,比如恢复了一个变成2个或者新增一个变成了4个,模型都会报错,原因还是因为索引和故障码不匹配,故引入如下逻辑:

引入条件u1和u2,u2和原来一样,u1若不等于u2说明故障有新增或者恢复,重新再走一遍子系统

但是注意,需要把if子系统内的保持held改成reset,不改会影响变量的索引从而报错

上述模型新增了显示状态量,只有当状态等于1时说明此刻有新增或恢复故障,0代表没有故障,2为维持

在跑一遍发现正常了,但是故障维持的标定时间只有在状态等于2时稳定的时候才有效了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值