2

.Net SerialPort と VB6 MSComm の動作が異なる可能性はありますか?

どちらの場合も、バッファからデータを読み込んでいますが、MSComm dll を .Net プロジェクトにインポートすると、両方とも異なる文字列が得られました。(明らかに) 完全に動作します。

誰かがもっと深い情報を持っていますか?

それが役立つ場合は、ここに私の簡単なサンプルを示します。どちらの場合も、同じバイト配列を送信します...

VB6:

Dim MSComm1 As Object
Dim ArrToSend() As Byte
Dim IncomeData As String
Set MSComm1 = CreateObject("MSCommLib.MSComm")
With MSComm1
    .CommPort = 1
    .PortOpen = True
End With

ReDim ArrToSend(4)
ArrToSend(0) = 179
ArrToSend(1) = 1
ArrToSend(2) = 92
ArrToSend(3) = 92
MSComm1.Output = ArrToSend
IncomeData = MSComm1.Input

c#

SerialPort _serialPort = new SerialPort();
_serialPort.Open();
Byte[] _bytesToSend = new Byte[4];
_bytesToSend[0] = 179;
_bytesToSend[1] = 1;
_bytesToSend[2] = 92;
_bytesToSend[3] = 92;
_serialPort.Write(_bytesToSend, 0, _bytesToSend.Length);
String ReadExisting = _serialPort.ReadExisting();
4

3 に答える 3

5

バイトと文字列が混在しています。MSComm は非常に緩いものでしたが、SerialPort はテキスト エンコーディングを考慮しています。明らかにバイナリ プロトコルを使用しています。受信した文字列には、SerialPort.Encoding (デフォルトは ASCII) に変換できなかったバイトの疑問符が含まれている可能性があります。応答を取得するには、Read() メソッドを使用する必要があります。

于 2011-01-27T19:09:51.160 に答える
1

どちらも基盤となる O/S API を使用していると思います。しかし、それぞれがその API を異なる方法で使用する可能性があると思います。たとえば、異なるデフォルトの COM ポート パラメーターを使用します (パラメーターを明示的に指定しない場合)。

もう 1 つの違いは、タイミングにある可能性があります。入力/応答を読み取るときに、それがまだ送信されているかどうか、および「読み取り」または「入力」機能が十分に長く待機しているかどうかをどのように知るのでしょうか?

于 2011-01-27T17:41:41.700 に答える
0

MSComm と Serialport は無償提供であり、共通点はあまりありません。トラブルを回避できるよく知られたポータブル ライブラリはSuperComです。MSComm 互換のActiveXと A NET クラス ライブラリも提供します。よりフィットする方を使用できます。C++、Delphi、VB6、VB net、C#、FreePascal、Perl、Java などで使用できます。また、32 ビットおよび 64 ビットの Windows と完全に互換性があります。Windows XP、7、8、10。

于 2015-11-13T09:09:01.540 に答える