You are on page 1of 29

UNIVERSITY AT BUFFALO

DEPARTMENT OF MECHANICAL AND AEROSPACE ENGINEERING

Advances In On-Board Diagnostics


For Heavy Duty Diesel Engines
Submitted in Partial Completion for the
Master Of Science Degree
Bargav Srinivasan
May 6,2011

Major Advisor: Dr Gary.F.Dargush


Committee Member: Dr John.Y.Fu
Table of Contents

I. Abstract…………………………………………………………………………………………………………………………………………………4

II. Improvement Module I-OBD diagnostic capability…………………………………………5

i. Problem statement…………………………………………………………………………………………………5
ii. Objective………………………………………………………………………………………………………………………5
iii. Procedure………………………………………………………………………………………………………………………5
iv. Capability Analysis……………………………………………………………………………………………6
v. Results……………………………………………………………………………………………………………………………8

III. Improvement Module II- Diagnostic Fault code Addition……………………8

i. Introduction………………………………………………………………………………………………………………8
ii. Problem Statement…………………………………………………………………………………………………9
iii. Objective………………………………………………………………………………………………………………………10
iv. Analysis…………………………………………………………………………………………………………………………10
v. Synthesis………………………………………………………………………………………………………………………11
vi. Results……………………………………………………………………………………………………………………………13

IV. Improvement Module III- OBD charge temperature Investigation…14

i. Introduction………………………………………………………………………………………………………………14
ii. Problem Statement…………………………………………………………………………………………………14
iii. Objective………………………………………………………………………………………………………………………14
iv. Procedure………………………………………………………………………………………………………………………15
v. Result………………………………………………………………………………………………………………………………15

V. Improvement Module IV- Calibrations Tuning for Engine Stumble 16

i. Introduction………………………………………………………………………………………………………………16
ii. Problem Statement…………………………………………………………………………………………………16
iii. Analysis…………………………………………………………………………………………………………………………17
iv. Results……………………………………………………………………………………………………………………………19

VI. Appendix……………………………………………………………………………………………………………………………………………20

VII. Reference…………………………………………………………………………………………………………………………………………30

2
List Of Figures and tables

i. Figure 1- Process Capability normal distribution…………………6

ii. Figure 2- Process Capability gamma distribution……………………7

iii. Figure 3- Result………………………………………………………………………………………………………8

iv. Figure 4- Cummins Test Bench………………………………………………………………………9

v. Figure 5- Aftertreatment Module………………………………………………………………10

vi. Figure 6- Simulink Model…………………………………………………………………………………11

vii. Figure 7- Fault code monitoring graph before fix…………………13

viii. Figure 8-Fault code monitoring graph after fix………………………13

ix. Figure 9- Charge Temperature graph………………………………………………………15

x. Figure 10- The problem of engine stumble………………………………………17

xi. Figure 11- Flowchart sensor interface………………………………………………18

xii. Figure 12-Field results……………………………………………………………………………………19

xiii. Table 1- Logging status table……………………………………………………………………12

xiv. Table 2- Calibrations Tuning for engine stumble……………………18

3
ABSTRACT

OBD is an acronym for On-Board Diagnostics and it is


incorporated into the hardware and software of a vehicle’s on
board computer to virtually monitor every component that can
affect emission performance. Each component is checked by a
diagnostic routine to verify that it is functioning properly. If
a problem or malfunction is detected, the OBD system illuminates
a warning light on the vehicle instrument panel to alert the
driver. This warning light will typically display the phrase
“Check Engine” or “Service Engine Soon”. The system will also
store important information about the detected malfunction so
that a repair technician can accurately find and fix the
problem. Once the engine light comes on, it indicates that a
fault has been detected in the engine control system and one or
more Diagnostic Fault Codes are stored in the engine’s computer.
Usually these codes are scanned using a company specific
software tool. Depending on the nature of the fault the lamp may
come on and go off, remain on continuously or flash. The
incorporation of sophisticated electronics in modern day diesel
engines makes the engine more reliable and cleaner but also
leads to a plethora of technical issues that the service
engineers have to deal with during the warranty period. This
project centers around developing a first time permanent
solutions to some of the critical issues that modern day diesel
engine manufacturers face.

