Используйте ТС!

Используйте ТС!

Я использую cutecom для последовательного порта, так как у него есть временная метка, потому что мне нужно ссылаться на два разных данных. Но я не могу регистрировать эти данные с временной меткой и мне нужна точность в мс. Есть ли какие-нибудь предложения?

Спасибо, Селим.

решение1

Если вам не нужен эмулятор терминала, вы можете использовать socatопцию -v, которая регистрирует все операции ввода-вывода с отметкой времени. Например,

socat -v READLINE /dev/ttyS0,b19200,raw,echo=0 2>/tmp/log

Все, что вы введете на stdin этой команды, будет отправлено на последовательный порт ttyS0с заданной скоростью и т. д. И любой ввод с последовательного порта появится на stdout. В /tmp/logвы найдете строки типа

> 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

что соответствует вводу «привет\n» и получению обратно «моего ответа».

решение2

Используйте ТС!

В любой системе Unix и в подсистеме Windows для Linux (также известной как WSL) вы можете установить пакет, moreutilsвключающий этот tsинструмент. tsдобавляет временные метки к текстовым данным, которые подаются на стандартный ввод.

Монтажнапример, в Ubuntu:

$ sudo apt-get install moreutils

Применение

Предположим, что ваш последовательный порт, например, ttyS70, вы можете запустить эту командную строку, чтобы

  • читать последовательные данные с этого порта (используя cat),
  • добавить временную метку (используя ts), и
  • распечатайте полученную строку и одновременно сохраните ее в файл (используя tee):
$ cat /dev/ttyS70 | ts | tee logfile

Для моего типа последовательных данных результат выглядит так:

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

В этом примере последовательный порт получает более одной строки в секунду. Поскольку разрешение временной метки составляет секунды, несколько строк имеют одну и ту же временную метку. Чтобы добавить временную метку с более высоким разрешением, tsпозволяет управлять форматированием временной метки. Например, %.sвы получите секунды с 1970 года с субсекундным разрешением:

$ cat /dev/ttyS70 | ts %.s | tee logfile

результаты в

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

Если вам не нужны данные абсолютного времени, используйте переключатель -s. Это даст вам время, прошедшее с момента запуска программы:

$ cat /dev/ttyS70 | ts -s %.s | tee logfile

результаты в

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

Связанный контент