Módulo Rawplayback
Descripción
El módulo "rawplayback" debe utilizarse únicamente para pruebas de sistema y pruebas unitarias. ¡No se permite su uso en un entorno de producción!
El módulo rawplayback reproduce con control temporal una secuencia preparada de telegramas sin procesar.
Los mensajes se leen de un archivo externo y a continuación se envían mediante la arquitectura
Fast Message Dispatcher de smartCORE.
Las marcas de tiempo del archivo de entrada se interpretan en relación con el inicio de un ciclo. De este modo, una secuencia fija de telegramas con un escalonamiento temporal definido puede reproducirse de forma reproducible.
Los casos de uso habituales son:
- Repetición de secuencias de datos sin procesar grabadas con fines de prueba y simulación
- Reproducción determinista de un flujo de mensajes conocido
- Envío cíclico de la misma secuencia de telegramas
Interfaces
- Archivos (
playbackFile) - smartCORE Fast Message Dispatcher
Configuración JSON
En la sección siguiente se describen ejemplos y parámetros del módulo.
Configuración de ejemplo (mínima)
{
"module": "rawplayback_instance",
"factory": "rawplayback",
"config": {
"playbackFile": "/opt/smartcore/data/rawplayback.txt"
}
}
Configuración de ejemplo (máxima)
{
"module": "rawplayback_instance",
"factory": "rawplayback",
"config": {
"playbackFile": "/opt/smartcore/data/rawplayback.txt",
"separator": ";",
"numCycles": 5,
"cycleOffset": 1000,
"exitOnEnd": true,
"exitDelay": 10
}
}
Lista de parámetros
Parámetros globales
| Nombre del parámetro | Obligatorio | Tipo de datos | Rango de valores razonable | Valor por defecto | Descripción |
|---|---|---|---|---|---|
playbackFile | Sí | String | ruta de archivo válida | - | Ruta del archivo de entrada con los mensajes que se van a reproducir. Si no se puede abrir el archivo, el módulo no se inicia correctamente. |
separator | No | String | exactamente 1 carácter, no . | Tabulador | Separador entre las tres columnas de una línea del archivo de entrada. Si el valor está vacío o no es válido, se mantiene el valor por defecto. |
numCycles | No | Number | entero >= 0 | 1 | Número de ciclos de reproducción completos. 1 significa una única reproducción. 0 supone, en la práctica, que no se reproduce nada. Los valores no válidos vuelven a 1. |
cycleOffset | No | Number | entero >= 0 (ms) | 0 | Tiempo de espera adicional en milisegundos entre dos ciclos. Los valores no válidos vuelven a 0. |
exitOnEnd | No | Bool | true / false | false | Si es true, smartCORE se cierra tras finalizar todos los ciclos. |
exitDelay | No | Number | entero >= 0 (s) | 0 | Tiempo de espera adicional en segundos antes del cierre opcional de smartCORE. Solo es efectivo con exitOnEnd=true. Los valores no válidos vuelven a 0. |
Formato del archivo de reproducción
Cada línea no vacía del archivo describe exactamente un mensaje y debe constar de tres columnas:
- Marca de tiempo
- ID de mensaje
- Datos útiles
El separador de columnas es por defecto un tabulador y puede modificarse mediante separator.
Estructura general
<timestamp><separator><message_id><separator><data>
Significado de las columnas
| Columna | Descripción |
|---|---|
| Marca de tiempo | Instante relativo dentro de un ciclo. La parte entera se interpreta como segundos y la parte decimal como nanosegundos. |
| ID de mensaje | ID numérico del mensaje. Se lee con toUInt(..., 0); por tanto, son posibles tanto decimales como los prefijos habituales de C/Qt, p. ej. 0x.... |
| Datos | Datos sin procesar del mensaje. Se admiten hexadecimal, binario o Base64. |
Formatos de datos admitidos
Hexadecimal
Prefijo: 0x
Ejemplo:
0.000000000 100 0x11 22 33 44
Los separadores permitidos dentro de los datos son el espacio, el punto (.) y el guion bajo (_).
Los bytes incompletos no se rellenan, sino que se toman como la parte de menor peso de un byte.
Binario
Prefijo: 0b
Ejemplo:
0.050000000 100 0b00010001 00100010
Aquí también se permiten espacios, punto (.) y guion bajo (_) dentro de los datos.
Los bytes incompletos tampoco se rellenan.
Base64
Sin el prefijo 0x ni 0b, el campo se interpreta como Base64.
Ejemplo:
0.100000000 100 ESIzRA==
Limitaciones y notas
Configuración
separatorsolo puede ser un único carácter.separatorno puede ser idéntico al separador decimal., ya que de lo contrario las marcas de tiempo no se pueden analizar de forma inequívoca.- Para
numCycles,cycleOffsetyexitDelaysolo se procesan de forma razonable enteros no negativos. - Si
playbackFileno es legible o no existe, no se prepara ningún mensaje.
Archivo de entrada
- Cada línea utilizada debe contener exactamente tres columnas.
- Las líneas vacías se ignoran.
- Las líneas erróneas se registran y se omiten.
- La marca de tiempo es relativa, no absoluta. Es decir, describe la distancia al inicio del ciclo de reproducción actual.
- Los decimales de la marca de tiempo se normalizan a nanosegundos. Los decimales que superen 9 se truncan; si hay menos de 9, se rellenan con ceros.
- Para los datos hexadecimales solo se permiten caracteres de
[0-9A-Fa-f], así como._y espacios en blanco. - Para los datos binarios solo se permiten
0,1,._y espacios en blanco. - Los datos Base64 se procesan con el decodificador Base64 sin comprobarlos; los contenidos no válidos dan lugar, según el comportamiento del decodificador, a datos erróneos o vacíos.
Comportamiento en tiempo de ejecución
- El módulo envía todos los mensajes preparados en el orden del archivo.
- El módulo no realiza una ordenación explícita de las marcas de tiempo. Por ello, el archivo de entrada debería estar ya en el orden temporal deseado.
- Entre dos ciclos puede insertarse opcionalmente una pausa (
cycleOffset). - Con
exitOnEnd=true, el módulo cierra la aplicación smartCORE tras el último ciclo, opcionalmente con un retardo adicional (exitDelay).
Ejemplo de un archivo de reproducción completo
Ejemplo con tabulador como separador de columnas:
0.000000000 256 0x11 22 33 44
0.050000000 257 0b10101010 00001111
0.100000000 258 ESIzRA==
Información del módulo
| Información | Valor |
|---|---|
| Autores | optiMEAS GmbH |
| Tipo de módulo | Producer |
| Dependencias | Fast Message Dispatcher, archivo de entrada legible |