<< 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.
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.
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: |
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 Dim oBSKDResult As BSKDExecutionResult 'Variable für Puffer anlegen Dim vDaten as Variant 'Konstante für Diagnose-Timeout definieren
'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
End Sub
|
Hinweis: |
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: