Erstellen einer eigenen ereignisbasierten Python-Traceschrittvorlage

Nach Auswahl des zu analysierenden Signals „CarSpeed“ müssen wir nun die Analyse definieren. Dies geschieht mithilfe einer Traceschrittvorlage, mit der wir (zunächst unabhängig von der konkreten Aufzeichnung bzw. vom konkreten Signal) die Analysevorschrift allgemein spezifizieren.

Wir erstellen also im Reiter Traceschrittvorlagen unter Eigene Vorlagen mithilfe des dortigen Icons mit Python ereignisbasiert eine neue (in unserem Beispiel ereignisbasierte) Traceschrittvorlage (siehe Abbildung Erstellen einer neuen ereignisbasierten Python-Traceschrittvorlage). (Im Handbuch werden im Abschnitt Allgemeines Vorgehen die verschiedenen Arten von Traceschrittvorlagen und ihre Erstellung erläutert.)

../../_images/Tutorial_CreateNewTraceStepTemplate.png

Erstellen einer neuen ereignisbasierten Python-Traceschrittvorlage

Im erscheinenden Dialog Traceschrittvorlage bearbeiten (vgl. Abbildung Die Traceschrittvorlage „UpperBound“) vergeben wir unter Allgemein im Hinblick auf das Analysevorhaben den Namen (genauer: die ID) „UpperBound“, unter dem wir die Traceschrittvorlage zukünftig verwenden können (1), sowie (optional) eine Beschreibung.

../../_images/Tutorial_TraceStepTemplate_UpperBound.png

Die Traceschrittvorlage „UpperBound“

Durch Klicken auf die Schaltfläche (2) legen wir ein (eingehendes) Signal an, dessen Namen wir gleich bei der Erstellung der Analysevorschrift verwenden werden. Da wir hier nur ein Signal benötigen, benennen wir es nach Doppelklick auf den automatisch erzeugten Namen „Signal_0“ aus ästhetischen Gründen in „Signal“ um. (Diesem allgemeinen Signal wird später unser konkretes Signal „CarSpeed“ zugewiesen).

Für die obere Schranke, bezüglich der wir das Signal „CarSpeed“ untersuchen wollen, legen wir analog durch Klicken auf die Schaltfläche (3) einen Parameter (vom Typ „Float“ und Richtung „IN“) an. Diesen versehen wir auch gleich mit dem aussagekräftigeren Namen „Threshold“ (statt „Parameter_0“). Danach legen wir einen zweiten Parameter „MaxValue“ an (ebenfalls vom Typ „Float“), dem wir als Richtung „OUT“ zuweisen. Dieser Parameter wird beim Ausführen der Traceschrittvorlage die maximal erreichte Geschwindigkeit ausgeben.

Durch Klicken auf die Schaltfläche (4) wird eine neue Funktion „Next“ generiert, die für jeden Messwert des eingehenden Signals ausgeführt wird. Im sich öffnenden Fenster können wir nun unseren Analysecode eingeben und anschließend mit OK speichern.

Die Next-Funktion mit Analysecode
#Funktionskopf generiert, nicht editieren!
def Next(event, hold, dataContainer, parameters, report):
    value = event.GetValue('Signal')
    threshold = parameters['Threshold']

    if parameters['MaxValue'] is None or value > parameters['MaxValue']:
        parameters['MaxValue'] = value

    if value > threshold:
        report.SetResultFailed()
        report.Spot(event.GetTime(), 'Threshold überschritten ({})'.format(value), report.RESULT_ID_FAILED)

Die fertige Traceschrittvorlage sollte so aussehen wie in der obigen Abbildung Die Traceschrittvorlage „UpperBound“.

Durch Bestätigen mit Speichern schließen wir die Bearbeitung der Traceschrittvorlage ab und sehen in der Exploreransicht im Reiter Traceschrittvorlagen, dass unsere Traceschrittvorlage „UpperBound“ dort nun mit aufgelistet ist (siehe Abbildung Die Traceschrittvorlage „UpperBound“ in der Exploreransicht).

../../_images/Tutorial_NewTraceStepTemplateInList.png

Die Traceschrittvorlage „UpperBound“ in der Exploreransicht

Bevor wir unsere fertige Traceschrittvorlage „UpperBound“ in unsere Traceanalyse einfügen, erstellen wir eine Packagevariable mit dem Namen „MaximumSpeed“. Den von uns in der Vorlage „UpperBound“ erstellten ausgehenden Parameter „MaxValue“ werden wir beim Parametrieren der Traceschrittvorlage so konfigurieren, dass er die maximale erreichte Geschwindigkeit in die Packagevariable „MaximumSpeed“ speichert. Zum Erstellen einer neuen Packagevariable reicht ein Klick mit der rechten Maustaste in den Bereich Variablen.

../../_images/Tutorial_CreateNewPackageVariable.png

Erstellen einer neuen Packagevariable

Kein Schreiben UND Lesen von Packagevariablen innerhalb einer Episode

