一种总线循环发送控制器故障码的故障检测系统及方法与流程

文档序号:25493491发布日期:2021-06-15 22:01阅读:320来源:国知局
一种总线循环发送控制器故障码的故障检测系统及方法与流程

本发明涉及汽车总线自动诊断的技术领域,具体为一种总线循环发送控制器故障码的故障检测系统及方法,主要用于循环发送故障码。



背景技术:

汽车自动诊断各部分的故障情况能及时反馈汽车的各功能能否正常工作,极大地提高了汽车在使用过程中的安全性,而自动诊断是通过can总线发送故障码的形式进行的。公开号为cn106814731a的专利文献公开了一种车辆故障码读取方法、装置及车辆故障统计系统,实时读取整车电子控制器的故障状态标记信号;其中,故障状态标记信号为车载电子控制器内部自定义的信号,用于标记内部是否出现故障;当任一电子控制器的故障状态标记信号切换为故障状态时,发送读取整车故障码请求指令至电子控制器,其中,标记信号至少标记故障或非故障两种状态;获取各个电子控制器返回的整车故障码,并将整车故障码上传到后台服务器;其中,电子控制器接收到读取整车故障码请求指令后,返回内部监测到的故障码。但这种方式往往是诊断出1个故障后,总线上会持续发送当前故障码为1,且若诊断出多个故障时,因会加大网络负载,总线无法同时发送2个故障码,会选择多个故障中最严重的的故障码发送,这种诊断方式不利于在最快的时间内发现此刻所有的故障,需要按照严重程度依次解决故障码,不利于对故障的分析,降低了工作效率。



技术实现要素:

本发明的目的在于提供一种总线循环发送控制器故障码的控制系统,主要用于循环发送故障码。

本申请为了解决上述技术问题,提供了一种总线循环发送控制器故障码的控制方法,包括故障检测模块和故障发送模块,其特征在于:所述故障检测模块,用于检测所述控制器所有故障节点的故障状态;所述故障发送模块,根据所述故障检测模块的检测结果将控制器的所有故障节点的故障信息发送至串行总线;并且使得发生故障的故障节点的故障信息占用总线的时长大于没有发生故障的故障节点的故障信息。

作为优选,所述故障发送模块包括一计数器,所述计数器的计数范围被均分为若干个数值区间;各数值区间分别与控制器的各故障节点一一对应;所述计数器每执行一次累加操作将触发所述故障发送模块发送一次故障信息至所述串行总线;所述累加操作的累加阶梯值根据计数器的当前计数值tn所在数值区间对应的故障节点确定:如果对应的故障节点没有发生故障,则累加阶梯值为t1;如果对应的故障节点发生故障,则累加阶梯值为t2;t1<t2。

作为优选,所述t1的值为1,所述t2的值根据所述数值区间的宽度值确定。

作为优选,所述故障发送模块还包括故障信息生成单元;所述故障信息生成单元根据计数器的当前计数值tn所在数值区间对应的故障节点的故障状态确定输出到串行总线的故障信息:如果对应的故障节点没有发生故障,则故障信息为0;如果对应的故障节点发生故障,则故障信息为故障节点对应的故障码。

作为优选,所述故障信息生成单元还包括与各故障节点一一对应的故障码生成器,所述故障码生成器存储对应故障节点的故障码;所述故障信息生成单元根据计数器的当前计数值tn,触发对应的故障生成器:如果故障生成器对应的故障节点没有发生故障,则输出0到串行总线;如果故障生成器对应的故障节点发生故障,则输出其存储的故障码到串行总线。

本申请还提供了一种总线循环发送控制器故障码的方法,其特征在于,包括:

s1故障检测步骤,故障检测模块检测所述控制器所有故障节点的信号;

s2故障发送步骤,故障发送模块根据步骤s1的检测结果将控制器的所有故障节点的故障信息发送至串行总线,并且使得,发生故障的故障节点的故障信息占用串行总线的时长大于没有发生故障的故障节点的故障信息。

作为优选,所述故障发送模块包括一计数器;所述步骤s2中,各故障节点的故障信息的发送均包括:

步骤s21.根据故障节点的故障状态确定计数器的累加阶梯值:如果故障节点没有发生故障,则累加阶梯值为t1;如果故障节点发生故障,则累加阶梯值为t2;t1<t2;

步骤s22.计数器执行累加操作,更新当前计数值tn;

