webinar: automate vehicle diagnostic sequences
TRANSCRIPT
V1.1 | 2017-12-06
Create, configure and send diagnostic request with Indigo
Webinar: Automate Vehicle Diagnostic Sequences
2
u Introduction
Development Environment
Runtime Environment
Diagnostic Sequences
User Interaction
Tips & Tricks
Help & Documentation
Agenda
3
Vector Diagnostics Scripting Library
Introduction
u .NET based library for diagnostic sequences
u Vector Diagnostic Scripting Library (VDS Library)
u Author diagnostic sequences in any .NET based language> C#
> VB.NET
u Features
u Interaction with ECUs using diagnostics (request / response)
u Interaction with an user using dialogs (value input / confirmation)
4
Interoperability
Introduction
u Works in Vector Diagnostic Test Tools
u Indigo
u CANoe
u CANape
u vFlash (Custom Actions)
5
Application areas
Introduction
u Learning of pedal / window positions
u Documentation of vehicle ECUs (ID data) and their state (fault memory)
u Read out ECU identification data and print it
u Diagnostic Logger
u OBD Logger
u … and much more!
6
Introduction
u Development Environment
Runtime Environment
Diagnostic Sequences
User Interaction
Tips & Tricks
Help & Documentation
Agenda
7
Code Editors
Development Environment
u Microsoft Visual Studio 201x (recommended)
u Microsoft Visual C# Express 201x (recommended)
u https://www.visualstudio.com/en-us/products/visual-studio-express-vs.aspx
u Microsoft Visual Studio Community 2013
u https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx
u SharpDevelop
u http://www.icsharpcode.net/opensource/sd/
u Notepad
8
Introduction
Development Environment
u Runtime Environment
Diagnostic Sequences
User Interaction
Tips & Tricks
Help & Documentation
Agenda
9
u Execute scripts in Script Runner
u Open Script Manager
u Load script
u Open Script Runner
u Execute script
Indigo
Runtime Environment
10
u Execute scripts via command line interface
u No user interface
u Indigo.exe [IndigoProjectFile] [ScriptName] /log [LogFilePath]
u Return values
u 0: Success
u 100: Loading project failed
u 200: Script is missing
u 300: Error on script execution
u 400: Communication error
u 500: Invalid command line arguments
u 1000: Unknown error
Indigo
Runtime Environment
12
Vector VN8810 Intelligent Diagnostic Device
Runtime Environment
VN8810
Kernel
Windows
WLAN / LAN
vScriptDiagnostics
Buttons, LEDs, ...
u Project/data supply
u Action documentation
u Vehicle reports
WLANu Control execution
u Select project
u Provide user input
u Visualize results
XL driver
u Control execution
VDSProjects
User Libraries
ECU
13
u Import diagnostic sequences in CANape
u Tools | Task Manager
u .NET scripts
u Insert | .NET Scripts | Insert …
CANape
Runtime Environment
14
CANoe
Runtime Environment
u Import diagnostic sequences in CANoe
u View | Automation Sequences
u .NET Snippets
15
vFlash
Runtime Environment
u vFlash Custom Actions
u PreFlash Actions
u PostFlash Actions
u Attributes = Parameters passed to script
16
Introduction
Development Environment
Runtime Environment
u Diagnostic Sequences
User Interaction
Tips & Tricks
Help & Documentation
Agenda
17
u Vector.Diagnostics.dll
u Library for diagnostic objects (ECUs, requests, responses, …)
u Vector.Tools.dll
u Tool specific objects (Logging output, …)
u Vector.Scripting.UI.dll
u User interaction (Dialogs)
u (only Indigo / CANoe)
u Vector.Scripting.dll
u Execution.Wait()
u Vector.Indigo.Scripting.FaultMemory.dll (Indigo only)
u Convenient fault memory API
Assembly Overview
Diagnostic Sequences
19
Working with ECUs
Diagnostic Sequences
u Vector.Diagnostics.Application class
Accessing the first ECU in the project / configuration
Accessing an ECU by qualifier
Ecu ecu = Application.GetEcu();
Ecu ecu = Application.GetEcu("MyEcuQualifier");
20
Accessing diagnostic requests
Diagnostic Sequences
u Working with requests
Creating a request by qualifier
Creating a request by pdu
string serviceQualifier = "VIN_Read";
Request request = ecu.CreateRequest(serviceQualifier);
var pdu = new byte[] {0x22, 0xF1, 0x90};
Request request = ecu.CreateRequest(pdu);
21
Send data to ECU and evaluate response
Diagnostic Sequences
SendResult result = request.Send();
u Sending a request to an ECU
u Handle communication errors
if (result.Status == SendStatus.CommunicationError)
{
// Handle communication error
}
22
Send data to ECU and evaluate response
Diagnostic Sequences
u Accessing response(s)
if (result.Status == SendStatus.Ok)
{
Response response = result.Response;
// Access response parameter
foreach (Response response in result.Responses)
{
// Access response parameter
}
}
23
Send data to ECU and evaluate response
Diagnostic Sequences
u Working with response data
u Accessing raw data
byte[] rawResponseData = response.Pdu;
24
Send data to ECU and evaluate response
Diagnostic Sequences
u Working with response data
u Accessing parameters via qualifier
u Accessing parameters using the parameter collection
Parameter parameter = response.GetParameter("VIN");
ParameterCollection parameters = response.Parameters;
foreach (Parameter parameter in parameters)
{
// process parameter values
}
25
Send data to ECU and evaluate response
Diagnostic Sequences
u Working with parameters
u Name
u Qualifier
u Description
u Unit
string parameterName = parameter.Name;
string qualifier = parameter.Qualifier;
string description = parameter.Description;
string parameterUnit = parameter.Unit;
26
Send data to ECU and evaluate response
Diagnostic Sequences
u Working with parameters
u Value
Value value = parameter.Value;
// Accessing raw parameter value
byte[] rawData = value.GetBytes();
// Accessing physical / symbolic parameter value
double valueAsDouble = value.ToDouble();
int valueAsInt32 = value.ToInt32();
uint valueAsUInt32 = value.ToUInt32();
string valueAsString = value.ToString();
28
Security Access: Unlocking ECUs
Diagnostic Sequences
u Unlock ECU in level 0x01
u Unlock ECU in level 0x01 using an additional option string
SecurityAccessResult result = ecu.Unlock(0x01);
SecurityAccessResult result = ecu.Unlock(0x01, "OptionString");
29
Security Access: Unlocking ECUs
Diagnostic Sequences
u Error / success handling
public enum SecurityAccessResult
{
NoResult = 0,
Success = 1,
InvalidSeedKeyDll = 10,
CommunicationError = 11,
NegativeResponse = 12,
Failure = 100,
}
30
Security Access: Unlocking ECUs
Diagnostic Sequences
u Unlocking ECU in specified security level
GenerateSecurityKeyResult result =
Application.GenerateSecurityKey(
ecu,
seed,
securityLevel,
option,
out key);
31
Security Access: Unlocking ECUs
Diagnostic Sequences
u Error Handling
public enum GenerateSecurityKeyResult
{
NoResult = 0,
Success = 1,
InvalidSeedKeyDll = 10,
InvalidVariant = 11,
InvalidSecurityLevel = 12,
Failure = 100,
}
32
Indigo Extension: Access Fault Memory
Diagnostic Sequences
u Reading DTCs
// Get current ECU
Ecu ecu = Application.GetEcu();
// Read fault memory from ECU
DtcCollection dtcCollection = DtcReader.ReadDtcs(ecu);
foreach (Dtc dtc in dtcCollection)
{
Output.WriteLine("DTC Code: " + dtc.ErrorCode);
Output.WriteLine("DTC Text: " + dtc.ErrorText);
Output.WriteLine("DTC Status: 0x" + BitConverter.ToString(dtc.Status));
}
33
Indigo Extension: Access Fault Memory
Diagnostic Sequences
u Reading Environment Data for DTCs
// Read environment data for the DTC
DtcInfoCollection snapshotRecords = DtcReader.ReadSnapshotRecord(ecu, dtc);
// Write environment data to output
foreach (DtcInfo snapshotRecord in snapshotRecords)
{
Output.WriteLine(snapshotRecord.Name + ": " + snapshotRecord.Value + snapshotRecord.Unit);
}
34
Indigo/VN88 Extension: Vector.Diagnostics.Obd
Diagnostic Sequences
u Convenience API for reading out OBD data from the vehicle
u Supported OBD Data
u OBD Discovery
u Read Powertrain Diagnostic Data (Mode $01)
u Access OBD Fault Memory (Mode $02, $03, $07, $0A)
u Read Info Type Data like VIN, .. (Mode $09)
u Read On-Board Monitoring Test Results (Mode $06)
u Supported Standards
u OBD II (SAE J1979 / ISO 15031)
u WWH-OBD (ISO 27145)
35
Indigo/VN88 Extension: Vector.Diagnostics.Obd
Diagnostic Sequences
u Use Cases
u Create customized OBD reports
u OBD Logger / Diagnostic Logger
u Collect OBD fleet data via VN8810
u and much more!
36
Indigo/VN88 Extension: Vector.Diagnostics.Obd
Diagnostic Sequences
u OBD Discovery
u Start OBD Discovery
u Determine if OBD discovery was successful
DiscoveryResult result = ObdDiscovery.Discover();
if (result.Status == ResultStatus.Success)
{
// OBD Discovery successful ...
}
else
{
// OBD Discovery failed ...
}
37
Indigo/VN88 Extension: Vector.Diagnostics.Obd
Diagnostic Sequences
u OBD Discovery
u Determine OBD standard used by the ECU
if (result.ObdType == ObdType.OBD2)
{
// Handle OBD 2 ECUs ..
}
else if (result.ObdType == ObdType.WWHOBD)
{
// Handle WWH-OBD ECUs ..
}
38
Indigo/VN88 Extension: Vector.Diagnostics.Obd
Diagnostic Sequences
u OBD Discovery
u Accessing the functional group for sending OBD requests
ObdFunctionalGroup funcGroup = result.ObdFunctionalGroup;
39
Indigo/VN88 Extension: Vector.Diagnostics.Obd
Diagnostic Sequences
u Accessing OBD Fault Memory
u Reading OBD DTCs
u Possible values for ObdDtcType enumeration
var ecuDtcCollection = funcGroup.ReadObdFaultMemory(ObdDtcType.All);
[Flags]
public enum ObdDtcType
{
None = 0,
Confirmed = 3,
Pending = 7,
Permanent = 10,
All = Confirmed | Pending | Permanent
}
40
Indigo/VN88 Extension: Vector.Diagnostics.Obd
Diagnostic Sequences
u Accessing OBD Fault Memory
u Clear DTCs
funcGroup.ClearFaultMemory();
41
Indigo/VN88 Extension: Vector.Diagnostics.Obd
Diagnostic Sequences
u Reading Mode $01 Data
u Retrieving supported OBD PIDs from ECUs
u Reading OBD PID data
u Accessing the supported OBD PIDs via enumeration
var supportedPids = funcGroup.ReadSupportedPids();
var obdPidEcuDataCollection = funcGroup.ReadObdPid( ObdPidCategory.PID_01_MonitorStatusSinceDtcsCleared);
ObdPidCategory
42
Indigo/VN88 Extension: Vector.Diagnostics.Obd
Diagnostic Sequences
u Reading Mode $09 Data
u Retrieving supported OBD InfoTypes from ECUs
u Reading OBD InfoType data
u Accessing the supported OBD InfoTypes via enumeration
var supportedInfoTypes = funcGroup.ReadSupportedInfoTypes();
var obdInfoTypeEcuCollection = funcGroup.ReadObdInfoType(ObdInfoTypeCategory.InfoType_04_CalibrationId);
ObdInfoTypeCategory
43
Introduction
Development Environment
Runtime Environment
Diagnostic Sequences
u User Interaction
Tips & Tricks
Help & Documentation
Agenda
44
Dialog Types
User Interaction
u Confirmation Dialogs
ConfirmationResult result =
ConfirmationDialog.Show(
"This is a message",
"This is the caption",
ConfirmationDialogButtons.OKCancel);
45
Dialog Types
User Interaction
u Input Dialogs
u Simple Data Input
DataEntryResult result =
DataEntryDialog.Show(
"This is a message",
"This is the caption",
"Additional information.",
ref value);
46
Dialog Types
User Interaction
u Input Dialogs
u Input Validation: Allow values in a range
DataEntryResult result =
DataEntryDialog.Show(
"This is a message",
"This is the caption",
"Additional information.", rangeCollection,
ref value);
47
Dialog Types
User Interaction
u Input Dialogs
u Input Validation: Allow values in a range
DataEntryResult result =
DataEntryDialog.Show(
"This is a message",
"This is the caption",
"Additional information.", rangeCollection,
ref value);
List<Range<int>> ranges = new List<Range<int>>();
ranges.Add(new Range<int>(1,4));
var rangeCollection = new RangeCollection<int>(ranges);
48
Dialog Types
User Interaction
u Input Dialogs
u Input Validation: Regular Expression
DataEntryResult result =
DataEntryDialog.Show(
"This is a message",
"This is the caption",
"Additional information.",
ref value,
@"^[A-Fa-f0-9]{2}$");
49
Dialog Types
User Interaction
u Input Dialogs
u Value Selection
DataEntryResult result =
DataEntryDialog.Show(
"Please select one value:",
"Data Input",
"Choose a value.",
ref value,
defaultIndex, valueTable);
50
Dialog Types
User Interaction
u Input Dialogs
u Value Selection
DataEntryResult result =
DataEntryDialog.Show(
"Please select one value:",
"Data Input",
"Choose a value.",
ref value,
defaultIndex, valueTable);
List<string> values = new List<string> { "My First Value", "My Second Value" };
ValueTable<string> valueTable = new ValueTable<string>(values);
51
Introduction
Development Environment
Runtime Environment
Diagnostic Sequences
User Interaction
u Tips & Tricks
Help & Documentation
Agenda
54
Debugging
Tips & Tricks
u How to debug diagnostic sequences?
u Prerequisites> Microsoft Visual C# Express / Microsoft Visual Studio
> Indigo
u Indigo> Script Manager
> Context Menu | Edit
> Indigo prepares Visual Studio solution and debugging environment
u Visual Studio> Simply press Debug | Start Debugging (F5)
55
Introduction
Development Environment
Runtime Environment
Diagnostic Sequences
User Interaction
Tips & Tricks
u Help & Documentation
Agenda
56
u API Description> Vector.Diagnostics:
VDSLibrary.chm
> Vector.Scripting.UI: Vector.Scripting.UI.chm
u Getting Started> <CANoe|CANape|Indigo>\Docs\
VDS_Library_QuickStart.pdf
u Examples> Reading Variant Coding:
> <CANoe|CANape|Indigo>\Examples\CodingReader.cs
API Documentation / Getting Started / Examples
Help & Documentation