Strombasierte Python-Traceschrittvorlagen erstellen

Das Vorgehen zum Anlegen einer neuen Traceschrittvorlage wurde bereits im Abschnitt Allgemeines Vorgehen erläutert. Während das Anlegen von Signalen und Parametern für alle Vorlagearten identisch ist, unterscheidet sich die Implementierung der eigentlichen Analysevorschrift deutlich.

Strombasierte Traceschrittvorlagen bieten die Möglichkeit, eigenen Pythoncode einzugeben, der während der Traceanalyse für jeden Analysedurchlauf genau einmal ausgeführt wird. Im nachfolgenden Beispiel wird die Übergabe von Aufnahmen an ein externes Programm demonstriert.

../../../../../_images/TraceStepTemplates_PythonStreamBasedExample.png

ecu.test stellt standardmäßig die Funktion Handle bereit. Diese Funktion darf nicht umbenannt oder gelöscht werden, da ecu.test immer diese Funktion als Einsprungspunkt verwendet. Der Funktion werden beim Aufruf durch ecu.test vier Parameter übergeben:

recordingInfos:

Bietet Zugriff auf die Aufnahmen des aktuellen Analysedurchlaufs. Dieses Objekt ist immer eine Liste, auch wenn es nur eine Aufnahme im aktuellen Analysedurchlauf gibt.

dataContainer:

Stellt den Zugriff auf ecu.test-Variablen zur Verfügung. Die Beschreibung der Schnittstelle ist in der Dokumentation der Trace Analysis API zu finden.

parameters:

Ein Python-Dictionary, welches als Keys die Namen der Parameter und als Values deren zugehörige Werte enthält.

report:

Stellt den Zugriff auf den Testreport zur Verfügung. Die Beschreibung der Schnittstelle ist in der Dokumentation der Trace Analysis API zu finden.

Um die vorhandene Aufnahme an ein externes Programm zu übergeben, erfragt man zuerst den Dateinamen inkl. Pfad zur Aufnahme:

for recordingInfo in recordingInfos:
    path = recordingInfo.GetPath()

for recordingInfo in recordingInfos iteriert über alle RecordingInfo-Object des aktuellen Analyse-Laufs und recordingInfo.GetPath() liefert den Dateipfad der Aufnahme zurück.

Um diese nun einem externen Programm zu übergeben, kann das Pythonmodul os.system genutzt werden:

import os
cmdLine = '"C:/Programme/Programm.exe" -c "%s"'
...
    result += os.system(cmdLine % path)

Im dargestellten Beispiel wird dem Programm Programm.exe mit dem Parameter c der Pfad der Aufnahme übergeben. Dieser Programmaufruf gibt einen Rückgabewert zurück (zumeist 0 bzw. 1 für fehlgeschlagen bzw. erfolgreich beendet). Dieser Rückgabewert wird in der Variablen result aufaddiert.

Zuletzt soll je nach dem Wert von result das Resultat des Traceschrittes im Testreport angepasst und ein kurzer Kommentar im Testreport ausgegeben werden:

if result > 0:
    report.SetResultId(report.RESULT_ID_ERROR)
    report.SetResultText("Some ERRORs occurred!")

else:
    report.SetResultId(report.RESULT_ID_SUCCESS)
    report.SetResultText("All checks SUCCESSful!")

Über das report-Objekt kann wie dargestellt auf den Testreport zugegriffen werden. Während die Funktion SetResultId das Ergebnis festlegt, gibt die Funktion SetResultText ihren Wert direkt im Testreport aus (Näheres dazu in der Referenz).