Estou usando o cutecom para porta serial, pois tem um carimbo de data / hora porque preciso fazer referência a dois dados diferentes. Mas não consigo registrar esses dados com carimbo de data e hora e preciso de ms precisão. Existe alguma sugestão?
Obrigado, Selim.
Responder1
Se você não precisa de um emulador de terminal, você pode usar socat
a -v
opção que registra todas as E/S com um carimbo de data/hora. Por exemplo,
socat -v READLINE /dev/ttyS0,b19200,raw,echo=0 2>/tmp/log
Tudo o que você digitar no stdin deste comando será enviado para a porta serial ttyS0
na taxa de transmissão especificada, etc. E qualquer entrada da porta serial aparecerá no stdout. Em /tmp/log
você encontrará linhas 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
que corresponde a digitar "olá\n" e receber "minha resposta" de volta.
Responder2
Use ts!
Em qualquer Unix e no subsistema Windows para Linux (também conhecido como WSL), você pode instalar o moreutils
pacote que inclui a ts
ferramenta. ts
adiciona carimbos de data/hora aos dados de texto que são alimentados em sua entrada padrão.
Instalaçãoem, por exemplo, Ubuntu:
$ sudo apt-get install moreutils
Uso
Supondo que sua porta serial seja, por exemplo, ttyS70
, você pode executar esta linha de comando para
- leia dados seriais desta porta (usando
cat
), - adicione um carimbo de data/hora (usando
ts
) e - imprima a linha resultante e ao mesmo tempo salve-a em um arquivo (usando
tee
):
$ cat /dev/ttyS70 | ts | tee logfile
Para o meu tipo de dados seriais, o resultado é assim:
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
Neste exemplo, a porta serial recebe mais de uma linha por segundo. Como a resolução do carimbo de data/hora é de segundos, várias linhas possuem o mesmo carimbo de data/hora. Adicionar um carimbo de data/hora com resolução mais alta ts
permite controlar como o carimbo de data/hora é formatado. Por exemplo, %.s
você terá segundos desde 1970 em resolução inferior a um segundo:
$ cat /dev/ttyS70 | ts %.s | tee logfile
resulta em
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
Se você não precisar de dados de tempo absoluto, use a opção -s
. Isso lhe dará o tempo decorrido desde o início do programa:
$ cat /dev/ttyS70 | ts -s %.s | tee logfile
resulta em
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