2017-06-26 21 views
0

LabVIEW(バージョン7.0)を使用してシリアル接続でデバイスを制御しています。 USBを使用して接続されており、Windows XPを実行しているコンピュータに仮想シリアルポートとしてインストールされています。私のプログラムがコマンドを送信したときに私のデバイスがクラッシュするたびに、それがタイムアウトするまでそれ以上の入力を受け付けることができなくなります(デバイス自体も機能しなくなります)。LabVIEWでシリアル通信がクラッシュする

私はPortmonを使ってシリアルポートトラフィックを調べました。デバイスがクラッシュするたびに、シリアルドライバはIOCTL_SERIAL_GET_COMMSTATUSコマンドを使って、プログラムを使用して送信するコマンドを1回ではなく4回送信します。私はこの最後のコマンドが何を返すかを見ることはできませんが、私は以前のコミュニケーションで何かが起こったと思います。私はポートの構成がまったく正しいとは思っていませんが、どうやって、なぜか分かりません。何かを書くときはいつでも、デバイスへの接続を開いたり閉じたりします。

完全性のために、9600,8ビット、パリティなし、1ストップビット、およびフロー制御なしのボーレートを持っています。私は、これらのパラメータの正しい設定はデバイスに依存しているが、メーカーは推奨設定を提供していないことに気付いています。

+1

Portmonに加えて、NI I/OTrace - http://digital.ni.com/public.nsf/allkb/282C5D41E2BA04F2862574BA007803B9を使用して、シリアル通信のLabVIEWパースペクティブを取得することもできます。赤色で表示されている行は、エラー状態を示します。 –

+0

あなたを助けるために、より具体的な情報を提供する必要があります。どんなデバイスに接続していますか、どんなドライバを使用していますか、あなたのlabviewコードの抜粋を投稿することはできますが、それは問題ではないかもしれないと示唆しています。同じドライバを使用してこの問題が発生しない別のプログラムがありますか。 –

+0

@ D.J.Klomp具体的には、このデバイスはRFジェネレータ(WindFreak製、モデルはSynthUSBii)です。それはATmega32U2マイクロコントローラを含んでいます。私が下で説明したように、すべてのコマンドに改行を追加することで問題が解決されたため、デバイスを制御するプログラムに依存しません。この問題は、ここで扱うにはあまりにも具体的ではないかもしれないことを認識しています。なぜなら、マイクロコントローラがどのようにプログラムされているかに大きく依存しているからです。 – Julius

答えて

0

ドライバは何らかの種類のDLLですか?もしそうなら、これがあなたの問題の最も可能性の高い源であり、ドライバーの作者に連絡する必要があります。 LabVIEWにはバグがありますが、単純な通信アプリケーションで最も一般的なクラッシュの原因は、バグの多いサードパーティのDLLです。

言い換えれば、これはLabVIEWの問題ではないと思います。このドライバと通信するCプログラムを作成した場合、同じ問題が発生します。私はあなたのシステムについてここに投稿したことを知っているだけですが、このような問題を長年追跡した後、私はデバイスメーカー/ドライバの著者から始めます。

逆の証拠がある場合は、ご連絡ください。

+1

私はプログラムを使って自分のデバイスとシリアルで直接通信すると、複数のコマンドをすぐに複数送信するとクラッシュします。私は、各コマンドの最後に改行を追加すると、これは起こらないことを発見しました。 LabVIEWプログラムが送信するコマンドにキャリッジリターンを追加すると、この問題が解決されました。 – Julius