一种故障代码(DTC)存储与回读的优化方法与流程

阅读: 评论:0


一种故障代码(dtc)存储与回读的优化方法
技术领域
1.本发明涉及汽车技术领域,特别是涉及一种故障代码(dtc)存储与回读的优化方法。


背景技术:



2.当应用软件层包含很多软件组件(swc)的时候,不同swc又根据功能被划分到不同的代码分区(core或核)中。分代码分区(分核)旨在将实现同一功能的swc划分到同一核,尽量避免函数跨核调用,分核可提高资源利用率并降低硬件负载。当故障发生时,涉及多个故障代码(dtc)置位,就会出现不同核间函数跨核调用的问题,不同核的swc检测到故障置位(记录当前的故障状态到基础软件层bsw)后,会跨代码分区(core或核)调用基础软件层函数。不同的swc均调用基础软件层函数,会导致代码运行的实时性较差,当同一时间内多个故障发生时,因每个核代码运行都是有一定的顺序,就会导致程序运行的实时性很差,架构层级表现为杂乱无章。以上实现方式使应用软件层(asw)功能实现和基础软件层(bsw)耦合性较高,同时无法并行开发。asw功能开发时,同时跨代码分区调用会增加另一代码分区的运算负载;而且这种开发方式下,基础软件层和应用软件层在功能开发时没有办法解耦(降低模块间的耦合度),应用软件层依赖于基础软件层函数,基础软件层没有配置完之前,应用软件层没有办法验证功能是否可行依赖于基础软件层函数,只有基础软件层开发完毕,asw才可进行相应的开发工作,导致开发活动必须串行进行,开发效率低下。


技术实现要素:



3.鉴于以上所述现有技术的缺点,本发明的目的在于提供一种故障代码(dtc)存储与回读的优化方法,用于解决现有技术中的开发活动没有办法并行进行,开发效率低下的问题。
4.为实现上述目的及其他相关目的,本发明提供一种故障代码(dtc)存储与回读的优化方法,引入中间软件组件实现诊断功能的swc(vcdtc swc)作为中间桥梁,来统一调用基础软件层函数。该swc和基础软件层放置于同一代码分区(core或核)中,应用软件层asw只需将相应dtc的asw检测的故障状态(eventstatus)通过标准接口s/rport(sender/receiver port,标准的autosar接口)发送给vcdtc,vcdtc通过基础软件层服务组件的函数调用储存及回读相应的dtc。引入该swc后,asw通过s/r port与 vcdtc进行交互,无需直接调用基础软件层函数;同时,引入该swc后,asw无需直接和bsw交互,只需asw和vcdtc交互接口确定好即可进行开发活动。
5.于本发明的一实施例中,一种故障代码(dtc))存储与回读的优化方法,包括:
6.应用软件层(asw);
7.基础软件层(bsw);和
8.中间软件组件,所述基础软件层和所述中间软件组件设置于第一代码分区中,所述中间软件组件用于接收所述应用软件层发出的指令,然后所述中间软件组件根据所述指
令调用所述基础软件层相应的函数并将执行结果返回所述应用软件层。
9.于本发明的一实施例中,所述应用软件层通过标准接口同所述中间软件组件进行数据交换。
10.于本发明的一实施例中,所述应用软件层包括至少一个普通软件组件,所述基础软件层包括至少一个服务组件,所述普通软件组件通过所述中间软件组件与相应的所述服务组件进行信息交互,实现相应功能。
11.于本发明的一实施例中,当所述普通软件组件需要向所述服务组件发送指令和数据来执行相应功能时,所述普通软件组件通过所述标准接口向所述中间软件组件发出所述指令和数据,所述中间软件组件依照约预定的对应关系,调用所述服务组件提供的对应函数,实现所述预定功能。
12.于本发明的一实施例中,所述普通软件组件为故障检测组件,所述服务组件为故障事件管理器(dem),所述故障检测组件通过所述中间软件组件与所述故障事件管理器交换故障代码,实现所述故障代码的储存和回读。
13.于本发明的一实施例中,所述应用软件层包括若干个所述普通软件组件。
14.于本发明的一实施例中,所述若干个普通软件组件依据功能、相关度划归不同的第二代码分区,所述应用软件层包括若干个所述第二代码分区,该若干个所述第二代码分区彼此相互独立,负责不同的功能。
15.于本发明的一实施例中,所述基础软件层包括若干个所述服务组件,以对应所述应用软件层的所述若干个普通软件组件来实现不同的功能。
16.于本发明的一实施例中,所述第二代码分区中对应的所述普通软件组件检测到故障,当需要储存故障代码时则将所述标准接口的变量赋予一个数值,并通过所述标准接口传送到所述中间软件组件,由所述中间软件组件通过所述服务组件储存到所述第二代码分区,当需要回读所述故障代码时,所述中间软件组件通过所述服务组件获取相应的故障代码状态值并通过所述标准接口上传给所述应用软件层。
17.于本发明的一实施例中,所述第二代码分区中相应的所述普通软件组件检测到故障,当需要储存所述故障代码时则对事件状态变量赋予第一数值,并通过所述标准接口传送到所述第一代码分区的所述中间软件组件,由所述中间软件组件依据所述事件状态变量调用同一代码分区的所述服务组件的对应函数储存所述故障代码,当所述普通软件组件需要回读所述故障代码时,所述中间软件组件调用所述服务组件的对应函数读取所述故障代码,对故障代码状态变量赋予第二数值,并通过所述标准接口传回至所述普通软件组件,所述普通软件组件依据所述故障代码状态变量完成所述故障代码的回读。
18.如上所述,本发明的一种故障代码(dtc)存储与回读的优化方法,具有以下有益效果:
19.1)引入实现诊断功能的swc(vcdtc swc)后,所有asw对应的eventstatus以 s/r port的形式打包一块发给该swc,函数调用均通过该swc来进行。这种方案可使 asw(应用软件层)同bsw(基础软件层)解耦,asw无需直接和bsw交互,asw和 vcdtc交互接口确定好后,asw与bsw开发活动上可并行进行。功能解耦所带来的最大好处是开发活动并行进行,开发链路不同部分之间不干扰,可提高开发效率,缩短开发周期;
20.2)vcdtc swc和基础软件层dem(基础软件层诊断管理模块)放置于同一核中,函数
调用均在同一核内完成。此种方式避免了函数跨核调用,同一核中统一由vcdtc来直接调用函数可提高实时性及响应性。
附图说明
21.图1显示为现有技术的一种故障代码(dtc)存储与回读的开发方式示意图。
22.图2显示为本发明的一种故障代码(dtc)存储与回读的优化方法的实现路径示意图。
23.图3显示为本发明的一种故障代码(dtc)存储与回读的优化方法的原理图。
具体实施方式
24.以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其它优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。还应当理解,本发明实施例中使用的术语是为了描述特定的具体实施方案,而不是为了限制本发明的保护范围。下列实施例中未注明具体条件的试验方法,通常按照常规条件,或者按照各制造商所建议的条件。
25.请参阅图1至图3。须知,本说明书所附图式所绘示的结构、比例、大小等,均仅用以配合说明书所揭示的内容,以供熟悉此技术的人士了解与阅读,并非用以限定本发明可实施的限定条件,故不具技术上的实质意义,任何结构的修饰、比例关系的改变或大小的调整,在不影响本发明所能产生的功效及所能达成的目的下,均应仍落在本发明所揭示的技术内容所能涵盖的范围内。同时,本说明书中所引用的如“上”、“下”、“左”、“右”、“中间”及“一”等的用语,亦仅为便于叙述的明了,而非用以限定本发明可实施的范围,其相对关系的改变或调整,在无实质变更技术内容下,当亦视为本发明可实施的范畴。
26.autosar是automotive open system architecture的缩写,是一种开发标准。在 autosar软件架构中,汽车嵌入式系统软件自上而下分别为应用软件层(applicationsoftware layer,asw)、运行时环境(runtime environment,rte)、基础软件层(basicsoftware layer,bsw)和微控制器(microcontroller)。为保证上层与下层的无关性,在通常情况下,每一层只能使用下一层所提供的接口,并向上一层提供相应的接口。
27.首先请参阅图1,市面上主流主机厂诊断实现方案中dtc存储与回读方案如下:asw 通过接收电池、电机等故障标志位、bsw上传的诊断接口或应用软件层逻辑仲裁来判断是否满足故障条件来置位相应的asw检测的故障状态(eventstatus)。预定义的各数值含义为0 代表dem_event_status_passed(正常),1代表dem_event_status_failed (故障),2代表dem_event_status_prepassed(预正常)3代表 dem_event_status_prefailed(预故障),调用基础软件层set_eventstatus(根据故障状态eventstatus置位dtc)函数以置位(记录当前的故障状态到基础软件层bsw)故障状态,当检测到eventstatus=3(prefailed,预故障)时置位相应的dtc。之后,基础软件层会将置位的dtc存储在相应的dem分区中。dtc回读时,asw调用get_eventstatus函数 (用于回读相应的dtc状态),以读取相应的dtc状态值供应用软件层使用。
28.接下来请参阅图2,本发明提供一种dtc存储与回读的优化方法的实现路径:第二代码分区(core1)的普通软件组件(asw_swc,应用软件层实现功能的最小单元)检测到故障,当需要储存故障代码(dtc)时,对事件状态变量(eventstatus)赋予第一数值 (0/1/2/3),并通过标准接口(s/r port)传送到第一代码分区(core4)的中间软件组件 (vcdtc swc),由中间软件组件(vcdtc swc)依据所述事件状态变量(eventstatus) 调用同一代码分区的服务组件dem的对应函数dem_seteventstatus(用于置位相应的dtc 状态)储存故障代码,当普通软件组件(asw_swc)需要回读故障代码(dtc)时,中间软件组件(vcdtc swc)调用服务组件dem的对应函数dem_geteventstatus读取故障代码(dtc),对故障代码状态变量(dtc_status)赋予第二数值(dtc状态),并通过标准接口传回普通软件组件(asw_swc),普通软件组件依据故障代码状态变量 (dtc_status)完成故障代码的回读。回读为当前的故障状态是否记录成功,即中间层通过调用bsw的dem_geteventstatus函数获取dtc当前的值是否记录下来(或记录的值是几),通过函数调取bsw里对应的dtc,以确认dtc里的状态是否记录成功。然后获取相应的dtc值,赋值给dtc_status由s/r port传送到asw。
29.具体来说,当应用软件层(asw)检测到故障成立并且满足诊断使能条件时,从应用软件层将port:eventstatus赋值给autosar的标准接口(s/r port),然后发送给中间层的 vcdtc swc,中间层的vcdtc swc根据eventstatus的具体参数值(coding值)调用dem 函数dem_seteventstatus(dtc_software_label,eventstatus)(dtc_software_label是具体的dtc变量名,软件内部为dtc对应的软件标识),dem检测eventstatus=3则为故障确认时间,避免故障误报(debounce),一段时间后置位dtc到bsw基础软件层中,记录当前asw检测到发生故障,并进行dtc存储。
30.当asw需要回读故障状态,dtc状态进行逻辑处理时,中间层的vcdtc调用dem函数dem_geteventstatus(dtc_software_label)从bsw中的dtc模块中获取相应dtc状态,并赋值给s/r port:dtc_status,通过该接口上传给asw,asw结合接口进行判断及逻辑处理。
31.asw判断故障码dtc置位的条件,一旦dtc置位的条件满足,core1的asw_swc会将一个变量out赋值为3,否则将out赋值为2。asw_swc存储dtc的条件为,只有存储 dtc的条件满足后,才能将out的值赋值给eventstatus这个变量,否则就给这个变量赋值 0。然后asw将eventstatus这个变量发给vcdtc这个swc,最后用eventstatus这个变量在这个swc中调用dtc存储和读取的函数。
32.当switch=1时,eventstatus=3。即,当存储dtc的条件满足时,给事件状态变量赋予一个预定数值。接口变量eventstatus_1是储存dtc时,asw给到vcdtc的一个s/r port,它有0/1/2/3四个值,但同一时刻只能是其中一个值。同样的道理,dtc_status1就是回读 dtc时,vcdtc给到asw的一个s/r port,它同样有0/1/2/3四个值,但同一时刻只能是其中一个值。
33.进一步具体来说,车辆使用过程中会自动执行实时故障检测,或者车辆维护人员也会主动发起故障检测,检测过程中,对每个预定的检测点逐个进行检测。对于其中某一检测点,当应用软件层(asw)负责故障检测的普通软件组件(swc)检测到有故障时,给output 变量赋值3,此处数值3表示prefailed,即初步故障状态,还需要进一步确认;当没有检测到故障时,则给output变量赋值2,此处数值2表示prepassed,即初步正常状态,也还需要进一步确认。
34.此时,如果车辆自动控制器需要记录此检测结果,或者维护人员需要车辆控制器记录此检测结果,那么故障检测swc会将switch1置1,在switch1=1时,swc将output的数值赋予eventstatus变量,鉴于output的数值是2或者3,eventstatus的数值也是2或者3。
35.然后,故障检测swc将eventstatus通过autosar标准接口s/r port传给中间软件组件vcdtc。vcdtc收到eventstatus后,判断到eventstatus不等于0时,就调用基础软件层 (bsw)故障事件管理器(dem)的接口函数dem_seteventstatus,将eventstatus传给 dem。dem收到eventstatus,在去抖动(debounce)处理后,在故障代码(dtc)储存区将与检测点对应的检测结果储存下来,如果确定有故障,则将相应的故障标志置位,如果确定检测结果正常,则将相应的故障标志清除。其中,去抖动处理过程为,dem第一次收到某个eventstatus时,并不立即储存,而是等到数次(例如可以设定为3次)收到相同的 eventstatus时,才对eventstatus作确认并储存。
36.vcdtc收到eventstatus后,判断到eventstatus不等于0时,就调用dem的接口函数 dem_geteventstatus,获得dtc状态值。vcdtc将获得的dtc状态值赋予dtc_status变量,通过s/r port传给故障检测swc,供车辆自动控制器或者维护人员使用。
37.由上可见,中间软件组件vcdtc的引入,避免了跨代码分区的函数调用,提高了软件程序执行的实时性能。同时,应用软件层可以与基础软件层在功能开发上解耦,开发工作可并行开展,极大地提高开发效率。
38.图3所要展示的是基于本发明软件架构的一个扩展系统图。在整个软件系统中,应用软件层由多个普通软件组件swc组成,这些swc依据功能、相关度划归不同的代码分区,图 3中72个swc分配在core1至core3三个代码分区中。如有更多的swc还可增加代码分区的数量,swc增多后,需要根据功能调整分区,让实现相同功能的swc分在同一核中,避免不同核间的交互。vcdtc与dem放置于同一代码分区core4中。
39.当不同的故障发生时,asw检测故障条件满足,统一将eventstatus=3以s/r接口的形式发给vcdtc,该swc接收到该接口后,统一调用dem函数dem_seteventstatus,将 eventstatus值传递给基础软件层,基础软件层检测到eventstatus=3后,debounce一段时间进行故障确认,之后置位相应的dtc;
40.当asw需要回读dtc状态时,vcdtc调用dem函数dem_geteventstatus获取dtc 状态并赋值给相应的s/r接口上传到asw。
41.该架构功能主要使用于故障排查,当车辆发生故障,可以使用诊断仪读取故障码,即可定位到asw应用软件层逻辑的哪一块有问题,且通过排查可以定位到具体哪一个条件有问题,然后对应固定到具体是哪一个故障发生原因。例如当变量输出为2时,对应 prepassed,就代表没有故障,当变量输出为3时对应prefailed,就表示有故障。到了 bsw后,还会进行一个时间的延时判断,如已经置位了,经过2至3个周期的延时判断一直是prefailed,才会最终判断为failed。判断结果可以通过诊断仪读取故障码得知。故障码为0时则判断为没有故障,故障码为1的时候判断为有故障。
42.综上所述,本发明引入vcdtc swc作为asw和bsw的中间媒介,该swc和dem 放置于同一核中,函数调用均由该swc来实现,该swc的引入使asw不直接和bsw交互。故障发生时,asw只需要将故障eventstatus发给vcdtc,该swc统一调用dem函数,避免了函数跨代码分区调用,提高了软件程序执行的实时性能;同时asw和vcdtc交互接口确定好后,asw便可和bsw
功能开发上解耦,开发工作可并行开展,可极大地提高开发效率。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
43.上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。

