Strukturierte Signale

Neben regulären Signalen, welche zu einem Zeitpunkt einen skalaren Wert oder eine bestimmte Datenstruktur, wie z.B. eine Kalibrierkurve haben, werden manche Signale als sogenannte strukturierte Signale eingelesen. Ein typisches Beispiel ist hierfür das Lesen von SOME/IP-Events aus einer PCAP-Datei. Ein Event ist eine Datenstruktur mit einer vielzahl von Attributen und kann auch verschachtelt sein. Oft ist es unpraktisch nur ein bestimmtes Attribut der Struktur einzulesen, daher ist es möglich das Event als Ganzes einzulesen - man erhält innerhalb der Traceanalyse Zugriff auf ein strukturiertes Signal.

Beispielstruktur eines SOME/IP Events bikeDetection
Event "bikeDetection"
 |-- status
 |-+ statistics
   |- timeRunning
   |- totalBikes
 |- numberOfBikes
 |-+ bikes [Liste von bis zu fünf Elementen vom Typ Bike]
   |- distance
   |- heading
   |- velocity

Im Folgenden werden die Grundlagen zu strukturierten Signalen erläutert. Dabei soll SigBikeDetection das eingelesene strukturierte Signal sein. Für weitere Informationen kann die API-Dokumentation für StructuredSignals herangezogen werden.

Attributzugriff

Attribute können weitere strukturierte Signale sein oder einfache Wertesignale (Blattknoten). Möchte man auf Attribute zugreifen, ist dies in Ausdrücken von Berechnungsschritt, Triggerblock und innerhalb von Traceschrittvorlagen über einfache Punktnotation möglich: SigBikeDetection.numberOfBikes. Soll ein Triggerblock Bereiche freischneiden, wo mindestens ein Bike gefunden wird, so kann man als Starttrigger SigBikeDetection.numberOfBikes > 0 angeben.

Indizierung

Strukturierte Signale können als Attribute auch Listen von Skalaren oder Strukturen enthalten. Um auf bestimmte Elemente der Liste zuzugreifen, ist daher eine umfangreiche Indizierung möglich.

Zugriff auf das erste Bike im Attribut bikes ist folgendermaßen möglich: SigBikeDetection.bikes[0]. Unter der Annahme, dass jedes Bike ein Attribut mit einer Liste von Persons hätte, könnte man auch explizit auf die erste Person zugreifen: SigBikeDetection.bikes[0].persons[0]

Als experimentelles Feature ist auch das komplexe Indizieren z.B. mit anderen Signalen möglich (siehe auch Maskierung).

Maskierte Werte

Eine wesentliche Besonderheit von strukturierten Signalen ist, dass Werte von Blattknoten maskiert sein können. Nimmt man an, dass bikes eine dynamische Liste mit einer wechselnden Anzahl an Bikes ist, so ist es kritisch, wenn man immer in einer Berechnung auf die Entfernung des fünften Bikes via SigBikeDetection.bikes[4].distance zugreift. Sind zu einem Zeitpunkt weniger als 5 Elemente in der Liste bikes, so wird der Zugriff zu einem maskierten Wert führen und damit signalisieren, dass der aktuelle Wert ungültig ist.

Maskierte Werte führen zu einem speziellen Verhalten bei Vergleichen und anderen Operationen. SigBikeDetection.bikes[4].distance <= 5.0 führt an jenen Stellen, wo distance maskiert ist auch zu einem maskierten Wert. Ein Berechnungsschritt wird zu einem Zeitpunkt mit maskierten Wert als Ergebnis des Ausdrucks dokumentieren, dass er seine Bewertung nicht prüfen konnte. In Hinblick auf die Bewertung verhalten sich maskierte Werte somit genau so, als ob es zu diesem Zeitpunkt gar keinen Wert gab.