Rawplayback Modul
Beschreibung
Das "rawplayback" Modul ist nur für System- und Unittests zu verwenden. Der Einsatz in einer Produktiv-Umgebung ist nicht zulässig!
Das rawplayback-Modul spielt eine vorbereitete Folge von Rohtelegrammen zeitgesteuert ab.
Die Nachrichten werden aus einer externen Datei eingelesen und anschließend über die smartCORE
Fast Message Dispatcher-Architektur versendet.
Die Zeitstempel in der Eingabedatei werden relativ zum Start eines Zyklus interpretiert. Damit kann eine feste Telegrammfolge mit definierter zeitlicher Staffelung reproduzierbar abgespielt werden.
Typische Anwendungsfälle sind:
- Wiederholung aufgezeichneter Rohdatenfolgen zu Test- und Simulationszwecken
- deterministische Wiedergabe eines bekannten Nachrichtenstroms
- zyklisches Senden derselben Telegrammsequenz
Schnittstellen
- Dateien (
playbackFile) - smartCORE Fast Message Dispatcher
JSON-Konfiguration
Im folgenden Abschnitt werden Beispiele und Parameter des Moduls beschrieben.
Beispielkonfiguration (minimal)
{
"module": "rawplayback_instance",
"factory": "rawplayback",
"config": {
"playbackFile": "/opt/smartcore/data/rawplayback.txt"
}
}
Beispielkonfiguration (maximal)
{
"module": "rawplayback_instance",
"factory": "rawplayback",
"config": {
"playbackFile": "/opt/smartcore/data/rawplayback.txt",
"separator": ";",
"numCycles": 5,
"cycleOffset": 1000,
"exitOnEnd": true,
"exitDelay": 10
}
}
Parameterliste
Globale Parameter
| Parametername | Erforderlich | Datentyp | sinnvoller Wertebereich | Default | Beschreibung |
|---|---|---|---|---|---|
playbackFile | Ja | String | gültiger Dateipfad | - | Pfad zur Eingabedatei mit den abzuspielenden Nachrichten. Kann die Datei nicht geöffnet werden, startet das Modul nicht korrekt. |
separator | Nein | String | genau 1 Zeichen, nicht . | Tabulator | Trennzeichen zwischen den drei Spalten einer Zeile in der Eingabedatei. Bei leerem oder ungültigem Wert bleibt der Default erhalten. |
numCycles | Nein | Number | Ganzzahl >= 0 | 1 | Anzahl der vollständigen Wiedergabezyklen. 1 bedeutet einmaliges Abspielen. 0 führt effektiv zu keiner Wiedergabe. Ungültige Werte fallen auf 1 zurück. |
cycleOffset | Nein | Number | Ganzzahl >= 0 (ms) | 0 | Zusätzliche Wartezeit in Millisekunden zwischen zwei Zyklen. Ungültige Werte fallen auf 0 zurück. |
exitOnEnd | Nein | Bool | true / false | false | Wenn true, wird smartCORE nach Abschluss aller Zyklen beendet. |
exitDelay | Nein | Number | Ganzzahl >= 0 (s) | 0 | Zusätzliche Wartezeit in Sekunden vor dem optionalen Beenden von smartCORE. Wirksam nur bei exitOnEnd=true. Ungültige Werte fallen auf 0 zurück. |
Format der Playback-Datei
Jede nichtleere Zeile der Datei beschreibt genau eine Nachricht und muss aus drei Spalten bestehen:
- Zeitstempel
- Message-ID
- Nutzdaten
Das Spaltentrennzeichen ist standardmäßig ein Tabulator und kann über separator geändert werden.
Allgemeiner Aufbau
<timestamp><separator><message_id><separator><data>
Bedeutung der Spalten
| Spalte | Beschreibung |
|---|---|
| Zeitstempel | Relativer Zeitpunkt innerhalb eines Zyklus. Der Ganzzahlanteil wird als Sekunden, der Nachkommateil als Nanosekunden interpretiert. |
| Message-ID | Numerische Nachrichten-ID. Sie wird mit toUInt(..., 0) gelesen; damit sind dezimale und C/Qt-übliche Präfixe wie z. B. 0x... möglich. |
| Daten | Rohdaten der Nachricht. Unterstützt werden Hex, Binär oder Base64. |
Unterstützte Datenformate
Hexadezimal
Präfix: 0x
Beispiel:
0.000000000 100 0x11 22 33 44
Erlaubte Trennzeichen innerhalb der Daten sind Leerzeichen, Punkt (.) und Unterstrich (_).
Unvollständige Bytes werden nicht aufgefüllt, sondern als niederwertiger Teil eines Bytes übernommen.
Binär
Präfix: 0b
Beispiel:
0.050000000 100 0b00010001 00100010
Auch hier sind Leerzeichen, Punkt (.) und Unterstrich (_) innerhalb der Daten erlaubt.
Unvollständige Bytes werden ebenfalls nicht aufgefüllt.
Base64
Ohne Präfix 0x oder 0b wird das Feld als Base64 interpretiert.
Beispiel:
0.100000000 100 ESIzRA==
Einschränkungen und Hinweise
Konfiguration
separatordarf nur ein einzelnes Zeichen sein.separatordarf nicht identisch mit dem Dezimaltrennzeichen.sein, da sonst Zeitstempel nicht eindeutig geparst werden können.- Für
numCycles,cycleOffsetundexitDelaywerden nur nichtnegative Ganzzahlen sinnvoll verarbeitet. - Ist
playbackFilenicht lesbar oder nicht vorhanden, werden keine Nachrichten vorbereitet.
Eingabedatei
- Jede verwendete Zeile muss genau drei Spalten enthalten.
- Leere Zeilen werden ignoriert.
- Fehlerhafte Zeilen werden protokolliert und übersprungen.
- Der Zeitstempel ist relativ, nicht absolut. Er beschreibt also den Abstand zum Beginn des aktuellen Wiedergabezyklus.
- Nachkommastellen im Zeitstempel werden auf Nanosekunden normiert. Mehr als 9 Nachkommastellen werden abgeschnitten, weniger als 9 werden mit Nullen aufgefüllt.
- Für Hexdaten sind nur Zeichen aus
[0-9A-Fa-f]sowie._und Whitespace erlaubt. - Für Binärdaten sind nur
0,1,._und Whitespace erlaubt. - Base64-Daten werden ungeprüft über den Base64-Decoder verarbeitet; ungültige Inhalte führen je nach Decoder-Verhalten zu fehlerhaften oder leeren Daten.
Laufzeitverhalten
- Das Modul sendet alle vorbereiteten Nachrichten in der Reihenfolge der Datei.
- Eine explizite Sortierung der Zeitstempel findet im Modul nicht statt. Die Eingabedatei sollte daher bereits in der gewünschten zeitlichen Reihenfolge vorliegen.
- Zwischen zwei Zyklen kann optional eine Pause (
cycleOffset) eingefügt werden. - Ist
exitOnEnd=true, beendet das Modul nach dem letzten Zyklus optional mit zusätzlicher Verzögerung (exitDelay) die smartCORE-Anwendung.
Beispiel einer kompletten Playback-Datei
Beispiel mit Tabulator als Spaltentrenner:
0.000000000 256 0x11 22 33 44
0.050000000 257 0b10101010 00001111
0.100000000 258 ESIzRA==
Modul-Informationen
| Information | Wert |
|---|---|
| Autoren | optiMEAS GmbH |
| Modultyp | Producer |
| Abhängigkeiten | Fast Message Dispatcher, lesbare Eingabedatei |