Команда отправки последовательного порта C ++ / CLI - PullRequest
2 голосов
/ 03 марта 2011

У меня есть оборудование, которое связывается через последовательный порт.Я использую MS Visual C ++ 2010, и я хочу отправить команду: <-S->

Я делаю это:

SerialPort^ serialPort = gcnew SerialPort(portName , 9600, Parity::None, 8, StopBits::One);
serialPort->Open();
serialPort->WriteLine("<-S->");
serialPort->Close();

Но команда, которая выходит, <-S->., а не <-S-> (обратите внимание на точку, прикрепленную к исходящей команде).Я использую Free Serial Port Monitor для просмотра входящих / исходящих данных.

Так как мне избавиться от этой точки в <-S->.?

Это то, чтовыход:

3C 2D 53 2D 3E 0A = <-S ->.

Это то, что я хочу:

3C2D 53 2D 3E = <-S ->

Спасибо за помощь.

Ответы [ 3 ]

5 голосов
/ 03 марта 2011

Вы используете WriteLine(), который добавляет новую строку (символ 0x0A) к вашему выводу (который отображается как ., но на самом деле это не точка). Попробуйте Write() вместо.

1 голос
/ 03 марта 2011

Это значение свойства SerialPort.NewLine. Перевод строки по умолчанию. Вместо этого используйте Write ().

Там больше проблем, ваш код будет хорошо работать только при одном шаге с отладчиком. Без этого метод Close () мгновенно очистит буфер передачи, и только случайное количество символов сможет быть отправлено, в том числе и ничего. Закрывайте последовательные порты только после завершения вашей программы.

0 голосов
/ 03 марта 2011

Поскольку вы используете C ++ / CLI, на самом деле нет причин использовать ужасный класс .NET SerialPort. встроенные функции последовательного порта Win32 гораздо более мощные и надежные.Включите режим OVERLAPPED, прикрепите событие, и вы сможете выполнять фоновые операции ввода-вывода без необходимости связываться с пулом потоков и синхронизацией.

...