Страницы

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

суббота, 8 февраля 2020 г.

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

#c_sharp #com_порт


надо послать 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
            }
        }
    }


Вроде все верно. Но программа ничего не показывает. Где может закрасться ошибка?  
    


Ответы

Ответ 1



Причин может быть много: возможно у вас в системе несколько СОМ-портов и вы отправляете не на тот; устройство которому вы отправляете посылку ничего не отвечает; скорость не подходит, попробуйте поставить, например, 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(); }

Ответ 2



Ваша программа ничего не показывает потому что завершается. Поставьте в конец Main вызов Console.ReadLine()

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

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