Bei Packagevariablen ist zu beachten, dass auf diese in einer Episode, in welcher sie geschrieben werden, nicht lesend zugegriffen werden kann. Das Auslesen ist erst in der nächsten Episode möglich.

Im sich öffnenden Kontextmenü wählen wir Neue Variable und Numeric. Bei den Variableneigenschaften ändern wir den Namen zu „MaximumSpeed“ und bestätigen mit einem Klick auf OK. Anschließend setzen wir einen Haken in der Spalte Rückgabewert.

../../_images/Tutorial_PackageVariable.png

Die erstellte Packagevariable „MaximumSpeed“

Nun müssen wir unsere fertige Traceschrittvorlage „UpperBound“ nur noch in unsere Traceanalyse einfügen. Wir ziehen den Eintrag in der Exploreransicht (im Reiter Traceschrittvorlagen) per Drag-and-drop in den leeren Bereich unter Episoden und Traceschritte, um sie in unserer Traceanalyse zu verwenden (siehe Abbildung Einbinden der Traceschrittvorlage „UpperBound“).

../../_images/Tutorial_DropTraceStepTemplateInTraceanalysis.png

Einbinden der Traceschrittvorlage „UpperBound“

Im erscheinenden Dialog Traceschrittkonfiguration weisen wir dem Signal „Signal“ der Traceschrittvorlage das generische Signal „Signal0“ zu, an welches bereits das konkrete Signal „CarSpeed“ gebunden wurde. Dem Parameter „Threshold“ weisen wir den Wert „75“ zu. Um den Parameter „MaxValue“ mit unserer Packagevariable zu verbinden, klicken wir in das Feld Wert und drücken anschließend einmal die Pfeiltaste nach unten auf der Tastatur. Aus der Vorschlagsliste wählen wir unsere Packagevariable mit dem Namen „MaximumSpeed“.

Die fertige parametrierte Traceschrittvorlage sollte wie folgt aussehen:

../../_images/Tutorial_TraceStepTemplate_UpperBound_Parameterized.png

Die parametrierte Traceschrittvorlage „UpperBound“

Nun fügen wir noch einen Plot hinzu, um den Verlauf des Signals grafisch darzustellen. Dazu klicken wir unter Episoden und Traceschritte auf das Symbol Plot_Symbol („Neuer Plot“).

../../_images/Tutorial_NewPlot.png

Anlegen eines neuen Plots

Im sich öffnenden Optionsdialog können wir alle Einstellungen so belassen und mit OK bestätigen.

Unter Episoden und Traceschritte erkennen wir nun den einfachen Ablauf unserer Traceanalyse (siehe Abbildung Die Struktur unserer „Traceanalyse 1“): Als einziger Traceschritt befindet sich „UpperBound“ hier in der (automatisch angelegten) Episode (mit Namen „Neue Episode“) und verarbeitet als einziges generisches Signal das eingehende Signal „Signal0“ (welchem das konkrete Signal „CarSpeed“ zugewiesen ist). An unsere Traceschrittvorlage ist unser erstellter Plot angeknüpft.

../../_images/Tutorial_ReadyForAnalysis.png

Die Struktur unserer „Traceanalyse 1“

Nach Ausführen der Traceanalyse (siehe voriger Abschnitt) präsentiert sich uns im Reiter Testreport das Ergebnis. Unser Traceschritt „UpperBound“ liefert das Ergebnis FAILED, d.h. an mindestens einer Stelle wurde die angegebene Obergrenze von 75 km/h überschritten. Mit einem Doppelklick auf die entsprechende Zeile können wir die Details zum Traceschritt aufklappen und sehen, dass die Geschwindigkeit bei drei Abtastwerten übertreten wurde:

../../_images/Tutorial_Testreport.png

Anzeige der Testergebnisse

In Abschnitt (1) werden alle Zeitstempel aufgelistet, bei denen die Geschwindigkeit größer ist als der definierte Schwellwert.

In Abschnitt (2) sehen wir die maximal erreichte Geschwindigkeit (75,5 km/h)

In Abschnitt (3) sehen wir den Plot des Signals „CarSpeed“ und können noch einmal verifizieren, dass es nur eine Stelle gibt an der die Geschwindigkeit über 75 km/h ist.

Mitgelieferte Traceschrittvorlagen

Das Erstellen eigener Traceschrittvorlagen stellt einen wesentlichen Punkt der Traceanalyse mit ecu.test dar. Eine Schritt-für-Schritt-Anleitung zum Erstellen einer Traceschrittvorlage befindet sich im separaten Abschnitt Erstellen von Traceschrittvorlagen. Bei der Erstellung eigener Traceschrittvorlagen können die mitgelieferten Vorlagen gern als Inspiration dienen. Dazu können diese in der Exploreransicht von ecu.test beliebig kopiert und umbenannt werden (mittels Drag-and-drop oder Kontextmenü, siehe Standardvorlagen anpassen am Beispiel CalculateMinMax).