Diagnose-Projekte per COM-Schnittstelle bedienen

<< Click to Display Table of Contents >>

Navigation:  Diagnose mit CanEasy >

Diagnose-Projekte per COM-Schnittstelle bedienen

 

Mit der Implementierung der BSKD7 in CanEasy wurde auch eine entsprechende COM-Schnittstelle für die Bedienung der BSKD7 über VBA oder externe Software-Komponenten (C#, VB.Net,...) implementiert.

 

BSKD7-Projekte lassen sich über die COM-Schnittstelle verwalten und starten. Weiterhin ist es möglich Befehle und Makros auszuführen und die entsprechenden Rückgabewerte bzw. Puffer der BSKD7 (wie z.B. TInD und TOutD) auszulesen. Die Befehls- bzw. Makroausführung kann synchron oder asynchron (eventgesteuert) erfolgen. Damit lassen sich Diagnose-Funktionen z.B. durch die integrierte VBA-Entwicklungsumgebung visualisieren. Das BSKD7-Terminal-Fenster kann über die COM-Schnittstelle ausgeblendet werden, so dass die Steuerung der Diagnosetätigkeiten komplett z.B. über eine VBA-Oberfläche gesteuert werden kann.

 

Diagnose-Kommunikation mit einem Steuergerät über eine mit VBA erstellte Oberfläche. Wird das BSKD-Terminalfenster nicht benötigt, kann es ausgeblendet werden.

Diagnose-Kommunikation mit einem Steuergerät über eine mit VBA erstellte Oberfläche. Wird das BSKD-Terminalfenster nicht benötigt, kann es ausgeblendet werden.

 

Die Schnittstelle zur BSKD7 wird über das Objekt BSKDApp zur Verfügung gestellt. Dazu muss ein entsprechender Verweis auf das Typbibliothek "BSKD 1.0 Typbibliothek" (BSKDTerminal.plu) gesetzt werden. Nach der Installation von CanEasy ist dieser Verweis in der VBA-Entwicklungsumgebung bereits gesetzt.

 

 

Verwendung der Ein- und Ausgangspuffer

 

Mit der BSKD7 wird unter anderem auch der Test der Diagnosekommunikation ermöglicht. Die gesamte Diagnosekommunikation läuft über die globalen Puffer TIn/TInD und Tout/TOutD. Über diese Puffer können bis zu 1kB Nutzdaten verarbeitet werden. Nachfolgende Grafik verdeutlicht die möglichen Kommunikationswege und die Nutzung der Puffer.

 

BSKD_Schema

 

TIn und TOut bestehen aus folgenden Teilen:
 

Länge des Telegramms (16 Bit, low Byte, high Byte).

Telegramm-Header

Telegramm-Daten (Kontrollbyte bzw. Service-Identifier und zugehörige Daten bzw. Parameter)

Prüfsumme

 

Da der Header nur für den Test der Diagnosekommunikation selbst, nicht aber für die normale Verwendung der Diagnose, gebraucht wird, gibt es Synonyme für den Zugriff auf die Telegramm-Daten: TInD/TOutD.

 

Hinweis Hinweis:
TInD und TOutD sind keine echten Puffer sondern nur so was wie Zeiger auf die passende Stelle in TIn/TOut.

 

Beispiel: ID 0xFF bei serieller BSK-Diagnose 7:

 
Auftrag:

Telegrammlänge

ECU-Adresse

Länge

Kontrollbyte

Daten

Prüfsumme

05  00

AB

05

49

FF

18

 

Antwort:

Telegrammlänge

ECU-Adresse

Länge

Kontrollbyte

Daten

Prüfsumme

08  00

AB

08

49

12 34 56 78

E2

 

Der Header besteht in dem Fall aus zwei Bytes, Steuergeräte- bzw. ECU-Adresse und Länge und TInD[0] / TOutD[0]. Diese  enthalten das Kontrollbyte (="KB" oder "SI" für "Service Identifier"; Adresse von TInD[0] = Adresse von TIn[4]). Für den Zugriff auf das erste Datenbyte nach dem Kontrollbyte über TIn/TOut statt TInD/TOutD gibt es das Symbol TD1Pos, das in diesem Fall den Wert 5 hat (Adresse von TInD[1] = Adresse von TIn[TD1Pos]). Gesendet würden in dem Fall genau die fünf Bytes: 0xAB, 0x05, 0x49, 0xFF, 0x18

 

 

Beispiele für die Verwendung der Puffer über die COM-Schnittstelle

 

Diese Puffer stehen über die COM-Schnittstelle zur Verfügung. Nachfolgendes VBA-Beispiel zeigt z.B. wie Daten aus dem Puffer TInD nach Ausführung eines Diagnose-Kommandos ausgelesen werden:

 

Private Sub ErstesBSKDMakro()

 

'Objekt für BSKD7 definieren

Dim oBskd As BSKDApp
'Rückgabewerte von synchronem Aufruf

Dim oBSKDResult As BSKDExecutionResult

'Variable für Puffer anlegen

Dim vDaten as Variant

'Konstante für Diagnose-Timeout definieren
Const cTimeoutDiagAnswer = 1000

 

'Neues Diagnose-Objekt erstellen

Set oBskd = New BSKDApp

'Befehl synchron absetzen (fünf Byte ab EEPROM-Adresse 123h lesen)

Set oBSKDResult = oBskd.ExecuteAndWait("kr $123,,5", cTimeoutDiagAnswer)

'TInd-Puffer-Daten in Variable lesen

vDaten = oBSKDResult.TInD

 

End Sub

 

Bei der synchronen Ausführung wartet das VBA-Makro, bis das BSKD7-Kommando oder -Makro ausgeführt wurde oder die übergebene Zeit in Millisekunden. Anschließend können die Daten direkt aus den Puffern gelesen werden (wie im Beispiel) oder stehen über den Rückgabewert BSKDExecutionResult von ExecuteAndWait zur Verfügung.
 
Ebenso können Puffer-Daten auch eventgesteuert bezogen werden. Dazu muss sich der Benutzer zunächst auf das Event mit oBSKD.ExecutedEvents = True registrieren. Wird das BSKD7-Kommando oder -Makro nun mit der Methode oBSKD.Execute abgesetzt, läuft das VBA-Makro direkt weiter. Das Event oBSKD_OnExecuted wird sofort nach beendeter Ausführung des BSKD7-Kommandos oder -Makros aufgerufen. Als Übergabeparameter der Eventfunktion stehen die Puffer in BSKDExecutionResult zur Verfügung.

 

'Objekt für BSKD7 definieren (mit Events)

Public WithEvents oBskd As BSKDApp

 

'Funktion zum asynchronen Absetzen eines Diagnosekommandos

Private Sub ZweitesBSKDMakro()

 

'Neues Diagnose-Objekt erstellen

Set oBskd = New BSKDApp

'Befehl asynchron absetzen (fünf Byte ab EEPROM-Adresse 123h lesen)

oBskd.Execute "kr $123,,5"

 

End Sub

 

'Folgende Funktion wird als Event nach Ausführung des Diagnose-Kommandos ausgeführt

Private Sub oBskd_OnExecuted(ByVal arg As CanEasyBSKD.BSKDExecutionResult)

 

    'Variable für Puffer anlegen

Dim vDaten as Variant

 

'Daten aus Puffer lesen
vDaten = arg.TInD

 

End Sub

 

 

Hinweis Hinweis:
Die Beispielmakros setzen ein funktionierendes BSKD7-Projekt voraus.

 

 

VBA-Events der BSK-Diagnose 7

 

Bei Verwendung der asynchronen Befehlsausführung stehen die folgenden Events zur Verfügung:

OnDiagTransmission (ByVal arg As CanEasyBSKD.BSKDDiagTransmissionResult)
Dieses Event wird bei jedem Diagnose-Request und -Response ausgeführt.

OnExecuted (ByVal arg As CanEasyBSKD.BSKDExecutionResult)
Dieses Event wird ausgeführt, wenn die Ausführung eines aktuellen Diagnose-Kommandos/Makros komplett abgeschlossen und das Terminal wieder eingabebereit ist.

 

Beide Events können unabhängig voneinander über die folgenden Eigenschaften aktiviert werden:

TransmissionEvents = True

ExecutedEvents = True

 

Werden die genannten Events aktiviert, werden sie auch bei der direkten Befehlseingabe in das Terminalfenster ausgelöst. Es kann im Event OnExecuted mit Hilfe der übergebenen Eigenschaft arg.IsOwnCommand unterschieden werden, ob es sich um einen Event aus einem eigenen asynchronen VBA-Aufruf handelt oder das Event durch ein fremdes Ereignis, wie z.B. die Eingabe eines Befehls im Terminal-Fenster, ausgelöst wurde.

 

In beiden Events stehen entsprechende Ergebnisse im Parameter als Struktur zur Verfügung wie z.B. TInD/TOutD und Status der Ausführung.

 

Sind beide Events aktiviert, werden sie beim Ausführen eines Diagnose-Service oder Makro wie folgt aufgerufen:
 

BSKD_Events