Ich verwende Cutecom für den seriellen Anschluss, da es einen Zeitstempel hat, da ich auf zwei verschiedene Daten verweisen muss. Aber ich kann diese Daten nicht mit Zeitstempel protokollieren und brauche eine Genauigkeit in Millisekunden. Gibt es einen Vorschlag?
Danke, Selim.
Antwort1
Wenn Sie keinen Terminalemulator benötigen, können Sie socat
die -v
Option verwenden, die alle Ein-/Ausgaben mit einem Zeitstempel protokolliert. Beispiel:
socat -v READLINE /dev/ttyS0,b19200,raw,echo=0 2>/tmp/log
Was auch immer Sie auf dem Standardeingang dieses Befehls eingeben, wird ttyS0
mit der angegebenen Baudrate usw. an den seriellen Port gesendet. Und jede Eingabe vom seriellen Port erscheint auf Standardausgang. Darin /tmp/log
finden Sie Zeilen wie
> 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
Das entspricht dem Eintippen von „hallo\n“ und der Rückmeldung „meine Antwort“.
Antwort2
Benutze ts!
Unter jedem Unix und im Windows-Subsystem für Linux (auch bekannt als WSL) können Sie das moreutils
Paket installieren, das das ts
Tool enthält. ts
Fügt Textdaten, die in die Standardeingabe eingespeist werden, Zeitstempel hinzu.
Installationauf zB Ubuntu:
$ sudo apt-get install moreutils
Verwendung
Vorausgesetzt, Ihr serieller Port ist beispielsweise ttyS70
, können Sie diese Befehlszeile ausführen, um
- Serielle Daten von diesem Port lesen (mit
cat
), - Fügen Sie einen Zeitstempel hinzu (mit
ts
) und - Drucken Sie die resultierende Zeile aus und speichern Sie sie gleichzeitig in einer Datei (mit
tee
):
$ cat /dev/ttyS70 | ts | tee logfile
Für meine Art von seriellen Daten sieht das Ergebnis folgendermaßen aus:
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
In diesem Beispiel empfängt der serielle Port mehr als eine Zeile pro Sekunde. Da die Zeitstempelauflösung Sekunden beträgt, tragen mehrere Zeilen denselben Zeitstempel. Um einen Zeitstempel mit höherer Auflösung hinzuzufügen, ts
können Sie steuern, wie der Zeitstempel formatiert wird. Beispielsweise %.s
erhalten Sie Sekunden seit 1970 in einer Auflösung von unter einer Sekunde:
$ cat /dev/ttyS70 | ts %.s | tee logfile
führt zu
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
Wenn Sie keine absoluten Zeitangaben benötigen, können Sie den Schalter verwenden -s
. Damit erhalten Sie die seit dem Programmstart vergangene Zeit:
$ cat /dev/ttyS70 | ts -s %.s | tee logfile
führt zu
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