技术特征:


1.一种故障代码(dtc))存储与回读的优化方法,包括:应用软件层(asw);基础软件层(bsw);和中间软件组件,所述基础软件层和所述中间软件组件设置于第一代码分区中,所述中间软件组件用于接收所述应用软件层发出的指令,然后所述中间软件组件根据所述指令调用所述基础软件层相应的函数并将执行结果返回所述应用软件层。2.根据权利要求1所述的一种故障代码(dtc)存储与回读的优化方法,其特征在于,所述应用软件层通过标准接口同所述中间软件组件进行数据交换。3.根据权利要求2所述的一种故障代码(dtc)存储与回读的优化方法,其特征在于,所述应用软件层包括至少一个普通软件组件,所述基础软件层包括至少一个服务组件,所述普通软件组件通过所述中间软件组件与相应的所述服务组件进行信息交互,实现相应功能。4.根据权利要求3所述的一种故障代码(dtc)存储与回读的优化方法,其特征在于,当所述普通软件组件需要向所述服务组件发送指令和数据来执行相应功能时,所述普通软件组件通过所述标准接口向所述中间软件组件发出所述指令和数据,所述中间软件组件依照约预定的对应关系,调用所述服务组件提供的对应函数,实现所述预定功能。5.根据权利要求3所述的一种故障代码(dtc)存储与回读的优化方法,其特征在于,所述普通软件组件为故障检测组件,所述服务组件为故障事件管理器(dem),所述故障检测组件通过所述中间软件组件与所述故障事件管理器交换故障代码,实现所述故障代码的储存和回读。6.根据权利要求3所述的一种故障代码(dtc)存储与回读的优化方法,其特征在于,所述应用软件层包括若干个所述普通软件组件。7.根据权利要求6所述的一种故障代码(dtc)存储与回读的优化方法,其特征在于,所述若干个普通软件组件依据功能、相关度划归不同的第二代码分区,所述应用软件层包括若干个所述第二代码分区,该若干个所述第二代码分区彼此相互独立,负责不同的功能。8.根据权利要求6所述的一种故障代码(dtc)存储与回读的优化方法,其特征在于,所述基础软件层包括若干个所述服务组件,以对应所述应用软件层的所述若干个普通软件组件来实现不同的功能。9.根据权利要求7所述的一种故障代码(dtc)存储与回读的优化方法,其特征在于,所述第二代码分区中对应的所述普通软件组件检测到故障,当需要储存故障代码时则将所述标准接口的变量赋予一个数值,并通过所述标准接口传送到所述中间软件组件,由所述中间软件组件通过所述服务组件储存到所述第二代码分区,当需要回读所述故障代码时,所述中间软件组件通过所述服务组件获取相应的故障代码状态值并通过所述标准接口上传给所述应用软件层。10.根据权利要求9所述的一种故障代码(dtc)存储与回读的优化方法,其特征在于,所述第二代码分区中相应的所述普通软件组件检测到故障,当需要储存所述故障代码时则对事件状态变量赋予第一数值,并通过所述标准接口传送到所述第一代码分区的所述中间软件组件,由所述中间软件组件依据所述事件状态变量调用同一代码分区的所述服务组件的对应函数储存所述故障代码,当所述普通软件组件需要回读所述故障代码时,所述中间软
件组件调用所述服务组件的对应函数读取所述故障代码,对故障代码状态变量赋予第二数值,并通过所述标准接口传回至所述普通软件组件,所述普通软件组件依据所述故障代码状态变量完成所述故障代码的回读。

技术总结


本发明提供一种故障代码(DTC)存储与回读的优化方法,包括:应用软件层、基础软件层和中间软件组件,基础软件层和中间软件组件设置于第一代码分区中,中间软件组件用于接收应用软件层发出的指令,然后中间软件组件根据指令调用基础软件层相应的函数并将执行结果返回应用软件层。本发明引入中间软件组件作为应用软件层和基础软件层的中间媒介,故障发生时,应用软件层只需要将检测的故障状态发给中间软件组件,中间软件组件统一调用函数,避免了函数跨代码分区调用。同时应用软件层和中间软件组件交互接口确定好后,应用软件层便可和基础软件层在功能开发上解耦,开发工作可并行进行,极大地提高开发效率。极大地提高开发效率。极大地提高开发效率。


技术研发人员:

张兵 张健康 吕喜锋 黄国栋 刘鹏鹏 胡文涛 张甲举 尤月 牛亚琪

受保护的技术使用者:

威睿电动汽车技术(宁波)有限公司 浙江吉利控股集团有限公司

技术研发日:

2022.06.24

技术公布日:

2022/10/11

本文发布于:2022-11-26 16:00:54,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/4/5482.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:所述   故障   组件   软件
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图