0

ハードワイヤードのイーサネット LAN を介して 1 台の制御 PC に 4 台のハードウェア データ収集ユニットを接続します。このアプリケーションのコーディングは PC 上にあり、完全に Python ベースです。各データ取得ユニットは同じように構成され、同じ方法で PC からポーリングされます。それらが接続されているテストボックスは、テストを実行しようとする可変出力を提供します。

これらのテストは長期的 (8 ~ 16 か月またはそれ以上) であり、データ取得率は比較的低く (1 分あたり 500 サンプル未満、おそらく 200 近く) なります。一般的なプロセス フローも単純です。各データ取得デバイスをループして、次のことを行います。

  • デバイスからデータを読み取ります。
  • データに対していくつかの計算を行います。
  • カルクが何かを言う場合は、ヒーターをオンにしてください。
  • 彼らが何か他のことを言ったとしても、何もしません。
  • 後続の処理のためにデータをディスクとファイルに書き込みます

しばらく待ってから、プロセスをもう一度繰り返します。ここに私の質問があります:

  1. ループを使用して、while TRUE:上で概説したシーケンスの実行を開始し、例外を介してループを終了できるようにする予定ですが、チェックする必要がある特定の例外に関するアドバイスを歓迎します。 AT ALLを取るための最良のアプローチは?もう 1 つのアプローチは次のとおりです。whileループ内に入ったら、構造体を使用しtry: - except: - finally:てループを終了できます。
  2. 上で概説したプロセスは主なデータ取得に関するものですが、収集期間の長さを考えると、ハードウェアユニットが正常に動作していることを確認し、テストスタンドをオンまたはオフラインにするなど、他のことも行う必要があります。これらの「管理」機能はメイン ループとは別のものなので、別のものにしておきたいと思います。このアクティビティを同じスクリプト内の別のスレッドに設定する必要がありますか、それともより良い方法がありますか?

よろしくお願いします。すべてのフィードバックを歓迎します!

4

2 に答える 2

2

クライアント サーバー モデルを使用するとよいと思います

適切に分離されるため、一方のスクリプトが他方に影響を与えることはありません - ステータス チェック / データ収集

基本的に、メイン マシンでデータ収集用のサーバーを実行するために行うことは、メンテナンス用の端末入力 (ログ、グレースフル終了など) と、データ収集 PC がクライアントのように動作し、while True ループ (可能な場合) です。殺されない限り無期限に実行されます)、データ収集PCのそれぞれで、ステータスチェックのためにサーバー/クライアント(視点によって異なります)になり、メインPCにデータが送信され、そこで何をすべきかが決定されます

また、unix/linux または Windows を使用している場合、ステータス チェックには ssh を使用してマシンに接続し、ステータスを確認します (手動またはメイン マシンからのスクリプトを介して) ... 特定のニーズに依存します ...

楽しみ

于 2012-08-28T19:20:11.393 に答える
1

複数のループが必要になる場合があります。計測器がTCPサーバーの場合、計測器スレッドを永続的に終了するのではなく、内部ループで「切断された」例外をキャッチして再接続を試みることができます。

Pythonについてはよくわかりません。C ++、C#、Delphiでは、おそらく、タイムアウトのある生産者/消費者キューで待機することによって待機を生成します。何も投稿されない場合は、概説したシーケンスが希望どおりに繰り返されます。他の時折発生する必要がある場合は、スレッドに必要なコマンドを計測器に発行するように指示するメッセージをキューに入れるか、切断して内部の「ポーリングしない」を設定し、再接続するように指示されるまで待ちます。再度ポーリングするフラグ、または実行する必要があるものは何でも。

この種のアプローチは、スレッドを停止して他のスレッドから接続し、たまに何かを行うよりもクリーンになります。スレッドの停止/終了/再作成は、どの言語でも避けるのが最善です。

于 2012-08-28T19:23:46.553 に答える