Passa al contenuto principale

Modulo Rawplayback

Descrizione​

warning

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 parametroObbligatorioTipo di datiIntervallo di valori consigliatoDefaultDescrizione
playbackFileSìStringpercorso 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.
separatorNoStringesattamente 1 carattere, non .TabulatoreSeparatore tra le tre colonne di una riga del file di ingresso. Se il valore è vuoto o non valido, resta il valore di default.
numCyclesNoNumbernumero intero >= 01Numero di cicli di riproduzione completi. 1 significa una sola riproduzione. 0 comporta di fatto nessuna riproduzione. I valori non validi ripiegano su 1.
cycleOffsetNoNumbernumero intero >= 0 (ms)0Tempo di attesa aggiuntivo in millisecondi tra due cicli. I valori non validi ripiegano su 0.
exitOnEndNoBooltrue / falsefalseSe true, smartCORE viene terminato al termine di tutti i cicli.
exitDelayNoNumbernumero intero >= 0 (s)0Tempo 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:

  1. Timestamp
  2. Message-ID
  3. 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​

ColonnaDescrizione
TimestampIstante relativo all'interno di un ciclo. La parte intera viene interpretata come secondi, la parte decimale come nanosecondi.
Message-IDID numerico del messaggio. Viene letto con toUInt(..., 0); sono quindi possibili il formato decimale e i prefissi usuali in C/Qt, ad es. 0x....
DatiDati 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​

  • separator può essere soltanto un singolo carattere.
  • separator non deve coincidere con il separatore decimale ., poiché altrimenti i timestamp non possono essere analizzati in modo univoco.
  • Per numCycles, cycleOffset e exitDelay vengono elaborati in modo sensato solo numeri interi non negativi.
  • Se playbackFile non è 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​

InformazioneValore
AutorioptiMEAS GmbH
Tipo di moduloProducer
DipendenzeFast Message Dispatcher, file di ingresso leggibile