問題タブ [mscomm32]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - 古い VB6 MSComm コントロールがシリアル ポートと通信する方法と、.Net SerialPort がこれを行う方法との間に重大な違いはありますか?
USB ケーブルで接続され、COM ポートをエミュレートするデバイスがあります。VB6 アプリケーションがデバイスにバイトを送信するたびに、接続を開いた後に古い VB6 アプリケーションと MSComm コントロールを使用すると、デバイスはバイトを返します。
現在、VB6 アプリケーションを .Net に移植し、このSerialPort
クラスを通信に使用しています。port.Write
成功しport.ReadByte
ますが、使用するTimeOutException
すべての考えられるものに遭遇ReadTimeOut
します。
一見すると、ボーレート、パリティなどのすべての設定は同じです。奇妙なことに、最初に古い VB6 アプリケーションを起動して閉じると (デバイスに接続されます)、デバイスを取り外して再度接続するまで、.Net コードも同様に機能し始めます。
そのため、何らかの方法で MSComm コントロールがデバイスを活性化させますSerialPort
。接続を開いて通信を開始する VB6 アプリケーションのコードは単純で、C# に変換されています。
ポート モニターを使用して、実際に送信されたデータを確認しました。実際、MSComm コントロールは、実際のデータ転送を開始する前に、さらに多くの制御バイトをデバイスに送信します。私が識別できた唯一の意味のある違いは、MSComm コントロールが Xon Xof、EvtChar などに他の制御文字を使用することです。ただし、これらを調整した後SerialPort
も (このリンクを参照してください。何も変更されていません。
他に何が起こっている可能性がありますか?ポートを介して送信されたデータをさらに詳しく調査することで、最終的に答えが得られるはずですか、それともまったく別のことが起こっているのでしょうか?