我使用 Cutecom 作為串行端口,因為它有時間戳,因為我需要引用兩個不同的數據。但我無法使用時間戳記記錄這些數據,並且需要精確的毫秒數。有什麼建議嗎?
謝謝,塞利姆。
答案1
如果您不需要終端模擬器,則可以使用socat
使用-v
時間戳記記錄所有 I/O 的選項。例如,
socat -v READLINE /dev/ttyS0,b19200,raw,echo=0 2>/tmp/log
ttyS0
無論您在此命令的標準輸入上鍵入什麼內容,都將以給定的波特率等發送到序列埠。在/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
這相當於輸入“hello\n”並收到發回的“我的回覆”。
答案2
使用ts!
在任何 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