4
OBD DIAGNOSTIC CAPABILITY ASSESMENT
Improvement Module-I

Problem Statement:
The biggest problem that we were facing was what we called
“False Faults”. This was a phenomenon when we used to have a
fault code stored in the engine management system when all the
engine parameters were within the threshold limits and were
functioning properly. This happened when the ECM received values
from the sensors on particular engine conditions such as driving
up a hill on cold winter days. These onetime events even though
not harmful to the engine performance caused the sensors to read
values that were only slightly off and they immediately made the
ECM to set a fault code. The customers who were within the
warranty period wanted us to conduct a service check as soon as
the light came on and this caused a lot of waste in terms of
money and time from our side of things.

Objective:
 To make an assessment on the risk of false faults on the
truck by using the data from data loggers.
o Scheme out a method to monitor the data so that the
phenomenon of false faults becomes predictable.

Procedure:

 Process field data from the trucks: The data basically was
in raw format. I had to write out a program in matlab to
get the data to us for analysis. The program is listed
below in the code section of the report

5
Capability Analysis

After the data is gathered we determined that we would do a


capability analysis using minitab on all the data that
corresponds to the various components that make up an
engine.

For instance:(the Nox sensor on the exhaust records the


exhaust temperature and sends it to the ECM so that it can
feed the data loggers).

Capability Analysis is a technique that is used to


determine how well a process meets a set of specification
limits. In our case each parameter (for instance engine
speed) should not exceed or go below a particular threshold
limit relative to another parameter(for instance: net
engine torque) and the data that corresponds to it.

Steps in Capability:
1. Included the list of trucks that we were interested in
looking at.
2. Load the data into minitab window.
3. Test the data for the current product threshold values.

Fig.1 Process Capability normal Distribution


Indicates a
6 problem
Fig.2 Process Capability gamma distribution

The Capability analysis gave us


• An estimate of the DPMO(defects per million opportunities)
• One or more capability indices
• An estimate of the Sigma Quality Level at which the process
operates.

4. Report bad diagnostics so that service engineers could


remotely tune the calibrations accordingly thereby
preventing the ECM from setting false faults.

7
Fig.3 Capability Analysis result

Results: Thus the risk assessment for the problem of false faults was
successfully studied and countered using powerful software tools such as
matlab and minitab.

8
Diagnostic Addition-Fault Code Monitoring
Improvement Module-II

Introduction: Every engine produced in our plant is sold only


after it meets the emissions and the performance requirements on
the test cells. As a part of our test procedure there are
certain parts that we purposefully fail on the test cell to
check if the ECM is able to set the fault codes as expected. Our
Engines are tested on Eddy current dynamometers. A Dynamometer
is a load device which is generally used for measuring the power
output of an engine. The Eddy current dynamometer is an
electromagnetic load device. The engine being tested spins a
disk in the dynamometer. Electrical current passes through coils
surrounding the disk, and induce a magnetic resistance to the
motion of the disk. Varying the current varies the load on the
engine.

Fig.4 Cummins Test Bench

9
Problem Statement: Just like the catalytic converter on the car there is an
After-treatment module that is connected to the exhaust of the engine to
reduce particulate emissions. This device basically forces the exhaust to
pass through a porous ceramic material that captures the exhaust particles.
The surface of the ceramic is coated with a catalyst that oxidizes the
particles as they are collected within the catalyst. From here on a liquid
reductant ,typically a combination of urea and water is added to convert the
harmful nitrogen oxide gases to water and nitrogen thereby facilitating near
zero emissions. This Process is called selective catalytic reduction.

Fig.5 After treatment Module

There is a particular volume of Nox that is supposed to enter the


after treatment system. A sensor monitors the rate of Nox and
the particulate matter entry into the module. We wanted to
actually come up with a procedure to monitor this phenomenon and
subsequently include this in the capability analysis. From prior
field data we knew both the lower and upper threshold limits on
the inlet Nox volume. Even though the ECM is programmed to
monitor most or all of the engine parts and conditions ,certain
engine conditions do get left out.

Objective: To understand how this diagnostic works and determine


and simulate the parameters that would define the proximity of
this monitor to the threshold thereby facilitating a more robust
capability analysis.

10
Analysis: This OBD Monitor sets the diagnostic trouble code on
the engine computer only during particular engine conditions.
The idea was to first predict the instances at which this fault
code would be set if this engine had to run on the field and
then proceed to predict the phenomenon of false faults. To
successfully predict the instance at which the fault was set we
needed to perform a logic analysis using simulink. All the
possible engine conditions that contributed to this phenomenon
were considered and a simulink model was generated. This model
basically captures the offset volume of the Nox volume that the
Nox Sensor on the aftertreatment module monitors and sends the
signal to the ECM . Once this was done I had to write a script
in matlab that would be compatible to the master data processing
program used for the capability analysis.

Fig. 6 Simulink Model

11
Synthesis: The issue we faced here was that one of the
parameters that formed a integral condition for this OBD monitor
to set a fault was not logged by the data loggers on some
trucks. In other words we did not monitor the efficiency of this
parameter and its effects on the engine performance earlier. To
include the Nox Sensor monitor to the capability, I validated
the data that was known to set this FC and we determined that
the above parameter was the only limiting factor that was
pulling the capability down.

Table 1. Logging Status Table

EONOx_Resp EONOx_Sensor EONOX_first_Catin_pre Matfile


Truck
_Mot_enbl status ss status date
Logging status Logging status Logging status

F_Messilla_Valley yes yes yes 7-Jul


F_EagleTransport yes yes yes 8-Jul
ENG_T_110 yes yes yes 26-Jul
F_Frieghtliner_232_4444 no yes yes 12-Jul
F_DaytonFreight no yes no 1-Jul
F_DavisExpress_6896_8541 yes yes yes 18-Jul
F_WindwalkerTransport_2915_97
21 yes yes yes 16-Jul
R_T_103 no yes yes 17-Jul
F_staker_parsons yes yes yes 26-Jul
F_MillerBrothers_6849_9211 yes yes yes 19-Jul

12
Fig.7 Graph before fix & Fig.8 Graph after fix

Results: Thus the Nox sensor monitor was successfully checked


for compatibility with other OBD monitors and included in the

13
capability analysis thereby increasing our efficiency when it
came to conducting an assessment for risk of fault faults.
OBD Charge Temperature Investigation

Improvement Module-III

Introduction: The ECM(electronic computer module) is programmed to


receive information from what we call OBD Monitors. An OBD
monitor comprises of several engine parameters that work in
tandem with each other. For instance the turbocharger on the
engine has parameters like gas inlet temperature, gas inlet
pressure, gas exhaust temperature, gas exhaust pressure,
EGR(exhaust gas recirculation) flow and so on. All these
parameters typically make up an OBD Monitor. Our problem here
deals with the turbocharger and Charge air temperature.
Compressing air in the turbocharger increases the air's
temperature, which can cause a number of problems. Excessive
charge air temperature can lead to detonation, which is extremely
destructive to engines. When a turbocharger is installed on an
engine, it is common practice to fit the engine with an intercooler
(also known as a charge air cooler, or CAC), a type of heat exchanger which
gives up heat energy in the charge to the ambient air. Over time
an intercooler can develop leaks, losing boost pressure, and
reducing fuel economy. It is common practice to leak test the
intercooler during routine service, particularly in trucks where
a leaking intercooler can result in a 20% reduction in fuel
economy.

Problem Statement: We had to demonstrate this OBD Monitor for a low


horsepower rating and it failed the emissions test. Our engines
typically give us 600HP but a particular customer wanted an
engine with a less horsepower rating. We could not sell the
engine because we could not get the OBD Monitors to comply with
the current emission norms set for heavy duty diesel engines by
the EPA(Environmental Protection Agency).

Objective: To demonstrate the monitor for emissions we had to


increase the threshold limit on one of the parameters by using
the available field data.

14
Procedure:
 Gathered data from the field.
 Determined the maximum charge air temperature for a typical
truck “run-day” using matlab.
 Pushed the threshold limit closer to the maximum value and
tuned it in the calibrations so that the ECM does not set a
fault.
 Check for emissions compliancy and risk on false faults by
conducting trials on the field.

We increased the threshold to 92C


ENG_T_8022_ALA
on the monitor. It was earlier at
110
89C.
100
The Max Charge Temperature observed was 92.35 [C]

90

