SerialPort COM, запрос-ответ - C#
Формулировка задачи:
Привет! Значица работаю с устройством через COM-порт. Есть спецификация. При включении устройства оно посылает на компорт Connect message. С этим проблем нет, запускаю отдельный поток в котором слушаю компорт вот:
вот такая вот строка приходит при включении
Но код останавливается на myCOM.Read и ничего не получает.
Очень нужно научиться вести диалог с устройством, и потом парсить данные что приходят.
З.Ы. Устройство называется LOADTRONIC, кому надо прикрепляю спецыфикацию запросов (del), может я чего то там важного не заметил. И клас формирующий строку запроса (del).
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(); }
Решение задачи: «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; } } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д