.NET 4.x Подскажите пожалуйста как получить ответ от устройства через COM порт - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет. Встал вопрос работы с устройством на COM порту.
        static void Main(string[] args)
        {
            string[] portnames = SerialPort.GetPortNames();
 
            for (int i = 0; i < portnames.Length; i++)
                Console.WriteLine(portnames[i]);
 
            SerialPort port = new SerialPort(portnames[2]);
            port.Open();
 
            string command = "S";
            byte[] data = Encoding.UTF8.GetBytes(command);
            port.Write(data, 0, data.Length);
 
            byte[] dataR = new byte[500];
            port.Read(dataR, 0, dataR.Length);
 
            int databyte = port.ReadByte();
 
            Console.WriteLine(databyte);
 
            Console.ReadKey();
        }
Это то, что есть. Есть даже протокол общения с устройством. Помогите пожалуйста, никак не могу получить сообщение в ответ. Протокол: 1. 8N1, скорость передачи 115200 бит/с 2. Длина данных в посылке не более 1 Кбайт. Между посылками должен быть перерыв не менее 10 мс. 3. Передача идентификатора, длины данных, данных и контрольной суммы в ASCII-HEX виде 4. Поле длины данных — 2 байта старшим вперед 5. Tаймаут между байтами max 10 мс 6. Старт-символ, стоп-символы, идентификатор и контрольная сумма в длину не входят 7. Контрольная сумма включает в себя идентификатор, длину данных и данные. 8. Посылки с некорректной длиной (указанная длина данных не соответствует количеству переданных/принятых байт), контрольной суммой, идентификатором не равным 0х80, игнорируются. 9. Идентификатор – 0х80.
Неужели никто не знает?

Решение задачи: «.NET 4.x Подскажите пожалуйста как получить ответ от устройства через COM порт»

textual
Листинг программы
SerialPort port = new SerialPort();
port.PortName = "COM1";
port.BaudRate = 115200;
port.Parity = Parity.Odd;
port.DataBits = 8;
port.StopBits = StopBits.One;
port.ReadTimeout = 10;
port.Open();
 
if (port.IsOpen)
{
    string request = "S";
    byte[] send = Encoding.ASCII.GetBytes(request);
    port.Write(send, 0, send.Length);
 
    Thread.Sleep(10);
    byte[] receive = new byte[1024];
    int readed = port.Read(receive, 0, receive.Length);
 
    if (readed > 0)
    {
        string answer = Encoding.ASCII.GetString(receive);
    }
 
    port.Close();
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.5 из 5
Похожие ответы