步骤s23.将故障节点的故障信息发送至串行总线;

步骤s24.重复执行步骤s21-s23,直到计数器的当前计数值tn大于第一计数值。

作为优选,所述故障发送模块包括一计数器;所述计数器的计数范围被分为若干个数值区间;各数值区间分别与控制器的各故障节点一一对应;所述步骤s2中包括:

步骤s20.根据计数器的当前计数值tn所在的数值区间,确定对应的故障节点;

步骤s21.根据步骤s20确定的故障节点的故障状态确定计数器的累加阶梯值:如果故障节点没有发生故障,则累加阶梯值为t1;如果故障节点发生故障,则累加阶梯值为t2;t1<t2;

步骤s22.计数器执行累加操作,更新当前计数值tn;

步骤s23.根据步骤s20确定的故障节点的故障状态,发送故障节点的故障信息发送至串行总线;

步骤s24.如果计数器的当前计数值tn超出所述计数范围,则将计数器清零,完成步骤s2;否则,执行s20。

作为优选,所述t1的值为1,所述t2的值为所述数值区间的宽度值。

作为优选,所述故障发送模块还包括故障信息生成单元;所述故障信息生成单元还包括与各故障节点一一对应的故障码生成器,所述故障码生成器存储对应故障节点的故障码;所述步骤s22中,还将所述计数器的当前计数值,发送至所述故障信息生成单元;所述步骤s23中,所述故障信息生成单元根据计数器的当前计数值tn,触发对应的故障码生成器:如果故障生成器对应的故障节点没有发生故障,则输出0到串行总线;如果故障生成器对应的故障节点发生故障,则输出其存储的故障码到串行总线。

本发明具有如下技术效果:

1.通过故障检测模块检测故障节点的故障状态以及故障发送模块根据故障检测模块检测结果发送故障信息,实现发送故障的故障节点的故障信息占用串行总线的时长大于没有发生故障的故障节点的故障信息。使得总线被占用用于发送故障码时,能够将所有类型故障(即所有故障节点的故障状态)均显示出来。同时,有故障的节点故障信息占用总线时间长,更有利于发生的故障类型被及时发现和获取。

2.计数器上的各个区间分别于控制器故障节点一一对应,并通过累加操作计算当前计数值tn,并根据tn所在数值区间对应的故障节点确定累加阶梯值,使得发生故障的故障节点对应区间的累加阶梯值小于没有发送故障的故障节点对应区间的累加阶梯值。而计数器上各个区间的范围均相同,当累加阶梯值小时,累加次数多,故障发送模块发送到串行总线的次数也多,相反,若累加阶梯值小,则故障发送模块发送到串行总线的次数少,进一步实现了发生故障的故障节点所对应的故障信息在串行总线上停留的时间较长,而没有发生故障的故障节点所对应的故障信息在串行总线上停留的时间较短。除此之外,计数器每执行一次累加操作就触发故障发送模块发送一次故障信息至串行总线,实现了循环发送故障码,解决了发送多个故障信息时网络负载过大的问题。

3.故障节点发生故障时,所对应计数器区间的累加阶梯值t1值为1,可以实现串行总线上停留足够长的时间。故障节点没有发生故障时,所对应计数器区间的累加阶梯值t2值根据数值区间的宽度值确定,一般设为宽度值的因数,便于累加若干次t2时刚好累加完,且设为数值区间的宽度值或宽度值的一半为佳,以实现在在串行总线上停留时间较短。

4.故障发送模块的故障信息生成单元通过计数器上当前计数值tn所在数值区间对应的故障节点的故障状态确定输出到串行总线的故障信息,实现没有发生故障时故障信息为0,发生故障时故障信息为故障节点所对应的故障码。可以直观地区别出该故障节点有无出现故障,便于观察和检查。

5.故障信息生成单元的故障生成器则根据计数器当前计数值tn触发相对应故障节点的故障信息,实现了故障节点与故障信息相匹配的目的。

附图说明

图1发送模块方法流程图。

图2发送模块计数器工作图。

图3发送模块故障标记值与传输组对应图。

图4发送模块触发图。

具体实施方式

这里使用的术语仅用于描述特定实施例的目的,而不意图限制本发明。除非另外定义,否则本文使用的所有术语具有与本发明所属领域的普通技术人员通常理解的相同的含义。将进一步理解的是,常用术语应该被解释为具有与其在相关领域和本公开内容中的含义一致的含义。本公开将被认为是本发明的示例,并且不旨在将本发明限制到特定实施例。

