2 つの異なるデータを参照する必要があるため、シリアル ポートに cutecom を使用しています。これはタイムスタンプがあるためです。ただし、タイムスタンプ付きのこれらのデータをログに記録することはできず、ms の精度が必要です。何か提案はありますか?
ありがとう、セリム。
答え1
ターミナルエミュレータが必要ない場合は、すべての入出力をタイムスタンプ付きで記録するオプションsocat
を使用できます-v
。たとえば、
socat -v READLINE /dev/ttyS0,b19200,raw,echo=0 2>/tmp/log
ttyS0
このコマンドのstdinに入力したものは、指定されたボーレートなどでシリアルポートに送信されます。シリアルポートからの入力はすべて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
これは、「hello\n」と入力して「my reply」が返されるのと同じです。
答え2
tsを使用してください!
任意の Unix および Windows Subsystem for 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
この例では、シリアル ポートは 1 秒あたり 1 行以上を受信します。タイムスタンプの解像度は秒単位なので、複数の行に同じタイムスタンプが付きます。より高い解像度のタイムスタンプを追加するには、ts
タイムスタンプのフォーマット方法を制御できます。たとえば、%.s
1970 年からの秒数を 1 秒未満の解像度で表示します。
$ 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