发明内容
为了解决汽车ECU故障诊断仪的各车厂的故障诊断信息数据库需要通过周期性地升级诊断仪程序才能得到更新的问题,本发明提出了一种基于XML的汽车ECU故障诊断信息匹配方法。该方法通过将诊断仪所需的故障诊断信息数据库从诊断仪的系统程序中剥离出来,存放到诊断仪的外部存储器SD卡中,并且建立数据库,数据库中每一个车厂的故障诊断信息存放到一个故障匹配信息txt文件和一个数据流信息txt文件,故障匹配信息和数据流信息采用XML语言(Extensible Markup Language,可扩展标记语言)编写并存放在txt文件中。如此,当某个车厂的故障诊断信息需要更新时,只需将诊断仪SD卡中存放该车厂的故障匹配信息txt文件和数据流信息txt文件替换即可,而不必再升级诊断仪程序。同时,用XML语言编写的txt文件具有良好的扩展性和跨平台特性,可以方便地在不同的操作系统平台上进行建立和更新诊断信息数据库文件。
本发明的技术方案具体包括:采用分割原理,将故障诊断信息数据库从诊断仪程序中分离出来,存放到诊断仪的外部存储器SD卡中,建立数据库,数据库包括:为每个汽车厂商建立一个故障匹配信息txt文件和一个数据流信息txt文件,以方便管理和维护各车厂的故障诊断信息,故障匹配信息和数据流信息采用XML语言编写并分别存放在对应txt文件中。当需要更新某车厂的故障诊断信息时,替换诊断仪SD卡中该车厂对应的txt文件,本发明用XML语言将各车厂的故障诊断信息编写并存放在txt文件中,以此建立各车厂的诊断信息数据库。此外,从SD卡中调用和解析车厂的XML文件匹配ECU故障信息,通过此 方法可以方便实现诊断仪的故障码解析和数据流信息解析的工作。具体为:
1.一种基于XML的汽车ECU故障诊断信息匹配方法,根据各汽车厂商定义的故障代码表、数据流信息说明表,建立相应车厂的故障诊断信息数据库,存入诊断仪的SD卡中;故障诊断阶段,读取汽车故障码,查询SD卡中故障诊断信息数据库,调用并解析故障诊断信息数据库中XML文件匹配ECU故障信息,将读取的故障码逐行与XML文件故障匹配信息中存储的故障码作比较,找到相同故障码所对应的故障信息;当执行对某车厂的汽车ECU读取数据流时,从诊断仪SD卡中读取该车厂的数据流信息txt文件,解析出数据标识符DID填写到UDS服务的读取数据服务请求里,向汽车ECU发送请求,解析出诊断仪SD卡中存储的数据换算公式,换算出对应该DID数据的实际物理信息,输出到显示单元进行显示。建立故障诊断信息数据库具体为:建立一个故障匹配信息txt文件和一个数据流信息txt文件;文本编辑器编辑故障匹配信息txt文件和数据流信息txt文件,依次将故障代码表中的内容填写到故障匹配信息txt文件中建立故障码与故障信息对照表,将数据流说明表中的一个数据标识符DID对应一个数据流描述、一个数据换算公式、一个数据流单位存储到数据流信息txt文件中。当诊断仪读取单元获取某车厂的汽车ECU的故障码时,从SD卡故障诊断信息数据库中读取存储该车厂故障匹配信息txt文件,将ECU的故障码与故障匹配信息txt文件中的第一个“=”后的故障码逐行作比较,当与某一行存储的故障码则匹配,读取故障码所对应的故障信息,输出进行故障信息显示。解析数据标识符DID的步骤具体包括:读取SD卡数据库中存储数据流信息txt文件,从第一行开始,逐行对txt文件中存储的数据流信息进行解析,将每一行中的第一个“=”后的引号内的数字提取出来,并转换成整数,分别存储在一个2字节大小的变量中。换算出对应该DID数据的实际物理信息,输出到显示单元进行显示具体包括:将换算公式中参数“N”替换成ECU响应的数据获得字符串表达式,将字符串表达式换算出对应该DID数据的实际物理信息,按照“数据流名称:物理信息+单位”的字符串格式输出到显示单元进行显示。
本发明将故障信息数据库从诊断仪程序中剥离出来,存放在诊断仪的外部 存储器SD卡中,并且数据库文件设计成每一个车厂的故障信息对应一个故障匹配信息txt文件和一个数据流信息txt文件。如此,当汽车厂商定义了新的故障代码表或数据流信息表后,用户只需将SD卡中存放该车厂的故障匹配信息txt文件和数据流信息txt文件替换即可,而不必再升级诊断仪程序,从而从根本上解决了诊断信息数据库只能通过周期性升级诊断仪程序来得到更新的问题,并且故障诊断信息数据库用XML语言编写的txt文件组成,可以方便地在不同的操作系统平台上进行建立和更新诊断信息数据库文件。
具体实施方式
本发明将故障诊断信息数据库从诊断仪程序中剥离出来,存放到诊断仪外部存储器SD卡中,并且将数据库设计成:为每一个汽车厂商建立一个故障匹配信息txt文件和一个数据流信息txt文件的形式。如此,当需要更新某车厂的故障诊断信息时,只需将诊断仪SD卡中该车厂对应的txt文件替换即可,通过此方法可以从根本上解决诊断仪的故障诊断信息数据库需要通过周期性地升级诊断仪程序才能得到更新的问题。同时,本发明设计了一种简易的用XML语言将各车厂的故障诊断信息编写并存放在txt文件中的方法并以此来建立各车厂的诊断信息数据库。本发明可方便地从SD卡中调用和解析车厂的XML文件匹配ECU故障信息。
根据各汽车厂商定义的故障代码表(故障码与故障信息对应表)、数据流信息说明表(数据标识符列表、数据流描述、数据换算公式及数据流单位的说明表)建立原始资料数据库;为每个车厂分别建立一个存储故障匹配信息txt文件和一个存储数据流信息txt文件;文本编辑器打开存储故障匹配信息txt文件,根据故障代码表中的一个故障码对应一条故障信息的原则,用XML语言将 一条故障码与对应的故障信息填写在一行XML语句中,依次将故障代码表中的内容全部用XML语言填写到存储故障匹配信息txt文件中;文本编辑器打开存储数据流信息txt文件,根据数据流说明表中的一个数据标识符(DID),对应一个数据流描述、一个数据换算公式、一个数据流单位的原则,用XML语言将一条数据流信息填写在一行XML语句中,依次将数据流信息说明表中的内容全部用XML语言填写到存储数据流信息txt文件中,如此,建立了一个车厂的故障诊断信息数据库。依次分别建立好各车厂的故障诊断信息数据库,该数据库存储到诊断仪的SD卡中。
从SD卡中调用和解析车厂的XML文件匹配ECU故障信息。包括解析与匹配故障码信息,以及读取和解析数据流信息。具体包括:诊断仪信息采集单元从汽车ECU中读取故障码,比较单元从SD卡中读取该车厂对应的故障匹配信息txt文件,将读取的故障码与故障匹配信息txt文件每一行中存储的故障码作比较,寻找到相同故障码时,将该行中存储的对应该故障码的故障信息输出到诊断仪进行显示单元,完成一次解析与匹配故障码信息的过程。
当诊断仪执行对某车厂的汽车ECU进行读取数据流功能时,从SD卡中读取该车厂的数据流信息txt文件,将数据流信息txt文件每一行中存储的数据标识符(DID)解析出来,并把解析出的DID填充到UDS(Unified Diagnostic Services,统一诊断服务)服务的读取数据服务请求中,向汽车ECU发送请求。当接收到汽车ECU响应的数据后,将数据流信息txt文件当前行中与该DID对应的数据换算公式解析出来,根据换算公式将汽车ECU响应的数据进行换算获得故障代码,将故障代码和存储在txt文件当前行中与该DID对应的数据流名称以及数据流单位按照“数据流名称:故障代码+单位”的字符串格式,输出到诊断仪显示单元,直到将整个txt文件的每一行的DID数据全部读完,完成了一次读取和解析数据流信息的过程。
以下结合附图和具体实例对本发明的具体实施方式进行描述。
本发明采用XML语言将各车厂的故障诊断信息编写并存放在txt文件中,并建立各车厂的诊断信息数据库。具体过程为:首先采集各汽车厂商定义的故 障代码表(故障码与故障信息对应表)、数据流信息说明表(数据标识符列表、数据流描述、数据换算公式及数据流单位的说明表);根据上述信息为建立一个存储故障匹配信息txt文件和一个存储数据流信息txt文件;文本编辑器打开存储故障匹配信息txt文件(如表1:故障码与故障信息对照表),将故障代码表中的一个故障码对应一条故障信息。
表1:故障码与故障信息对照表
如故障码(Diagcode code)“1A000300”对应的故障信息(codeinform)是“DCDC输出过功率”,用XML语言将此故障码与对应的故障信息填写在一条XML语句中,在每一行语句的第一个“=”之后存放故障码,第二个“=”后存放的是故障码对应的中文故障信息。如表1所示,采用的编写方式如“<Diagcode code="1A000300" codeInform_chinese="DCDC输出过功率"></Diagcode>”,然后依次将故障代码表中的内容全部用XML语言填写到存储故障匹配信息txt文件中,表1所示为存储故障匹配信息的txt文件内容。
文本编辑器打开存储数据流信息txt文件,编辑数据流说明表,将数据流说明表中的一个数据标识符(DID)对应一个数据流描述、一个数据换算公式、一个数据流单位。如表2所示。如DID为“F2B0”所对应的数据流名称是“电池电压”、单位是“V”,换算公式是“N/10”,其中N表示汽车ECU响应的数据,就用XML语言将一条数据流信息填写在一行XML语句中,XML语句的第一个“=”后存放DID,第4个“=”后的引号内对应某个DID数据的换算公式。本发明采用的编写方式如“<dataflow DID="F2B0" name_chinese="电池电压" unit="V" Converform="N/10" ></dataflow>”,依次将数据流信息说明表中的内容全部用XML语言填写到存储数据流信息txt文件中,如表2所示为存储数据流信息的txt文件内容。如此,建立相应车厂的故障诊断信息数据库。依次分别建立各车厂的故障诊断信息数据库,将故障诊断信息数据库文件存入诊断仪的SD卡中。
表2:存储数据流信息的txt文件内容
故障诊断阶段。查询SD卡中故障诊断信息数据库,调用并解析车厂的XML文件匹配ECU故障信息,包括解析和匹配故障码信息,以及读取和解析数据流信息。
如图1所示为解析和匹配故障码信息功能示意图,包括,读取ECU故障码并解析,查找SD卡中故障诊断信息数据库的XML文件集合故障码信息并与之匹配,输出ECU故障信息。解析和匹配故障码信息的工作流程如图2所示。
S11:从SD卡故障诊断信息数据库中读取故障匹配信息txt文件。诊断仪读取单元获取某车厂的汽车ECU的故障码时,从SD卡故障诊断信息数据库中读取存储该车厂故障匹配信息的txt文件;
S12:将ECU读到的故障码与数据库中故障匹配信息文件中第一行语句的第一个“=”后的故障码作比较。将读取到的故障码与故障匹配信息文件中每一行存储的故障码比较,根据数据库中故障码与故障信息对照表结构,在每一行语句的第一个“=”之后存放的是存储码;
S13:判断故障码是否相同。将读取到的故障码与故障匹配信息文件中存储 的故障码逐行作比较,如与某一行故障码相同,则匹配,即可找到这个故障码所对应的故障信息;
S131:读取当前行的第二个“=”后的故障信息,输出进行故障信息显示。当判断出读取的故障码与存储在故障匹配信息文件中某一行的故障码相同时,将第二个“=”后的字符串(故障码对应的中文故障信息)输出给诊断仪进行故障信息显示。
S132:判断是否读取到故障匹配信息文件的末尾;
S1321:提示未找到故障码对应的故障信息的错误信息;
S1322:将读到的故障码与故障匹配信息文件中下一行语句中的第一个“=”后的故障码作比较,进行下一次判断。
在判断出当前行存储的故障码与读取到的故障码不相同时,则读取下一行存储的故障码,并与从ECU中读取到的故障码作比较。
如图3所示为读取和解析数据流信息的功能示意图,读取和解析数据流信息的工作流程如图4所示。
S21:读取SD卡数据库中存储数据流信息的txt文件。当执行对某车厂的汽车ECU进行读取数据流功能时,从诊断仪SD卡中读取该车厂的数据流信息txt文件;
S22:从第一行开始,逐行对txt文件中存储的数据流信息进行解析和处理。由于本发明设计的用XML语言将数据流信息填写到txt文件中的规则是将一条数据流信息填写在一行XML语句中,在解析数据流信息时,采用逐行解析数据流信息的方式进行处理;
S23:判断是否读到文件末尾;
S231:将当前行中存储的数据标识符(DID)解析出来;
将当前行中的第一个“=”后的引号内的数字提取出来,并转换成整数,存 储在一个2个字节大小的变量中;
S232:结束读取数据流功能;
S24:将解析出的DID填写到UDS服务的读取数据服务请求里,向汽车ECU发送请求。
将解析出的DID填写到UDS服务的读取数据服务请求里,读取数据服务请求报文的第二,第三字节为DID,因此将解析出的两个字节大小的DID,按高低字节填写到读取数据服务请求报文内,再向汽车ECU发送请求,可从ECU中得到该DID对应的数据信息。
S25:当接收到汽车ECU响应的数据信息后,从当前行中解析出存储的数据换算公式。
在接收到ECU响应的数据,从txt文件的当前行的第4个“=”后的引号内解析出对应某个DID数据的换算公式;
S26:根据解析出的换算公式,将ECU响应的数据换算成对应的实际物理意义数据。具体为:假如解析出的换算公式是“N/10”,ECU响应的数据是“2000”时,将公式中字符“N”对应的位置,替换成ECU响应的数据,如“2000/10”,再根据这个字符串表达式,换算出对应该DID数据的实际物理信息。
S27:将实际物理意义信息和存储在当前行中与该DID对应的数据流名称以及数据流单位按照“数据流名称:物理信息+单位”的字符串格式,如“电池电压:220V”,输出给诊断仪显示单元进行显示。
诊断仪在显示数据流信息时显示数据流名称、实际物理意义数据、单位信息,因此,将实际物理意义数据与该DID对应的数据流名称以及数据流单位按照“数据流名称:物理意义数据+单位”的字符串格式,如“电池电压:220V”的形式输出进行显示,如此诊断仪就可以直接将得到的字符串信息进行数据流 信息显示,完成读取数据流的功能。
需要说明的是,普通的技术人员针对上述的实施例还可以很容易想到用其他语言并以与本发明类似的编码方式将故障代码表及数据流信息说明表的内容编写并存储在SD卡的文件中,只要这些技术方案在本发明的构思范围内,应等同于本专利的技术方案,属于本专利的保护范围。