80
Daily Max Charge Temp

70

60

50

40

30

20

10

0
05/04/2009 05/29/2009 06/23/2009 07/18/2009 08/12/2009 09/06/2009 10/01/2009

Fig. 9 Charge Temperature graph

Result: Once the threshold was increased we could actually get


the monitor to be compliant for its emissions and we could
Successfully demonstrate the monitor for the required horsepower
rating.

15
OBD Calibrations tuning for Engine Stumble

Improvement Module IV

Introduction: Engine Stumble is a phenomenon that occurs when the


engine misfires, hesitates when you accelerate or step on the
throttle. The problem often means the air/fuel mixture is not being
properly enriched or is going lean, or the ignition system is weak and
is misfiring when the engine comes under load or the air/fuel mixture
goes lean. When we step down on the accelerator and the throttle
opens, the engine sucks in more air. The computer should respond by
adding more fuel. The engine has an airflow sensor and it looks
primarily at the airflow signal from it and also takes into account
the values throttle position sensor and Mass Air Pressure sensor.
Consequently if the inputs from any of these sensors is inaccurate or
missing the engine computer may not add enough fuel, allowing the fuel
mixture to go lean causing a misfire. These sensors basically function
in reference with a look up table that is stored in the ECM. This
table is termed as the low boost misfire table.

Problem Statement: We encountered the stumble issue on all or most of


our current product engines. Characteristic of a typical stumble
complaint include

 The stumble is repeatable above 80C coolant temperature.

 If the after treatment is removed ,the engine coughs white


smoke during the stumble.

 Stumble typically occurs between 1300 & 1600rpm, light


load.

 Engineering data looks problematic on a larger population


of our engines.

16
Fig.10 Engine stumble problem

Analysis:

Most of our engines were replaced with new sensors and the
engine hesitancy did stop but recurred after 4000 miles.
The new sensors had poor response to our baseline
calibration and over time minor errors accumulated and the
engine began misfiring because the computer did not receive
values within the specific threshold limits. I was
assigned the task of coming up with a revised calibrations
that would enhance the capabilities of the sensors. To fix
this issue I decided to slightly change the misfire tuning
table at specific engine speed. This was done on the
rationale that new sensors respond better to advanced
timing values. This was primarily done to get better
response from the sensors. We had the engine tested on a
dynamometer and a real time graph generator that was
plugged into the engine. After we tweaked the misfire table
we monitored the ramps on the signal generator and noted
the values for which the stumble disappeared and chalked
out a new table. Given below is the algorithm on which the
whole system works.

17
Fig.11 Flowchart sensor interface

Table changes:

Table 2 Calibration tuning

18
Results: The table tune up was put to test on the field and the
stumble issue did not recur on the field.

Fig.12 Field Result

19
Appendix

Protocol:

Comments in the code are green in color with the body being in black and conditional statements are in
blue.

Module I

ASSEMBLE DATA MAINSCRIPT

%This code essentially gets the data to us in a viewable format.Compiles the


Results into a Single File

%Call Script which initialize all OBD Key Paramters


OBDKeyParameters

%Check the Batch List to determine where the data was saved
TruckBatchList
% Change to the location of where the indivdual Truck analysis was saved
eval(['cd ','''',PathName,''''])
AllTruckData = dir('*mat');

% % PreAllocate for speed


% % AllFileNamesToProcessed = cell(500,5);

%% Stack Parameter 1 variable at a time to minimize resources


for obd=1:length(OBD_key_parms)
%Initalize Start Values
Obdstr = 1;
Tstr = 1;
FPstr = 1;
%Preallocate for Speed
Idx = 1:1:10000000;
for rws = 1:5
eval([OBD_key_parms{obd},'_total(Idx,',num2str(rws),')=nan;'])
end
eval([OBD_key_parms{obd},'_details = cell(10000000,1);'])
if obd==1
AllFileNamesToProcessed = cell(1000,5);
end

disp(['Now Processing ---> ',OBD_key_parms{obd}])

%Loop through each truck and collect the parameter of interest

20
for TrkLp = 1:length(AllTruckData)

%Capture the File Name Process list on the first pass in addition to
if obd==1
eval(['load(','''',AllTruckData(TrkLp).name,'''','
,','''',OBD_key_parms{obd},'''',',','''',
'FileNamesToProcess','''',',','''','TName','''',')'])

%Stack the list of Trucks Processed


[NwFP, NwFPW] = size(FileNamesToProcess);
for FPidx =1:NwFP
for FPcl = 1:NwFPW
AllFileNamesToProcessed{(FPstr+FPidx)-1,FPcl} =
FileNamesToProcess{FPidx,FPcl};
End
end
%Reassign Start values to prevent overwriting
FPstr = FPidx+FPstr;

else
eval(['load(','''',AllTruckData(TrkLp).name,'''','
,','''',OBD_key_parms{obd},'''',',','''','TName','''',')'])
end

%% Stack the parameter together

%Put the totals into a single matrix


[NewRows,Clmns] = size(eval(cell2mat(OBD_key_parms(obd))));

eval([cell2mat(OBD_key_parms(obd)),'_total(',num2str(Obdstr),':',num2str((New
Rows+Obdstr)-1),',1:',num2str(Clmns),')=',cell2mat(OBD_key_parms(obd)),';'])

%Populate Truck name in details


for Tidx = Obdstr:1:((NewRows+Obdstr)-1);
eval([cell2mat(OBD_key_parms(obd)),'_details{Tidx,1} =TName;' ])
end

Obdstr = NewRows+Obdstr;
end
%cleanup the data Rows First
eval(['RmvPts = find(isnan(',OBD_key_parms{obd},'_total(:,2))==1);'])
eval([OBD_key_parms{obd},'_total(RmvPts,:)=[];'])
eval([OBD_key_parms{obd},'_details(RmvPts)=[];'])

%Protects agains all NANs


if eval(['isempty(',OBD_key_parms{obd},'_total)==0'])
%Now Extra Columns
eval(['RmvPts = find(isnan(',OBD_key_parms{obd},'_total(1,:))==1);'])
eval([OBD_key_parms{obd},'_total(:,RmvPts)=[];'])
21
end

%Save the data


if obd ==1

if exist(SavePath,'dir') == 0
mkdir(SavePath)
else
eval(['delete ','''',SavePathFile,''''])
end
eval (['save ','''', SavePathFile,'''',' ',OBD_key_parms{obd},'_total
',OBD_key_parms{obd},'_details'])

% Clean Up File Process Record & Save


RmvPts = find(cellfun('isempty',AllFileNamesToProcessed(:,1))==1);
AllFileNamesToProcessed(RmvPts,:) = [];
eval(['save ','''', SavePathFile,'''',' AllFileNamesToProcessed - APPEND'])
else
eval (['save ','''', SavePathFile,'''',' ',OBD_key_parms{obd},'_total
',OBD_key_parms{obd},'_details',' -APPEND'])
end
keep obd SavePathFile AllTruckData OBD_key_parms
end
clear

OBD Analysis Main Script

% Block warnings
system_dependent('DirChangeHandleWarn', 'Never');

%Call script which contains list of trucks to process * Date Range


TruckBatchList
for MnLp = 1:length(TrucksToProcess(:,1))
TName =TrucksToProcess{MnLp};

%Call function which create File Name Paths for dates of interest
[FileNamesToProcess] =
OBDFilePathCreator(TName,FirstDayOfInterest,LastDayOfInterest);
if isempty(FileNamesToProcess)
disp(['No good data for ', TName])
continue
end

22
% Captures ECM Daily Time Span
ECMTimeRange = zeros(length(FileNamesToProcess(:,1)),2);

%% Start Processing Truck Days


%Call Script which initialize all OBD Key Paramters
OBDKeyParameters
for i=1:length(OBD_key_parms)
eval([cell2mat(OBD_key_parms(i)),'=[];'])
end

for FNP = 1:length(FileNamesToProcess(:,1))


%Check for List of Badfiles
BadFile = BadFileList(FileNamesToProcess{FNP,1});

if BadFile == 0

eval(['load(',FileNamesToProcess{FNP,2},',','''','i_Calibration_Version',''''
,')'])

%% Perform Software Check


CVCheck = 0;
if exist('i_Calibration_Version','var')
%Check if its a Cell, otherwise assume it a char
if isa(i_Calibration_Version,'cell')
for CV=1:1:length(i_Calibration_Version);
if
strcmp(SWVersion1(1:4),i_Calibration_Version{CV}(1:4))
CVCheck=CVCheck+1;
end
end
else
CV=1;
CVCheck = strcmp(SWVersion1(1:4),i_Calibration_Version(1:4));
end
if CVCheck~=CV

%Record files reject for incorrect cal version

FileNamesToProcess{FNP,4} = 'Incorrect Calibration Version';


disp(['Matfile --> ',FileNamesToProcess{FNP,1},'<-- Rejected for Incorrect
Cal Version'])
continue
end
end

%% Check for Multi Rate Data logging

23
eval(['load(',FileNamesToProcess{FNP,2},',','''','ECM_Run_Time','''',',',''''
,'ECM_Run_Time_30000ms','''',',','''','ECM_Run_Time_5000ms','''',')'])

if
exist('ECM_Run_Time_5000ms','var') && exist('ECM_Run_Time_30000ms','var') &&
exist('ECM_Run_Time','var')...
&& isempty(ECM_Run_Time)==0 && isempty(ECM_Run_Time_5000ms)==0 &&
isempty(ECM_Run_Time_30000ms)==0

eval(['load(',FileNamesToProcess{FNP,2},')'])

%Run Preprocess script which removes NANs


DeNaN
DeNaN_5000ms
DeNaN_30000ms

%Check to ensure that Multi Rate data still exists


if isempty(ECM_Run_Time_5000ms)==1 || isempty(ECM_Run_Time_30000ms)==1 ||
isempty(ECM_Run_Time)
if isempty(ECM_Run_Time)
FileNamesToProcess{FNP,4} = 'ECM Run Time Data All NANs';
else
FileNamesToProcess{FNP,4} = 'MultiRate Data All NANs';
end
disp(['Matfile --> ',FileNamesToProcess{FNP,1},'<-- MultiRate Data All
NANs'])
continue
else
disp(['Good Matfile --> ',FileNamesToProcess{FNP,1}])
OBDWorkSpaceCreator

%Grab the min & max time


GrtZ = find(ECM_Run_Time > 0);
FileNamesToProcess{FNP,4} = num2str(min(ECM_Run_Time(GrtZ)));
FileNamesToProcess{FNP,5} = num2str(max(ECM_Run_Time));
end
else
FileNamesToProcess{FNP,4} = 'MultiRate Data Missing';
disp(['Matfile --> ',FileNamesToProcess{FNP,1},'<-- MultiRate Data
Missing'])
end
end

%% Parameters to keep
Keep_sv= ['FileNamesToProcess',' TName ',' FNP',' OBD_key_parms','
TrucksToProcess',' SWVersion1',' SWVersion2',' SWVersion3',...
' CapabilityDate',' MnLp',' PathName',' FirstDayOfInterest','
LastDayOfInterest'];
for i=1:length(OBD_key_parms)
Keep_sv_temp=[' ',char(cell2mat(OBD_key_parms(i)))];
Keep_sv=[ Keep_sv , Keep_sv_temp];
clear Keep_sv_temp

24
end
eval(['keep ',Keep_sv])
%%
end

%% Create Folder Structure To Save Data

PathNameFileName=([PathName,TName,'_',num2str(FirstDayOfInterest),'_',num2str
(LastDayOfInterest),'_SWver',SWVersion1,'.mat']);

if exist(PathName,'dir')~=7
mkdir(PathName)
end

% Create list of variables to save


str_sv= 'FileNamesToProcess';
for i=1:length(OBD_key_parms)
str_sv_temp=[' ',char(cell2mat(OBD_key_parms(i)))];
str_sv=[str_sv , str_sv_temp];
clear str_sv_temp
end
str_sv=[str_sv , ' ','TName'];

eval(['save ','''',PathNameFileName,'''',' ',str_sv ,' OBD_key_parms']);

eval(['clear ',str_sv,' OBD_key_parms'])

keep SWVersion1 SWVersion2 SWVersion3 CapabilityDate MnLp


TrucksToProcess PathName FirstDayOfInterest LastDayOfInterest

end

send_text_messageNRS('716-566-8487','cingular','','OBD Capbility
COMPLETED!!!!!!!!!')
% send_text_messageNRS('315-243-8152','verizon','','OBD Capbility
COMPLETED!!!!!!!!!')

OBDMail('OBD Script Completed','ji501')

(The difference between the code below and the data


processing program above is that this code helps us to
look for data from specific trucks belonging to specific
customers whereas the latter spits out data from all the
engines that our plant sells).

25
Truck batch list

%% Software versions and Date Process was completed


SWVersion1 = ‘7.70.0.0’ ;
SWVersion2 = ‘7.70.0.0’ ;
SWVersion3 = ‘7.70.0.0’;

CapabilityDate =’110125’;

%% Data Range to be processed


% FirstDayOfInterest = datenum(2010,12,06);
FirstDayOfInterest = datenum(2010,11,10);
LastDayOfInterest = datenum(2011,01,30);
% LastDayOfInterest = datenum(2010,12,12);

%% list of trucks to be included in the analysis

%% PacLiteTrucks

TrucksToProcess = { ‘ENG_T_112_9960’
‘ENG_T_132_7550’
‘ENG_T_133_9961’
’ENG_T_136_9958’
’ENG_T_261_9959’
’ENG_T_50113_9411’
’F_CFI_5922_0431’
’F_Penske_4478_0432’
’F_Swift_9627_0429’
’F_WalMart_4343_0428’
};

TrucksToProcess = {’F_AnRTransport_6980_8053’
’F_WasteMgtPCR_9474_0017’
‘F_WasteMgtATO_9448_0039’
‘F_DavisExpress_6896_8541’
‘F_AnRTransport_6981_0016’
‘F_StakerParsons_7409_0437’
‘F_EstesExpress_2611_8545’
‘F_KenanAdvantage_5851_9562’
‘F_EagleTransport_7986_0018’
‘F_EagleTransport_7985_0440’
‘F_Diamond_6805_6572’
‘F_DaytonFreight_0992_9568’
};
Monarch Trucks
TrucksToProcess = {%’F_Swift_9627_8738’
26
‘F_CFI_5922_8593’
‘F_Freightliner_231_8377’
‘F_HighMountain_5099_4127’
‘F_MesillaValley_5555_2888’
‘F_MillerBrothers_6849_9211’
‘F_VanWyk_2515_4404’
‘F_Freightliner_233_9182’
‘F_Carlile_8572_7360’
‘F_HighMountain_5099_9185’
‘F_PaccarLease_7149_9186’
‘F_Allison_1147_9181’
‘F_Knight_7653_0062’
‘F_Knight_7739_6310’
‘F_CFI_5922_8593’
‘F_Freightliner_231_8377’
‘F_Freightliner_232_4444’
‘F_Freightliner_234_2688’
‘F_MesillaValley_5555_2888’
‘F_MillerBrothers_6849_9211’
‘F_TriHi_6004_9185’
‘F_WindwalkerTransport_2915_9721’
};

%% The Main Folder where all data will be saved


PathName=[‘G:\NStock\AutoOBDCapability\OBDCapabilityResults\’,SWVersion1,’_Co
mpleted_’,CapabilityDate,’\’];

TSlash = findstr(PathName,’\’);
SavePath = ([PathName,’CompiledData’]);
SavePathFile = ([SavePath,PathName(Tslash(end-1):Tslash(end)-
1),’_OBDCompiledData.mat’]);

27
Module-II Matlab code

%This script essentially enables the Inrange high/low monitor


whenever the necessary conditions are met

MotEnable=zeros(size(Engine_Speed));

delayvec=zeros(size(Engine_Speed));

index=find(Engine_Speed>=1000&CBM_FdbkTorqueFuel<=0);

MotEnable(index)=1;

GoodNox=[];

ct=0;

delay=0;

for i=1:length(Engine_Speed);

if MotEnable(i)==1;

delay=delay+1;

if delay>10 && EONOx_Sensor_Status(i)==0 ;

ct=ct+1;

GoodNox(ct)=i;

end

else

delay=0;

end

delayvec(i)=delay;

end

figure

plot(EONOx_Comp_Value(GoodNox))

28
References

 Cummins Confidential Documents

 Diesel Engine forums

 www.Wikipedia.org

 www.enginecontrolsystems.com

29

You might also like