故障诊断通讯接口OBD-II标准简介
      早先的故障诊断仪都是由各个整车制造厂或仪器制造商各自开发的,诊断接口和通讯方式各不相同,不能互相通用。以诊断插座为例,福特车系有7针、25针,奔驰车系有圆形9针、38针、长方形16针等等。这种各自为政的局面不仅给维修工作带来了麻烦,而且也增加了维修成本和人员培训费用,反过来也影响了产品在全球范围的销售。
      1987年起,美国加州大气资源局(CARB)规定车载故障自诊断系统必须能够对汽车排气系部件进行监测。1994CARB颁布了更为严格的废气排放控制法规,规定与排气相关的部件必须与被称为万能扫描工具的故障诊断仪进行通信。同时,美国环境厅(EPA)也采取相应措施在全美推广使用。在CARB的要求下,美国汽车工程学会(SAE)进一步推进了与故障诊断仪相关的标准化工作,形成了诊断仪接口的OBD-II标准。
      OBD-IION-BOARD DIAGNOSITICS的缩写,即第二代随车电脑诊断系统,它代表了目前大部分诊断仪的技术水平,可以说是一个实际的标准,因而得到了汽车制造商的支持。其主要特点有:
·诊断插座统一为16针插座,并统一安装于驾驶室仪表板下方。诊断插座如图1所示,引脚定义如表1所示;
·串行数据通信协议采用IS09141SAE两个标准;
·具有统一的5位故障代码。例如P1352,第一个英文字母代表被测控制器,如P代表发动机电脑控制器(Power),B代表车身电脑控制器(Boby),C代表底盘电脑控制器(Chassis),第二个字代表制造厂,第三个字代表SAE定义的故障范围码,最后两个字代表原厂故障码;
·具有用诊断仪直接读取并清除故障码的功能
·具有行车记录功能,能记录车辆行驶过程中的有关数据资料;
·具有记忆并重新显示故障信息的功能。
   V.A.G1551功能简介
      VAG1551是大众集团内部售后服务通用的汽车电子系统维修、诊断仪器,可以读取电子控制汽油喷射发动机、自动变速箱等十多个汽车电子系统的诊断和测试信息。比如在检修发动机电子时,维修人员可以使用其来读取故障代码,同时也可以读取发动机实时状态参数如转速、水温、负荷、电压、喷油时间等,另外还能向ECU的各执行机构发出强制执行命令。操作时,将诊断仪与汽车排档前的诊断插座连接即可。诊断插座符合OBD-II标准,其中引脚4为车身搭铁,引脚 7BDDIAKM K线),引脚16为蓄电池正极,其余引脚均为空。
      使用时首先要输入检测对象的地址代码,如发动机电子为01,然后要选择功能,如查询故障代码的功能号为02。具体使用方法见相关资料。
      诊断插座的引脚7应与汽车上各电子控制系统的K线相连接,诊断仪一次只能与一个电
