1. 引言
柴油机在运行过程中会出现各种各样的故障情况,如果能将出现故障时的相关信息记录下来,将会有利于事后对柴油机的故障进行分析,为柴油机的改进设计提供参考数据。因此,本文针对柴油机故障设计了故障诊断与记录系统软件,主要用于采集各类传感器信号;对采集信号进行分析以判断柴油机当前状况;当出现故障时,记录当前的各项参数;并通过读取故障数据,为分析柴油机的运行状态提供帮助。
2. 系统总体结构
故障诊断与记录系统以单片机C8051F040为核心完成控制任务,该单片机内部有12位转换精度的ADC,通过串行外设接口SPI可实现灵活的全双工串行通讯 [1] - [3] 。柴油机上安装有各种传感器,传感器将信号传递至单片机,单片机对采集信号进行转换处理,判断采集信号的异常状态,将故障状态下的数据信息记录在AT45DB161芯片中存储,并通过上位机通讯软件读取故障数据 [4] 。系统总体框图如图1所示。
3. 系统软件设计
柴油机故障诊断与记录系统采用C语言进行程序开发,系统软件采用模块化设计 [5] ,实现了信号采集、故障诊断、故障分区表上电检测、故障分区表记录、故障数据记录和读取故障数据的功能(图1)。系统软件流程图如图2所示。软件开始运行时,先进行系统时钟初始化、定时器初始化、中断初始化、SPI总线初始化、以及部分参数初始化,如:定时器标志、故障标志、故障分区表记录状态、故障数据记录状态、故障分区表冷启动检测标志等。其余模块的功能如下所述。
3.1. 信号采集模块设计
各模拟信号的采集使用查询定时标志的方式进行,信号采样周期为100 ms。当定时标志置位时,依次对7个通道的模拟信号进行AD转换(水温、进气温度、机油压力、增压压力、大气压力、油门踏板、转速),AD值经过公示计算或查询MAP图的处理方式,得到采集信号的输出值。信号采集模块流程图如图3所示。
3.2. 故障诊断模块设计
通过将信号采集输出值分别与各信号的上限值、下限值进行比较,以此判断传感器信号的当前状态,当信号超限、发生故障时,故障错误次数累加,故障错误次数超过限定值时,使相应的故障标志置位 [6] 。如果信号恢复正常,则故障错误次数清零,相应的故障标志清零。故障诊断模块流程图如图4所示。

Figure 2. Flow chart of systemic software
图2. 系统软件流程图

Figure 3. Flow chart of signal collection
图3. 信号采集模块流程图

Figure 4. Flow chart of the fault diagnosis
图4. 故障诊断模块流程图
3.3. 故障分区表记录模块设计
故障分区表信息以查询方式记录,用于在下次记录时进行故障状态判断,和起始记录地址的计算。当出现故障时,先将当前故障信息与前次故障信息进行比较,如果故障相同,则不进行重复记录;如果故障不同(部分故障解除或出现新的故障),则记录当前故障信息,记录内容包括当前故障状态(如:水温传感器故障、转速传感器故障)、故障信息记录组数、累加校验和等。
故障分区表信息记录在AT45DB161芯片中,该芯片是串行接口的闪存芯片,可应用于数据语音、图像、程序代码数据的存储。芯片支持RapidS串行接口,与SPI相兼容,速度可达到66 MHz。芯片包含17,301,504个位,被组织为4096个页,每个页512或528个字节 [7] 。除了主存储器,芯片还包括两个SRAM数据缓冲区,每个缓冲区512/528个字节。在主存储器正在编程时,缓冲区是允许接收数据的,并且支持数据流式写入。芯片可以采用2.5 V~3.6 V或2.7 V~3.6 V单电源供电,进行编程与读取操作,并通过三线接口(SI、SO、SCK)进行数据通信。
为保证故障分区表信息记录的可靠性,对其采用冗余设计方法,分别在记录芯片AT45DB161的三处区域进行独立记录。因此,故障分区表信息记录时,应根据写入位置计算写入地址,然后将故障信息写入缓冲区,再由缓冲区写入Flash页固化。故障分区表记录模块流程图如图5所示。
3.4. 故障分区表上电检测模块设计
上电时对故障分区表三处记录内容进行符合性比较检验,得到最完整的分区表信息,以获取上次记录的故障状态、记录组数等信息,便于本次记录条件的判断,下次记录地址的计算。校验方式如下:
1) 分别判断三处故障分区表数据的累加和是否正确。
2) 如果三处累加和都错误,则应采用默认值;如果只有一处累加和正确,则以该处的信息为最完整信息;如果有两处以上累加和正确,则需进一步比较记录组数。
3) 如果记录组数不相同,则以记录组数最大的一处为最完整信息;如果记录组数都相同,则三处数据相同,都为最完整信息。
4) 用最完整信息或默认值,更新错误信息,保持三处故障信息正确且一致。
故障分区表上电检测模块流程图如图6所示。
3.5. 故障数据记录模块设计
故障分区表记录完成后,根据其记录组数计算故障数据的写入地址,记录当前的发动机运行参数,记录内容一般包括:水温、进气温度、机油压力、增压压力、大气压力、油门踏板、转速、当前故障状态、发动机状态、喷射脉宽、喷射正时、累加校验和等。为后期的发动机故障分析提供参考数据。
故障数据记录时,以数组的形式记录,每页可写入多组故障数据。AT45DB161记录芯片的缓冲区支持数组写入模式,而Flash页不支持数组写入模式,因此,应先将故障数据组写入缓冲区,再由缓冲区整体写入Flash页。如果写入地址不是当前页的第一组时,则应先将当前Flash页数据写入缓冲区,然后将要记录的故障数据组顺序写入缓冲区的相应位置,再由缓冲区整体写入Flash页固化。故障数据记录模块流程图如图7所示。
3.6. 读取故障数据模块设计
分析发动机运行过程中出现的故障时,需要先读取故障数据。上位机通过RS232串口发送读取指令,当系统接收到上位机的指令后,按照串口协议解析指令内容,判断是否为读取故障分区表指令(或读取故障数据指令)。如果接收到的是正确的读取指令,则单片机从AT45DB161记芯片中读取指定地址的故障

