Modulo Rawplayback
Descrizione
Il modulo "rawplayback" deve essere utilizzato esclusivamente per test di sistema e unit test. L'impiego in un ambiente di produzione non è consentito!
Il modulo rawplayback riproduce con temporizzazione una sequenza preparata di telegrammi grezzi.
I messaggi vengono letti da un file esterno e successivamente inviati tramite l'architettura
Fast Message Dispatcher di smartCORE.
I timestamp nel file di ingresso vengono interpretati relativamente all'inizio di un ciclo. In questo modo è possibile riprodurre in modo riproducibile una sequenza fissa di telegrammi con una scansione temporale definita.
I casi d'uso tipici sono:
- ripetizione di sequenze di dati grezzi registrate a scopo di test e simulazione
- riproduzione deterministica di un flusso di messaggi noto
- invio ciclico della stessa sequenza di telegrammi
Interfacce
- File (
playbackFile) - smartCORE Fast Message Dispatcher
Configurazione JSON
La sezione seguente descrive esempi e parametri del modulo.
Configurazione di esempio (minima)
{
"module": "rawplayback_instance",
"factory": "rawplayback",
"config": {
"playbackFile": "/opt/smartcore/data/rawplayback.txt"
}
}
Configurazione di esempio (massima)
{
"module": "rawplayback_instance",
"factory": "rawplayback",
"config": {
"playbackFile": "/opt/smartcore/data/rawplayback.txt",
"separator": ";",
"numCycles": 5,
"cycleOffset": 1000,
"exitOnEnd": true,
"exitDelay": 10
}
}
Elenco dei parametri
Parametri globali
| Nome del parametro | Obbligatorio | Tipo di dati | Intervallo di valori consigliato | Default | Descrizione |
|---|---|---|---|---|---|
playbackFile | Sì | String | percorso di file valido | - | Percorso del file di ingresso con i messaggi da riprodurre. Se il file non può essere aperto, il modulo non si avvia correttamente. |
separator | No | String | esattamente 1 carattere, non . | Tabulatore | Separatore tra le tre colonne di una riga del file di ingresso. Se il valore è vuoto o non valido, resta il valore di default. |
numCycles | No | Number | numero intero >= 0 | 1 | Numero di cicli di riproduzione completi. 1 significa una sola riproduzione. 0 comporta di fatto nessuna riproduzione. I valori non validi ripiegano su 1. |
cycleOffset | No | Number | numero intero >= 0 (ms) | 0 | Tempo di attesa aggiuntivo in millisecondi tra due cicli. I valori non validi ripiegano su 0. |
exitOnEnd | No | Bool | true / false | false | Se true, smartCORE viene terminato al termine di tutti i cicli. |
exitDelay | No | Number | numero intero >= 0 (s) | 0 | Tempo di attesa aggiuntivo in secondi prima dell'eventuale terminazione di smartCORE. Efficace solo con exitOnEnd=true. I valori non validi ripiegano su 0. |
Formato del file di playback
Ogni riga non vuota del file descrive esattamente un messaggio e deve essere composta da tre colonne:
- Timestamp
- Message-ID
- Dati utili
Il separatore di colonna predefinito è un tabulatore e può essere modificato tramite separator.
Struttura generale
<timestamp><separator><message_id><separator><data>
Significato delle colonne
| Colonna | Descrizione |
|---|---|
| Timestamp | Istante relativo all'interno di un ciclo. La parte intera viene interpretata come secondi, la parte decimale come nanosecondi. |
| Message-ID | ID numerico del messaggio. Viene letto con toUInt(..., 0); sono quindi possibili il formato decimale e i prefissi usuali in C/Qt, ad es. 0x.... |
| Dati | Dati grezzi del messaggio. Sono supportati esadecimale, binario o Base64. |
Formati di dati supportati
Esadecimale
Prefisso: 0x
Esempio:
0.000000000 100 0x11 22 33 44
I separatori ammessi all'interno dei dati sono lo spazio, il punto (.) e il trattino basso (_).
I byte incompleti non vengono completati, ma acquisiti come parte meno significativa di un byte.
Binario
Prefisso: 0b
Esempio:
0.050000000 100 0b00010001 00100010
Anche qui all'interno dei dati sono ammessi lo spazio, il punto (.) e il trattino basso (_).
Anche in questo caso i byte incompleti non vengono completati.
Base64
Senza il prefisso 0x o 0b il campo viene interpretato come Base64.
Esempio:
0.100000000 100 ESIzRA==
Limitazioni e note
Configurazione
separatorpuò essere soltanto un singolo carattere.separatornon deve coincidere con il separatore decimale., poiché altrimenti i timestamp non possono essere analizzati in modo univoco.- Per
numCycles,cycleOffseteexitDelayvengono elaborati in modo sensato solo numeri interi non negativi. - Se
playbackFilenon è leggibile o non esiste, non viene preparato alcun messaggio.
File di ingresso
- Ogni riga utilizzata deve contenere esattamente tre colonne.
- Le righe vuote vengono ignorate.
- Le righe errate vengono registrate nel log e saltate.
- Il timestamp è relativo, non assoluto. Descrive quindi la distanza dall'inizio del ciclo di riproduzione corrente.
- Le cifre decimali del timestamp vengono normalizzate a nanosecondi. Più di 9 cifre decimali vengono troncate, meno di 9 vengono completate con zeri.
- Per i dati esadecimali sono ammessi solo i caratteri
[0-9A-Fa-f]nonché._e spazi bianchi. - Per i dati binari sono ammessi solo
0,1,._e spazi bianchi. - I dati Base64 vengono elaborati dal decoder Base64 senza verifica; contenuti non validi portano, a seconda del comportamento del decoder, a dati errati o vuoti.
Comportamento in esecuzione
- Il modulo invia tutti i messaggi preparati nell'ordine del file.
- Nel modulo non avviene alcun ordinamento esplicito dei timestamp. Il file di ingresso dovrebbe quindi essere già nell'ordine temporale desiderato.
- Tra due cicli può essere inserita facoltativamente una pausa (
cycleOffset). - Con
exitOnEnd=true, dopo l'ultimo ciclo il modulo termina l'applicazione smartCORE, facoltativamente con un ritardo aggiuntivo (exitDelay).
Esempio di un file di playback completo
Esempio con il tabulatore come separatore di colonna:
0.000000000 256 0x11 22 33 44
0.050000000 257 0b10101010 00001111
0.100000000 258 ESIzRA==
Informazioni sul modulo
| Informazione | Valore |
|---|---|
| Autori | optiMEAS GmbH |
| Tipo di modulo | Producer |
| Dipendenze | Fast Message Dispatcher, file di ingresso leggibile |