Страницы

Поиск по вопросам

пятница, 12 апреля 2019 г.

Как послать данные на ком-порт?

надо послать 0x55 на 3 ком-порт с одним стоп битом.
using System; using System.IO.Ports;
namespace Com { class Program { static void Main(string[] args) { try { SerialPort _serialPort = new SerialPort("COM3", 2400, Parity.None, 8, StopBits.One); _serialPort.Handshake = Handshake.None;
_serialPort.Open(); _serialPort.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
byte sent = 0x55; Console.WriteLine("sent: {0}", sent); _serialPort.Write(new byte[1] { sent }, 0, 1);
} catch (Exception e) { Console.WriteLine("Exception:, {0}", e); } } private static void sp_DataReceived(object sender, SerialDataReceivedEventArgs e) { SerialPort sp = (SerialPort)sender; string indata = sp.ReadExisting(); Console.WriteLine("Data Received:, {0}", indata); Console.ReadLine(); //Pause } } }
Вроде все верно. Но программа ничего не показывает. Где может закрасться ошибка?


Ответ

Причин может быть много:
возможно у вас в системе несколько СОМ-портов и вы отправляете не на тот; устройство которому вы отправляете посылку ничего не отвечает; скорость не подходит, попробуйте поставить, например, 1200; попробуйте поменять таймауты.
_serialPort.ReadTimeout = 500; _serialPort.WriteTimeout = 500;
Или же ваша программа закрывается еще до получения ответа. Попробуйте так:
static void Main(string[] args) { try { SerialPort _serialPort = new SerialPort("COM3", 2400, Parity.None, 8, StopBits.One); _serialPort.Handshake = Handshake.None;
_serialPort.Open(); _serialPort.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
byte sent = 0x55; Console.WriteLine("sent: {0}", sent); _serialPort.Write(new byte[1] { sent }, 0, 1);
} catch (Exception e) { Console.WriteLine("Exception:, {0}", e); } Console.ReadKey(); }

Комментариев нет:

Отправить комментарий