Figure 5. Flow chart of the fault partition table memorizing
图5. 故障分区表记录模块流程图

Figure 6. Flow chart of the fault partition table detecting
图6. 故障分区表上电检测模块流程图

Figure 7. Flow chart of the fault data memorizing
图7. 故障数据记录模块流程图
分区表信息或故障数据,再将数据按照串口协议的格式发送给上位机,完成读取操作。读取故障数据模块流程图如图8所示。
4. 试验验证
为了验证故障诊断与记录系统软件功能的正确性和可靠性,将调试后的软件下载至电控系统程序存储器中,通过试验进行软件功能验证。搭建发动机仿真运行平台 [8] ,按照各信号的输入类型及输入范围,利用仿真设备模拟输入水温信号、进气温度信号、机油压力信号、增压压力信号、大气压力信号、油门踏板信号、转速信号。在试验过程中,通过设定正常信号、故障信号,并由上位机读取故障数据,来验证故障诊断与记录功能。
故障状态变量定义为16位整型数据,其各位所表示的含义如表1所示。每位的值为1表示出现相应的故障,值为0表示没有故障。
故障限值的参数设定如表2所示。
试验中依次设置水温信号低下限故障、进气温度信号高上限故障、机油压力信号高上限故障、增压压力信号低下限故障、大气压力高上限故障、油门踏板低下限故障、超速故障。通过上位机读取记录的故障数据,如表3所示。
分析上表可知,第一组故障数据为:水温值低于下限值,故障状态D0位为1 (十进制数为1);第二组故障数据为:进气温度值高于上限值,故障状态D3位为1 (十进制数为8);第三组故障数据为:机油

Figure 8. Flow chart of the fault data reading
图8. 读取故障数据模块流程图

Table 1. Definition of the fault state variable
表1. 故障状态变量各位的含义

Table 2. The restrictive value of all stimulant signals
表2. 各模拟信号故障限值
表3. 故障数据记录
压力值高于上限值,故障状态D5位为1 (十进制数为32);第四组故障数据为:增压压力值低于下限值,故障状态D6位为1 (十进制数为64);第五组故障数据为:大气压力值高于上限值,故障状态D9位为1 (十进制数为512);第六组故障数据为:油门踏板值低于下限值,故障状态D10位为1 (十进制数为1024);第七组故障数据为:转速值高于上限值,故障状态D12位为1 (十进制数为4096)。与试验中设置故障的顺序、故障类型一致,且符合故障记录的要求(出现不同的故障时,记录当前故障信息)。由此表明,故障诊断与记录系统的软件功能正常。
5. 结论
采用单片机C8051F040、记录芯片AT45DB161,通过软件的模块化设计,实现了柴油机的故障诊断与故障数据记录的功能。各软件模块的接口明晰,具有较强的可移植性、可复用性。通过对柴油机故障的诊断、记录与读取,有助于分析柴油机的故障原因,为柴油机设计的改进与提升提供基本依据。