Shrikant S Ответов: 1

Я пытаюсь связать плату управления с помощью realterm с аппаратным управлением потоком, установленным как "RS 485-rts". Как я могу реализовать его в последовательном порту windows ?


Я использую следующие коды,

port.Parity = Parity.None;
port.DataBits = 8;
port.StopBits = StopBits.One;
port.Encoding = System.Text.Encoding.ASCII;
port.Name ="COM1";
port.BaudRate=9600;
port.DataReceived += Port_DataReceived;


И при этом посылая команды на борт,
port.RtsEnable = true;
port.Write(System.Text.Encoding.ASCII.GetBytes(dataToSend), 0, dataToSend.Length);
Thread.Sleep(15);
port.RtsEnable = false;


Что я уже пробовал:

Я пробовал использовать RealTerm, и я получаю правильный ответ все время, я также получаю правильный ответ от вышеуказанных кодов, но иногда он возвращает мусор, который не является случаем при отправке из RealTerm.

Richard MacCutchan

Вам нужно показать код, где вы получаете мусор, и объяснить, что именно происходит.

Shrikant S

Это те же самые коды, которые я использую для отправки команд, которые упоминались выше. Я получаю мусор в событии 'Port_DataReceived'. Я должен был получить "11111", но я получаю "РРССС". Это почти 1 из 5 раз только то, что я получаю этот мусор.

1 Ответов

Рейтинг:
0

Gerry Schmitz

Это называется: "защитное Программирование"

Цитата:
Событие DataReceived не гарантируется для каждого полученного байта. Используйте свойство BytesToRead, чтобы определить, сколько данных осталось для чтения в буфере.