バックグラウンド
ロジックコントローラーからデータをキャプチャするために、端末エミュレーターとしてscreenを使用し、 KeySpanUSA-19HSUSBシリアルアダプターを介してMacBookを接続しています。次のbashスクリプトを作成したので、talk2controller <filename>
filenameはデータファイルの名前です。
#!/bin/bash
if [ -z "$1" ]; then
echo Please provide the filename to save the logfile
exit
fi
LOGFILE=$1
echo "logfile $1" > screenrc # Set the logfile filename
echo "logfile flush 1" >> screenrc # Wait 1 sec before flushing buffer to filesystem
screen -L -c screenrc /dev/tty.KeySerial1 19200
ログファイルのファイル名を変更し、ログファイルバッファをファイルシステムにフラッシュする前に待機するためにデフォルトの10秒から1秒に変更しました。それらのコマンドをに保存しますscreenrc
。次に、次のコマンドで画面を呼び出します。
-L
—ロギングが有効-c screenrc
—デフォルトの構成ファイルをオーバーライドします/dev/tty.KeySerial1 19200
—19200のボーレートを使用してシリアルポートと通信します
私が記録する各テストには約3〜6分かかり、速度、加速度、および位置の情報が含まれています。加速率からテストが有効だったことがわかります。現在、テストが終了するまで待ってから、Python matplotlibスクリプトを実行して速度、加速度、位置をプロットし、テストが有効かどうかを確認してから、次のテストに進みます。
時間を節約するために、データがまだキャプチャされている間に、テストの約半分でデータをプロットしたいと思います。
質問
私の考えでは、より多くのデータがまだキャプチャされている間にデータをプロットするための2つのオプションがあります。
- オプション1: screenを使用してデータをログに記録し、Pythonmatplotlibスクリプトに部分的なログファイルを読み取らせます。
- 質問1:画面がまだデータを書き込んでいる間にPythonスクリプトがログファイルを読み取る場合、どのような懸念がありますか?
- オプション2: screenの使用からpySerialの使用に切り替えます。ただし、テスト中にデータをプロットすることは、テスト中にデータをキャプチャすることよりも優先度が低くなります。コードのプロット部分で例外が発生し、データロギングが失敗することは許されません。これがscreenの優れている点です。データをダンプするだけで、他のことは何もしません。
- 質問2: pySerialに切り替える場合、コードのプロット部分がデータキャプチャコードに影響を与えない可能性を減らすために2つのスレッドを実行できますか?これは私に何かを買いますか?
質問3:私が考えていなかったより良いオプションはありますか?