問題タブ [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.

0 投票する
1 に答える
107 参照

.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も (このリンクを参照してください。何も変更されていません。

他に何が起こっている可能性がありますか?ポートを介して送信されたデータをさらに詳しく調査することで、最終的に答えが得られるはずですか、それともまったく別のことが起こっているのでしょうか?