实施例一

本实施例提供一种总线循环发送控制器故障码的故障检测系统,主要用于循环发送故障码。该系统包括故障检测模块和故障发送模块,故障检测模块,用于检测所述控制器所有故障节点的故障状态;故障发送模块,根据故障检测模块的检测结果将控制器的所有故障节点的故障信息发送至串行总线;并且使得发生故障的故障节点的故障信息占用总线的时长大于没有发生故障的故障节点的故障信息。

故障检测模块检测控制器故障节点的故障状态,即有无发生故障,若检测到故障,则fltcod_pre=1,若没有检测到故障,则fltcod_pre=0。故障发送模块包括一计数器,计数器的计数范围被均分为若干个数值区间;各数值区间分别与控制器的各故障节点一一对应;所述计数器每执行一次累加操作将触发所述故障发送模块发送一次故障信息至所述串行总线;所述累加操作的累加阶梯值根据计数器的当前计数值tn所在数值区间对应的故障节点确定:如果对应的故障节点没有发生故障,则累加阶梯值为t1;如果对应的故障节点发生故障,则累加阶梯值为t2;t1<t2。计数器上每个数值区间的宽度值均相同,若数值区间的宽度值为n,如图2,若当前故障节点发生故障,因有故障时fltcod_pre=1,无故障时fltcod_pre=0,计数器通过计算fltcod_pre是否大于0.5来判断是否检测到故障,若fltcod_pre>0.5,则当前故障节点有故障,累加阶梯值为t1,则对当前故障节点共统计n/t1次,同样,若fltcod_pre<0.5,则当前故障节点没有故障,累加阶梯值为t2,则对当前故障节点共统计n/t2次,t1<t2,也就是n/t1>n/t2,本实施例中,t1的值为1,t2的值根据数值区间的宽度值确定。当然,t1的值也可根据需求自定,而t1和t2的值均为数值区间的宽度值n的因数,使得在统计当前故障节点时,tn值累加若干整数次后,刚好统计完当前故障节点,其中,n为计数器上累加次数。而本实施例中设t1的值为1也是保证统计时所对应的当前故障节点检测到故障码时,统计的次数足够多,也便于在后面触发故障发送模块发送故障信息的次数足够多,进而保证故障发送模块发送到串行总线上的次数较多,使得该故障节点的故障信息停留时间较长,便于串行总线进行分析,而t2的值大于t1的值,使得没有发生故障的故障节点多对应的tn值累加次数较少,使得触发故障发送模块发送故障信息的次数较少,进而在串行总线上停留时间较短,节省时间,提高工作效率。

计数器上每统计出一个tn值,相应的就要在串行总线上输出一个故障信息,本实施例中,故障发送模块还包括故障信息生成单元;故障信息生成单元根据计数器的当前计数值tn所在数值区间对应的故障节点的故障状态确定输出到串行总线的故障信息:如果对应的故障节点没有发生故障,则故障信息为0;如果对应的故障节点发生故障,则故障信息为故障节点对应的故障码。故障信息生成单元还包括与各故障节点一一对应的故障码生成器,故障码生成器存储对应故障节点的故障码;故障信息生成单元根据计数器的当前计数值tn,触发对应的故障生成器:如果故障生成器对应的故障节点没有发生故障,则输出0到串行总线;如果故障生成器对应的故障节点发生故障,则输出其存储的故障码到串行总线。在触发故障生成器时,根据当前计数值tn所在的数值空间触发相应的故障生成器,而由于每个数值空间均对应相应的故障节点,而同样每个数值空间均对应相应的故障生成器,因而,故障节点也就对应相应的故障生成器内存储的故障码。进而故障信息单元通过判断tn值所在数值区间所对应的故障节点是否发生故障为判断根据,输出相应的故障信息,而输出0则表示该故障节点没有发生故障,在发送到串行总线时,便于串行总线进行进一步地分析。

本实施例还提供一种总线循环发送控制器故障码的故障检测方法,该方法包括:

s1故障检测步骤,故障检测模块检测所述控制器所有故障节点的信号;

s2故障发送步骤,故障发送模块根据步骤s1的检测结果将控制器的所有故障节点的故障信息发送至串行总线,并且使得发生故障的故障节点的故障信息占用串行总线的时长大于没有发生故障的故障节点的故障信息。

