1 引言 汽车仪表是驾驶员了解车辆状态的一个窗口,是安全行驶和经济行驶不可或缺的装置。传统的汽车仪表均是机械结构模拟显示,存在响应慢、信息量少、显示方式单一等缺点。针对传统物理仪表的存在的问题,不少人做了有关汽车虚拟仪表的研究。大多数的虚拟仪表方案都需要在车辆上额外安装自己的硬件系统,成本高可行性也小。而且开发出来的仪表仅比物理仪表多了几个参数,如车门及车灯状态、温度、电压等,不能在车辆检修方面提供帮助。 开发一种可辅助车辆故障诊断的汽车虚拟仪表,它依靠大多数汽车上自带的车载诊断系统(OBD-II 系统),用Visual C++6.0 开发的ActiveX仪表控件读取系统存储在执行控制单元中(ECU)的数据,再以一定的组合将行车信息提供给驾驶员。驾驶员可以从虚拟仪表了解到更多有关汽车发动机系统、车身系统的参数,这些参数可作为车辆检修时的参考。 2 OBD-II 系统 OBD 是英文On Board Diagnostics 的缩写,中文翻译为车载诊断系统,目前汽车上应用的是第二代车载诊断系统,即OBD-II。OBD-II 系统在20 世纪末成为管理和控制汽车排放的发展重点,大多西方国家规定汽车在生产时必须安装OBD-II 系统,我国部分城市也已出台类似规定。该系统现在已成为监测汽车排放和维修人员诊断以及排除故障的重要途径。它具有获取传感器动态数据流和识别可能存在故障的区域,并将该信息以故障码的形式存储在电控单元存储器内的功能。 2.1 OBD-II 系统的工作原理 OBD 是发动机管理系统中的一个部分,它在发动机传统管理系统的基础上增加了一些传感器,改进控制策略,通过建立诊断策略和诊断程序来完成对各个部件及系统的监控。 OBD 系统监测的对象是电控汽车上的各种传感器、电子控制系统自身及各种执行元件。汽车在行驶过程中监测上述三种对象的输入信息,当某一信号超出了预设的范围值,并且这一现象在一定时间(三个连续行程)内不消失,ECU 则判断为这一部分出现了故障,并把这一故障以代码的形式存入内部RAM(随机存储器),同时点亮故障显示灯。此过程的示意如图1。另外ECU 还可以获得传感器的动态数据流,外部设备请求读取数据时ECU 把数据返回,这些数据实时反映行车状态。
OBD-II 系统提供了一个可读取ECU 数据的接口,这是一个双排16 针的诊断座。OBD 的SAE J系列协议规定诊断座的安装位置在仪表板下方,转向柱和汽车中心线之间。协议还对诊断座每一针的作用进行了详细的规定。通过诊断座可以用串行的方式读取存储在ECU 里面的数据。OBD-II 诊断座的形状及各针脚的排列如图2 所示。
2.2 OBD-II 的诊断模式 外部设备如果要获取ECU 中的数据,需要用扫描仪通过诊断座接入车内通信网络,以服务请求的方式向车载ECU 索取诊断数据,ECU 则以服务应答的方式向诊断设备传送诊断数据。OBD 系统的SAE J1979-2002 协议详细规定了九种不同的诊断模式,以满足获取不同ECU 数据的要求。这九种诊断模式为: 模式一:动态数据的获取; 模式二:获取与发动机相关的冻结帧数据; 模式三:获取与排放相关的诊断信息; 模式四:清除或重置与排放相关的诊断码; 模式五:获取氧传感器相关的测试数据; 模式六:获取特殊监测对象在线监测数据; 模式七:获取排放相关的诊断故障码; 模式八:对OBD 系统、测试或者元件的控制请求; 模式九:获取车辆信息。 利用这九种模式,外部设备可以从汽车电控单元获得各种诊断数据。这些模式对各种不同的通讯网络都是通用的。开发的汽车虚拟仪表正是基于这九种模式:利用OBD-II 诊断口,通过扫描装置向汽车电控单元发出特定的指令,电控单元接到指令后会回传相应的串行数据流,得的数据后经过一定的格式转换就可以获得所需要的信息。相关的指令和回传的数据包格式在SAE J1979 -2002 (或ISO15031-5)协议有统一的规定。 例如:要读取发动机水温,外部设备向OBD 发送指令01 05(01-模式一,要读取动态数据;05-水温传感器的ID)。如果返回41 05 7B(41-模式一;05-传感器ID;7B-十六进制表的水温值),7B 的十进制数值是123,根据协议中数据格式的定义,水温计算为123-40=83 度。 3 仪表总体设计 虚拟仪表要实现以下功能:获取OBD-II 系统ECU 中的动态数据,转换后进行多信息综合显示;获取故障码并解释故障码,对检测到发生故障的部件报警;提供辅助驾驶功能,如显示瞬时油耗、平均油耗、剩余里程等,提高驾驶的经济性;提供黑匣子功能,对重要部件的行车数据自动记忆存储。 OBD-II 系统与外部设备是通过诊断座以串行方式通信的。外部设备若要获得OBD 存储在ECU中的数据,需用扫描仪对诊断座的每一个针脚进行扫描。扫描仪的功能是实现串口向USB 的转换,这样数据就能够直接输入计算机供虚拟仪表使用。虚拟仪表要在软件上具备对串口进行操作的功能。虚拟仪表的系统构架如图3 所示。根据虚拟仪表的功能要求,仪表系统分为数据采集、解释、存储和显示四大功能模块,如图4 所示。数据采集模块主要响应外部事件,负责对串口的读写操作,如发送指令和接收串口数据等,并对获得的数据进行判断,先判断是不是有效数据再进一步判断是传感器动态数据还是故障码。
数据解释模块是虚拟仪表软件开发的前提,它对采集来的数据按照SAEJ 系列协议进行分析计算,得到结果并作出判断。在对故障码解释时,按照故障码字母和数字的排列到数据文档中查找对应的故障解释,并设置一个标志位以决定是否点亮虚拟仪表上的故障指示灯。 数据存储模块提供黑匣子功能,把经过解释后的数据自动存储,以供日后维修参考。数据显示模块负责把动态数据以常规的方式显示出来,并以数字方式给出故障码,驾驶员可以根据故障码查找相关的文档获知故障信息。波形显示主要是为了把重要部件的动态数据以波形的方式提供给维修人员,使其能掌握某一项参数的变化情况。 4 虚拟仪表的实现 虚拟仪表开发的关键是软件开发,就是要把传统仪表的面板控件软件化,使之与计算机结合起来融为一体,让用户不觉得是在使用计算机软件而是在使用一台真正的仪表。把汽车虚拟仪表中的单个测量仪表做成ActiveX 控件的形式,根据实际情况把仪表控件拼搭起来组成仪表面板。 4.1 ActiveX 虚拟仪表控件 考虑到驾驶员的习惯,虚拟仪表采用与传统仪表相近的颜色为底色并保留仪表盘显示的形式,此外还开发了波形显示控件、容量显示控件、仿LED显示控件和各种指示灯控件,这些ActiveX 控件可以任意组合,既可以使面板更加合理美观又能够提高代码的利用率。 每个仪表控件都定义了相关的属性并提供了处理函数接口,具备对数据进行实时处理、表达、传送、存储、显示等功能。只要把数据送到想要以该形式显示的控件仪表,再根据实际情况设置仪表显示的最大值、最小值、警告值、显示精度等属性,就可以迅速完成相应的测试任务,并给出直观的结果。 OBD-II 系统ECU 存储的动态数据变化非常快,要求实时、快速地把数据显示出来。故所开发的虚拟仪表采用模拟显示和数字显示相结合的方式,既可快速读数又可以直观地看到数据的变化情况,使显示效果达到最佳。 4.2 虚拟仪表的软件流程 开发的虚拟仪表主要是基于OBD-II 系统中的九种诊断模式,读取传感器的动态数据、冻结帧数据、诊断码和故障码等。打开串口后,仪表系统首先向串口发送指令,这个指令在OBD 系统总线上会以广播的形式被送到各个ECU,只有与传感器ID 对应ECU 会对指令有响应。ECU 接到指令后根据请求类型将存储的数据通过诊断座返回,虚拟仪表根据SAE J1975 协议对数据进行解释就可以获得汽车的实时行车信息。由于所读取的动态数据变化太快,为了不影响驾驶员的注意力且读数清楚,采用每一单项的每五<



