SerialPort против MSComm - PullRequest
       33

SerialPort против MSComm

2 голосов
/ 27 января 2011

Возможно ли, что .Net SerialPort и VB6 MSComm работают по-разному?

В обоих случаях я читаю данные из буфера, и оба получают разные строки, если я импортирую dll MSComm в мой.Net project, работает отлично (очевидно).

У кого-нибудь есть более глубокая информация?

Если это поможет, вот мои простые примеры, в обоих случаях я посылаю один и тот же байтМассив ...

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();

Ответы [ 3 ]

5 голосов
/ 27 января 2011

Вы смешиваете байты и строки.MSComm был очень слаб, но SerialPort заботится о кодировке текста.Очевидно, что вы используете двоичный протокол, вполне вероятно, что полученная строка содержит вопросительные знаки для байтов, которые не могут быть преобразованы в SerialPort.Encoding (по умолчанию ASCII).Вы должны использовать метод Read (), чтобы получить ответ.

1 голос
/ 27 января 2011

Я ожидаю, что они оба используют базовый O / S API ; но я предполагаю, что каждый из них может использовать этот API по-разному: например, с другими параметрами COM-порта по умолчанию (если вы не укажете параметры явно).

Другое различие может заключаться во времени: когда вы читаете ввод / ответ, как вы узнаете, отправлено ли оно еще, и как вы узнаете, достаточно ли долго ожидает функция «чтения» или «ввода»?

0 голосов
/ 13 ноября 2015

MSComm и Serialport являются бесплатными подарками и не имеют много общего. Хорошо известная переносимая библиотека, которая избавляет вас от неприятностей - SuperCom . Он предлагает MSComm-совместимый ActiveX , а также библиотеку классов A NET. Можно использовать тот, который подходит лучше. Его можно использовать с C ++, Delphi, VB6, VB net, C #, FreePascal, Perl, Java и многими другими. И это полностью совместимо с 32-битной и 64-битной Windows вкл. Windows XP, 7,8,10.

...