¡Usa ts!

¡Usa ts!

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 socatcon la -vopció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 ttyS0a la velocidad en baudios dada, etc. Y cualquier entrada del puerto serie aparecerá en la salida estándar. En /tmp/logencontrará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 moreutilspaquete que incluye la tsherramienta. tsagrega 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, tsle permite controlar cómo se formatea la marca de tiempo. Por ejemplo, %.sle 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

información relacionada