SerialPort StopBits для Windows7 C ++ / CLI - PullRequest
0 голосов
/ 30 июня 2011

Я использовал класс SerialPort из C ++ / CLI (Windows::IO::Ports), чтобы открыть последовательный порт и связаться с периферийным устройством, и все, кажется, работает.Порт открывается, и данные отправляются. Но я не получил ответ от периферийного устройства.

Я использую код вроде:

SerialPort^ _serialPort;
_serialPort = gcnew SerialPort();

//_serialPort = gcnew SerialPort("COM1",115200,Parity::None, 8, StopBits::One);

// Allow the user to set the appropriate properties.
_serialPort->PortName = "COM1";
_serialPort->BaudRate = 115200;

//Parity None by default
//_serialPort->Parity = Parity::None;

_serialPort->DataBits = 8;

_serialPort->StopBits = StopBits::One;

// Set the read/write timeouts
_serialPort->ReadTimeout = 1000;
_serialPort->WriteTimeout = 500;
_serialPort->Open();

Использование программы для мониторингапри связи через последовательный порт кажется, что количество стоп-битов равно 0. Как вы видите, я установил стоп-биты на 1, и даже самое странное, что значение по умолчанию равно 1. Я не знаю, почему он сохраняетбудучи 0. Я пытался изменить скорость передачи данных и бит данных, и он изменился, но с StopBits это никак не получится ...

Это действительно жалко, потому что, кажется, это действительно легче использоватьдругие коды в Интернете.

Кто-нибудь может мне помочь?Есть идеи, почему это не сработало?


Может кто-нибудь сказать мне тогда, если этот код в порядке?

отправленный массив: array<Byte>^ bytes = gcnew array<Byte>(32); (он инициализируется с некоторымизначения)

для отправки данных, которые я использую: _serialPort->Write(bytes,0,32);

Чтобы прочитать данные, которые я пробовал:

_serialPort->Read(readarray,0,18);
_serialPort->ReadExisting();

И никто из них не возвращает никаких данных ...Когда я использую Serial Port Monitor, чтобы открыть сообщение и отправить те же байты, он отвечает ...

Ответы [ 2 ]

1 голос
/ 30 июня 2011

Стоповые биты сконфигурированы перечисляемым значением, которое не равно количеству стоп-битов.

Ноль - правильная кодировка для одного стопового бита. Смотри http://msdn.microsoft.com/en-us/library/aa363214.aspx

0 голосов
/ 01 июля 2011

Нашел это !! Кажется, что даже установив «Рукопожатие» на «Нет», порты DTR и RTS были установлены НИЗКИЕ после отправки данных. (я не знаю почему).

Я установил их вручную на ВЫСОКИЙ с помощью:

_serialPort->RtsEnable = true;
_serialPort->DtrEnable =true;
...