Я использую 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