Я посылаю команду на последовательный COM-порт в C # и не получаю данные обратно, но когда я использую Putty, я получаю данные - что я делаю неправильно? - PullRequest
1 голос
/ 29 мая 2011

У меня есть приложение на C #, которое я пишу, чтобы попытаться автоматизировать извлечение данных с последовательного устройства.Как говорится в заголовке моего вопроса, я попробовал те же самые команды в Putty и получаю данные обратно.Может кто-нибудь сказать мне, что я пропустил, чтобы я мог получить те же данные с моим приложением C #, пожалуйста?

В основном мне нужно COM6, скорость / бод 57600, и отправить командубез кавычек "эээ".Мне нужно представить несколько строк текстовых данных, которые, похоже, работают только на Putty.

В качестве быстрого теста я скомбинировал это:

private void SerialPort serialPort = new SerialPort();

private void getHistory_Click(object sender, EventArgs e)
{
  serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
  serialPort.PortName = "COM6";
  serialPort.BaudRate = 57600;

  serialPort.Open();
  if (serialPort.IsOpen())
  {
    serialPort.Write("UH");
  }
}

private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
  string result = serialPort.ReadExisting();
  Invoke(new MethodInvoker(delegate{ textbox1.AppendText(result); }));
}

Событие DataReceived действительно получаетзапущен, но возвращает только «UH», которое я послал, никаких дальнейших данных.Любая помощь с этой проблемой будет принята с благодарностью!

  • Джастин

1 Ответ

0 голосов
/ 30 мая 2011

Ну, без дальнейших подробностей рассматриваемого устройства, трудно сказать наверняка, но на ум приходят две вещи:

Во-первых, какой протокол связи требуется устройству? Вы установили скорость передачи, но не упоминаете биты данных, четность или стоп-биты. Я думаю класс последовательного порта .NET по умолчанию равен 8, N, 1. Если ваше устройство такое же, то все будет в порядке. Если это не так, то это не сработает.

Во-вторых, требуется ли устройству какое-либо завершение данных для определения полного пакета? Обычно это могут быть отправленные данные с добавлением возврата каретки и перевода строки (0x0D и 0x0A) или, возможно, с префиксом STX (0x02) и суффиксом ETX (0x03).

Любое сообщение, на которое отвечает устройство, также может быть в том же формате.

Я не знаю, как работает Putty, но проверьте настройку и посмотрите, добавляет ли она что-либо к вводимому вами сообщению и протоколу. Hyperterminal также делает это, так что вы можете проверить это также.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...