本实施例中通过使得发生故障的故障节点的故障信息占用串行总线的时长大于没有发生故障的故障节点的故障信息,来满足串行总线有足够的时间分析发生故障的故障节点的故障信息,而减少没有发生故障的故障节点的故障信息尽可能减少资源的占用,提高工作效率。

本实施例中,故障发送模块包括一计数器;步骤s2中,各故障节点的故障信息的发送均包括:步骤s21.根据故障节点的故障状态确定计数器的累加阶梯值:如果故障节点没有发生故障,则累加阶梯值为t1;如果故障节点发生故障,则累加阶梯值为t2;t1<t2;步骤s22.计数器执行累加操作,更新当前计数值tn;步骤s23.将故障节点的故障信息发送至串行总线;步骤s24.重复执行步骤s21-s23,直到计数器的当前计数值tn大于第一计数值。从计数器从计数值tn为0开始统计,即t0=0,也相当于从第一个故障节点开始统计,通过步骤s21、s22、s23的步骤,实现对第一个故障节点的故障发送过程,计数器在统计tn值时当统计完与第一故障节点时继续统计下一个故障节点,中间不存在时间差。而除此之外,本实施例中,故障发送模块包括一计数器;计数器的计数范围被分为若干个数值区间;各数值区间分别与控制器的各故障节点一一对应;步骤s2中包括:步骤s20.根据计数器的当前计数值tn所在的数值区间,确定对应的故障节点;步骤s21.根据步骤s20确定的故障节点的故障状态确定计数器的累加阶梯值:如果故障节点没有发生故障,则累加阶梯值为t1;如果故障节点发生故障,则累加阶梯值为t2;t1<t2;步骤s22.计数器执行累加操作,更新当前计数值tn;步骤s23.根据步骤s20确定的故障节点的故障状态,发送故障节点的故障信息发送至串行总线;步骤s24.如果计数器的当前计数值tn超出所述计数范围,则将计数器清零,完成步骤s2;否则,执行s20。计数器的计数范围根据控制器故障节点总数而设,而每个数值区间的宽度值均一致,也就使得计数器的计数范围至少为控制器总故障节点数乘以单个数值区间的宽度,本实施例中为了保证计数器已统计完所有数值区间所对应的故障节点的tn值,即要保证tn值等于或大于计数器的计数范围,即图2“1/z”表示返回上一次统计的tn值,进而通过判断tn是否大于51000来判断是否超出计数器计数范围,其中,图2中为控制器总故障节点数为500个为例的,即计数器计数范围为500×100=50000,而图中设为51000,确保所有故障节点均被统计完毕。当步骤s2完成后,计数器清零,即tn值从零开始进行下一轮的统计,进行新一轮的触发与发送步骤,不断循环,使得控制器上总的故障节点的状态一轮轮不断被检测与发送,以自动完成对各个故障节点的实时检查,便于及时发现故障,提高行车安全。其中,t1的值为1,t2的值为所述数值区间的宽度值。保证计数器上在统计tn值时,若该数值区间所对应的故障节点发生故障,则每次累加1,直至累加到等于该数值区间的最后一个数值为止,其中因每个tn值均触发发送模块发送一次故障信息到串行总线,也使得该数值区间所对应的故障节点的故障信息在发送到串行总线的次数足够多,进而保证总线进一步对该故障信息进行分析与处理。而t2值则为数值区间的宽度值为佳,尽可能保证在发送到串行总线的次数少,占用较少的空间与时间。其中,故障发送模块还包括故障信息生成单元;故障信息生成单元还包括与各故障节点一一对应的故障码生成器,故障码生成器存储对应故障节点的故障码;步骤s22中,还将所述计数器的当前计数值,发送至所述故障信息生成单元;步骤s23中,故障信息生成单元根据计数器的当前计数值tn,触发对应的故障码生成器:如果故障生成器对应的故障节点没有发生故障,则输出0到串行总线;如果故障生成器对应的故障节点发生故障,则输出其存储的故障码到串行总线。通过计数器上统计的tn值来触发其所在数值区间所对应故障节点所对应的故障信息,完成故障信息的触发与发送。

根据上述方法,本实施例中以控制器总故障节点数为500,计数器数值区间的宽度值为100,计数器的周期为10ms为例:

计数器从t0=0开始统计tn值,其中n为统计次数,当[0,100]的数值区间所对应的故障信息检测到故障时,t1=1,n=1,t1=1,计数器在计算出tn值时需要输出到计数器上,以便于实现对对故障码故障码生成器的触发,在计数器上输出tn值时,由于计数器的周期是10ms,输出时则按秒的单位输出,因此tn值需乘以0.01输出,图2中标识“0.01”处即实现该功能。本实施例中为了便于操作,对tn值向上取整输出,即,当计数器计算出的t1=1时,输出到计数器上时先经过单位换算成0.01,再向上取整成1,最后输出到计数器上的数值为1,t2=2,输出到计数器上的数值也为1,依次到t100=100时,输出到技术器上的数值依旧为1。其中,为了方便,故障码生成器上直接存储计数器上输出的tn值为故障信息,减少了利用其它操作存储不同故障信息的步骤,节省时间,同时因计数器上位于同一数值区间的tn值输出到计数器上的数值均是一样的,便于分辨。为了便于统计tn值,本实施例中将0也设于第一数值区间内,即t0=0开始,t0=0,属于[0,100]的数值区,该数值区间对应第一个故障节点,该故障节点发生故障,确定累加阶梯值为t1=1,t1=t0+1=1,计数器上输出处理后的t1值1,1触发相应的故障码生成器,故障码生成器直接将1存储为本身的故障信息,进而故障信息生成单元输出故障信息1到串行总线。同上,t2=2,故障信息生成单元输出故障信息1到串行总线,依次到t100=100,则进入下一个故障节点的触发。而当tn=0所对应数值区间[0,100]所对应的故障节点没有发生故障,则t2=50,tn=0+50=50,最后处理后输出到计数器上的数值为1,触发相应的故障码生成器,因故障码生成器所对应的故障节点没有故障,则故障信息生成单元发生0到串行总线,上述步骤如图1。

实施例二

基于实施例一,本实施例为了操作方便,将故障信息生成单元封装成了若干个封装组,每个封装组均设有初始值,即fltcodoffset,本实施例中依旧按控制器总故障节点数为500,计数器周期为10ms,封装组的个数为10为例(可根据需求设置):

本实施例中,设有10封装组,每个封装组内的故障码生成器数量均为50个。其中,在为每个封装组设初始值时,10个封装组的初始值分别为fltcodoffset=0、fltcodoffset=50、fltcodoffset=100、…、fltcodoffset=450。初始值时根据控制器故障节点总数进行设置,而刚好计数器统计的tn值在[1,100]范围内输出值为1,即计数器上输出为1的数值均对应于第1个故障节点,[101,200]范围内输出值为2,计数器上输出为2的数值均对应于第2个故障节点,…,[49990,50000]范围内输出值为500,计数器上输出为1的数值均对应于第500个故障节点,刚好与故障节点数相匹配。因此,本实施例中通过判断计数器上统计的tn经处理后输出的值属于哪个封装组来触发相应封装组内的故障码生成器,其中,fltcodoffset=0为(0,50]范围内的封装组fltcod1的初始值,fltcodoffset=50为(50,100]范围内的封装组fltcod2的初始值,…,fltcodoffset=450为(450,500]范围内的封装组fltcod10的初始值,将每个封装组设置的初始值作为tn属于哪个封装组的判断基础。本实施例中将技术器上输出的值用fiti表示,fiti触发相应封装组内的故障生成器需要设置条件,根据封装组内的故障码生成器及初始值,如图3,设:

若fiti在(0,50]范围内,则通过触发器fltsubsystrig1触发封装组fltcod1;若fiti在(50,100]范围内,则通过触发器fltsubsystrig2触发封装组fltcod2;

若fiti在(450,500]范围内,则通过触发器fltsubsystrig10触发封装组fltcod10。

以下就根据封装组fltcod1作解释,如图4:

若fiti=1(即“case[1]:”),则触发其对应的触发故障生成器flttrig1;

若fiti=2,则触发其对应的触发故障生成器flttrig2;

若fiti=50,则触发其对应的触发故障生成器flttrig50。

若fiti=1时,则对应故障码生成器flttrig1生成故障码为1,若故障生成器所对应的故障节点有故障,则将生成的故障码1发送到串行总线,若故障生成器所对应的故障节点没有故障,则发送0到串行总线。

虽然描述了本发明的实施方式,但是本领域普通技术人员可以在所附权利要求的范围内做出各种变形或修改。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1