SerialPort COM, запрос-ответ - C#

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

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

Привет! Значица работаю с устройством через COM-порт. Есть спецификация. При включении устройства оно посылает на компорт Connect message. С этим проблем нет, запускаю отдельный поток в котором слушаю компорт вот:
 class Program
    {
        static SerialPort myCOM;
 
        static void Main(string[] args)
        {
            myCOM = new SerialPort("COM2", 38400);
            myCOM.Open();
            if(myCOM.IsOpen)
            {
                Console.WriteLine("Opened");
                Thread t = new Thread(() => ReadData());
                t.Start();
            }
 
            Console.Read();
        }
 
        static string ReadData()
        {
            string buff = "";
            while (true)
            {
                string temp = myCOM.ReadExisting();
 
                if (!String.IsNullOrEmpty(temp))
                {
                    buff += temp;
                    if(buff.Length == 52)
                    {
                        Console.WriteLine(buff);
                        return buff;
                    }
                }
            }
        }
вот такая вот строка приходит при включении

{{++!!0000E0001A1,CONNECT;LTR3_SERIAL_2371297F!!--}}

И вот мне нужно отправлять на устройство запроси и слушать ответы, но чего то не получается, либо я не понял как это делается В методе Main(),после строчки Console.Read();, формирую строку запроса, и пишу ее в порт, и слушаю что придет
Console.Read();
            if (myCOM.IsOpen)
            {
                byte[] datar = new byte[256];
                TransportFrame tc = TransportFrame.Create(packetNumber, ETransportFrameType.LoadtronicProtocols, "1; ;10");
                packetNumber++;
                myCOM.Write(tc.CompleteMessage);
                Thread.Sleep(600);
                myCOM.Read(datar, 0, datar.Length);
                Console.WriteLine(Encoding.UTF8.GetString(datar, 0, datar.Length));
 
            }
            Console.Read();
        }
Но код останавливается на myCOM.Read и ничего не получает. Очень нужно научиться вести диалог с устройством, и потом парсить данные что приходят. З.Ы. Устройство называется LOADTRONIC, кому надо прикрепляю спецыфикацию запросов (del), может я чего то там важного не заметил. И клас формирующий строку запроса (del).

Решение задачи: «SerialPort COM, запрос-ответ»

textual
Листинг программы
 class Program
    {
        static SerialPort myCOM;
 
        static int packetNumber;
 
        static void Main(string[] args)
        {
            Thread t;
            myCOM = new SerialPort("COM2", 38400);
            myCOM.Open();
            if(myCOM.IsOpen)
            {
                Console.WriteLine("Opened");
                t = new Thread(() => ReadData());
                t.Start();
            }
            Console.Read();
        }
 
        static string ReadData()
        {
            string buff = "";            
            Thread.Sleep(500);
            while (true)
            {
                string temp = myCOM.ReadExisting();
 
                if (!String.IsNullOrEmpty(temp))
                {
                    buff += temp;
                    if(buff.Length == 52)
                    {
                        Console.WriteLine(buff);
                        break;
                    }
                }
            }
            byte[] datar = new byte[256];
            TransportFrame tc = TransportFrame.Create(packetNumber, ETransportFrameType.LoadtronicProtocols, "1; ;10");
            packetNumber++;
            myCOM.Write(tc.CompleteMessage);
            while (true)
            {
                string temp = myCOM.ReadExisting();
 
                if (!String.IsNullOrEmpty(temp))
                {
                    buff += temp;
                    if (buff.Length == 52)
                    {
                        Console.WriteLine(buff);
                        return buff;
                    }
                }
            }
        }
    }

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


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

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

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