子控制系统通信。开始时,诊断仪以广播的方式通过K线发送识别信息(即地址码),但只有与地址码相对应的电子控制系统才作出响应,于是诊断仪和该电子控制系统开始通信,其余各系统仍处于待机状态。
    VAG1551与发动机电子通信规律初探
      由于条件限制,本文只研究了VAG1551Engine Electronics的通信规律,并且ECU只限于MOTRONIC M1.54P
    4.1 利用计算机串口截码
      考虑到VAG1551ECU的通信码均为串口信号,只是与RS-232标准串口信号的电压不同,标准串口信号的“1”-12V表示,“0”+ 12V表示,而K汽车故障诊断仪线的“0”01.3V表示,“1”12V表示,所以只要设计一块转换卡,把K线的串口信号转换为标准串口信号,即可实现利用计算机串口来截取VAG1551ECU的通信码,从而研究它们的通信规律。转换卡除了能完成电平转换功能外,工作频率要大于10kHz,且输入电阻要大,不至于影响VAG1551ECU的通信。图2给出计算机串口截码原理图。
      采用转换卡截码的效率很高,每次截码得到的文件也较小,大约1Kbytes多,并可以直接在编辑软件下阅读,使用非常方便。下面的任务就是对VAG1551的各个功能逐个进行截码研究,弄清在发动机的各个工况下它们是如何进行通信的。
    4.2 截码数据分析
      下面给出VAG1551在功能号04数据块000进行通信时截码得到的数据,并进行简单分析。
      VAG1551发出地址码后,ECU回答控制器版本号,如表2所示。
      接下来,双方发出握手信号以不中断联系,并且ECU等待VAG1551发出指令:
      03FC OBF4 09F6 03
      03FC 0CF3 09F6 03
      03FC 0DF2 09F6 03
     VAG1551发出功能04-000指令,ECU回答相应信息,并且双方不断问答,直到用户输入“→”
      03FC CEF1 11EE 03
      0DF2 0FF0 F40B 659A A25D C837 1DE2 807F SBA4 02FD 00FF 07F8 1FE0 03
      03FC 10EF 11EE 03
      0DF2 11EE F40B 659A A25D C837 1DE2 807F 5BA4 02FD 00FF 07F8 1EE1 03
      03FC 12ED 11EE 03
      0DF2 13EC F40B 659A A25D C837 1DE2 807F 5BA4 02FD 00FF 07F8 1EE1 03
        接下来双方又进行握手等待,直到用户发出结束指令,通信结束:
      03FC 14EB 09F6 03
      03FC 15EA 09F6 03
      03FC 16E9 09F6 03
      03FC 17EB 09F6 03
      03FC 18E7 06F9 03
      在这些数据中,还可以发现一个特殊的码子,即每一行的第二个数据,经分析,这是一个记数码,通信双方每发出一次信息均加一。并且可以看到,在功能号04数据块000VAG1551发出的命令为11,结束指令为06。双方采用的校验方式为反码,即接收方发出接收码的反码,发送方收到反码后就认为对方接收正确(如VAG155106ECUF9)。
      经过多次实验,可以获知VAG1551在检测发动机电子的各个功能(包括读故障码和消除故障码)时的通信码,这些通信码为研制与VAG1551兼容的汽车故障诊断仪打下坚实的基础。
     VAG1551除了可以读取故障代码外,还可以读取发动机实时状态参数如转速、水温、负荷、电压、喷油时间等,经过数据分析,VAG1551并不是把这些参数直接显示出来,而是把这些参数的码子经过某种转换再显示出来。
    5 开发与VAG1551兼容的计算机汽车诊断系统
      VAG1551是德国制造的仪器,价格昂贵,并且有部分VAG1551是德文显示,用
起来多有不便,因此有必要开发与其兼容的汽车诊断仪。通用的计算机系统有标准的串口,且编程余地大、易调试、所以可先开发计算机诊断系统。
    5.1 硬件部分
        同样,计算机系统的串口与VAG1551的串口不兼容,因此需要设计一块适配卡,与上述转换卡不同的是,适配卡的数据流是双向的,但因为通信是半双工的,所以适配卡上应加上一个模拟开关,以隔离双方数据。图3给出适配卡原理图。
      当计算机发出数据时,模拟开关接通,数据通过K线发给ECU,同时数据又发回给计算机,当计算机接收到数据后可判定数据已发完,此时应立刻关闭模拟开关,等待ECU回答。在这个过程中模拟开关的关闭时间是个关键,若模拟开关关早了(即计算机串码还未发完)则ECU接收的数据会出错,若模拟开关关晚了(即 ECU已发出数据)则会影响计算机接收数据。
    5.2 软件部分
      软件采用模块化设计,即把主程序编成一个模块,VAG1551每一个功能都编成一个模块,每个模块分别汇编后再连接成可执行文件。采用模块程序设计有以下一些优点:
   (1)每个模块任务明确,便于理解;
  (2)单个模块易于编写和调试;
  (3)便于程序和维护的修改;
  (4)要增加诊断的功能,只要增加相应的模式块即可。
      编制程序的时候可采用逐渐增加功能的方法,即先编主模块和第一个功能模块,调试成功后连上第二个功能模块再调试,直到全部完。
    通过一段时间的调试,笔者已初步开发完成与V.A.G1551兼容的计算机诊断系统,当然目前只限于诊断M1.54P的发动机电子。图4给出软件的主框图。
    本文介绍的方法是通过研究V.A.G1551ECU的外部通信规律来开发与V.A.G1551兼容的汽车故障诊断仪,应该说在主要功能上能与 V.A.G1551保持一致,但在细节问题上还有差异。并且本文尚未涉及到另一个很重要的方面,就是V.A.G1551ECU的确认码问题的,也就是说当V.A.G1551收到ECU的确认码是错误的时候会做何动作画。这些问题还等待我们去作进一步研究。