2

私は修士論文を書いており、シリアルポートデバイス通信のプログラミングに固執しています。

私は光音響スキャナーを書いています。熱画像を作成できるアプリケーション。

私は USB デバイスを使用して急勾配のモーターを制御し、National Instruments デバイスを使用して信号を取得しています。

私のアプリケーションは、2 つのステッピング モーターを制御しています (制御する必要があります)。

これらのモーターを制御するためにビルドされた USB コントローラーがあります。これはシステムで COM デバイスとして表示されます。ハイパーターミナルと簡単なアプリで制御できるので、通信は問題ありません。

デバイスとアプリケーション間の双方向通信の構築に問題があります。

次のように文字列をデバイスに送信しています。

serial.Write("CAL\r");- これにより、デバイスが調整されます。ただし、「CAL OK」または「BUSY」という 2 つの応答を返すことができます。つまり、キャリブレーションは OK であるか、デバイスが現在別の処理を行っています。

シリアル ポートで DataRecived イベントをリッスンしてから、string.equals を実行できます。

私のアプリケーションはモーターを制御し、応答を待つ必要があります。

簡単なシナリオでは:

  1. アプリケーションを開始
  2. 入力を使用して、スキャンされるサンプルのサイズを入力します。
  3. 輪郭ボタンを押します - アプリケーションが開始され、最初にモーターが左上隅に移動し、次に右上、右下、左下に移動します。(簡単なコマンドを送信することはできますが、1 つを送信し、応答を待ってから、別のコマンドを送信し、GUI の 4 つ目のボタンを有効にする方法は?)
  4. 領域が正しく定義されている場合は、[次へ] をクリックしてスキャンを開始します。
  5. モーターがポイント 1,1 に移動し (そのように呼びましょう)、信号の取得が開始されます。
  6. 収集されたデータが処理され、ポイント 1,2 に移動します
  7. 領域全体が完了し、ユーザーはスキャンが完了したというメッセージを受け取ります。

そのシリアル ポート通信を開始する方法がわかりません。その双方向通信を実装する方法。

COMポートを開き、コマンドを送信し、受信したデータごとに発生するイベントを持つ単純なクラス(シングルトン)があります。

私のクラスでスタックを作成し、その上ですべてのコマンドを送信してから、ループでそれらを取得してデバイスに送信することは良い解決策でしょうか?

しかし、脅威でそれをどのように処理するのでしょうか? 脅威がスリープしてから、すべてのコマンドが処理されているかどうかを確認します。処理されていない場合は、再び脅威がスリープしますか?

アドバイスをいただければ幸いです。

これを編集して、アプリケーションの外観/動作方法を示しています

私は、TabControl を持つ単純なアプリケーションを持っています (アプリケーションのタブを非表示にする変更されたバージョンで、デザイン モードでのみ表示されます)。

最初のタブには、いくつかのテキストと情報 (主に統計) があります。2 番目は取得を許可します。

ユーザーが最初のタブ「取得に移動」のボタンをクリックすると、そのタブが表示されますが、すべてのボタンが無効になっています。

「キャリブレーションを開く」ダイアログをクリックする必要があります。次に、そのダイアログでデバイスを較正し、すべての取得パラメータを入力します (そのダイアログで、測定するサンプルの 4 つのコーナーにモーターを移動する輪郭を実行するオプションがあります)。キャリブレーションが完了したら、そのダイアログを閉じると、すべてのコントロールがメイン フォームでアクティブになります。これで、「取得開始」ボタンをクリックできるようになりました。その後、より急勾配のモーターが特定の位置に移動し (ポイントごとに計算されます)、そのポイントのデータが取得され、処理され、ファイルに保存され、画像ボックスにピクセルとして表示されます。次に、モーターが別のポイントに移動し、プロセスがサンプルの終わりまで繰り返されます。基本的には、正方形のサンプルをスキャンし、レーザーを特定のポイントに移動し、データを収集して、そこから熱画像を作成します。これは、ピクセルごとに画像を作成するようなものです。

図またはスクリーンショットを使用して、私のアイデアを説明しようとします。

4

0 に答える 0