Estoy usando cutecom para el puerto serie ya que tiene una marca de tiempo porque necesito hacer referencia a dos datos diferentes. Pero no puedo registrar estos datos con marca de tiempo y necesito más precisión. ¿Hay alguna sugerencia?
Gracias Selim.
Respuesta1
Si no necesita un emulador de terminal, puede usarlo socat
con la -v
opción que registra todas las E/S con una marca de tiempo. Por ejemplo,
socat -v READLINE /dev/ttyS0,b19200,raw,echo=0 2>/tmp/log
Todo lo que escriba en la entrada estándar de este comando se enviará al puerto serie ttyS0
a la velocidad en baudios dada, etc. Y cualquier entrada del puerto serie aparecerá en la salida estándar. En /tmp/log
encontrarás líneas como
> 2019/11/06 13:56:27.996129 length=6 from=0 to=5
hello
< 2019/11/06 13:56:37.024451 length=8 from=0 to=7
my reply
lo que corresponde a escribir "hola\n" y recibir "mi respuesta".
Respuesta2
¡Usa ts!
En cualquier Unix y en el Subsistema de Windows para Linux (también conocido como WSL), puede instalar el moreutils
paquete que incluye la ts
herramienta. ts
agrega marcas de tiempo a los datos de texto que se envían a su entrada estándar.
Instalaciónen, por ejemplo, Ubuntu:
$ sudo apt-get install moreutils
Uso
Suponiendo que su puerto serie sea, por ejemplo, ttyS70
, puede ejecutar esta línea de comando para
- leer datos seriales desde este puerto (usando
cat
), - agregar una marca de tiempo (usando
ts
) y - Imprima la línea resultante y al mismo tiempo guárdela en un archivo (usando
tee
):
$ cat /dev/ttyS70 | ts | tee logfile
Para mi tipo de datos en serie, el resultado se ve así:
Feb 14 18:37:03 13438 1 0 0.0 19 -80.00 0.00 1
Feb 14 18:37:03 13440 1 0 0.0 19 -80.00 0.00 1
Feb 14 18:37:04 13441 1 0 0.0 19 -80.00 0.00 1
Feb 14 18:37:04 13442 1 0 0.0 19 -80.00 0.00 1
Feb 14 18:37:04 13444 1 0 0.0 19 -80.00 0.00 1
En este ejemplo, el puerto serie recibe más de una línea por segundo. Como la resolución de la marca de tiempo es de segundos, varias líneas llevan la misma marca de tiempo. Para agregar una marca de tiempo con mayor resolución, ts
le permite controlar cómo se formatea la marca de tiempo. Por ejemplo, %.s
le dará segundos desde 1970 en resolución inferior a segundos:
$ cat /dev/ttyS70 | ts %.s | tee logfile
resultados en
1676396776.277146 18963 1 0 0.0 19 -80.00 0.00 1
1676396776.405363 18964 1 0 0.0 19 -80.00 0.00 1
1676396776.532999 18966 1 0 0.0 19 -80.00 0.00 1
1676396776.660920 18967 1 0 0.0 19 -80.00 0.00 1
1676396776.789261 18968 1 0 0.0 19 -80.00 0.00 1
1676396776.917136 18969 1 0 0.0 19 -80.00 0.00 1
Si no necesita datos de tiempo absoluto, use el interruptor -s
. Esto le dará el tiempo transcurrido desde el inicio del programa:
$ cat /dev/ttyS70 | ts -s %.s | tee logfile
resultados en
0.072230 6459 42 0 0.0 20567 -100.00 0.00 1
0.199964 6459 42 0 0.0 20567 -100.00 0.00 1
0.311792 6460 42 0 0.0 20568 -100.00 0.00 1
0.439221 6460 42 0 0.0 20566 -100.00 0.00 1
0.567191 6460 42 0 0.0 20566 -100.00 0.00 1
0.694773 6460 42 0 0.0 20566 -100.00 0.00 1
0.822279 6461 42 0 0.0 20567 -100.00 0.00 1
0.950085 6461 42 0 0.0 20566 -100.00 0.00 1
1.061797 6461 42 0 0.0 20567 -100.00 0.00 1
1.189510 6461 42 0 0.0 20568 -100.00 0.00 1