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;
}
}
}
}
}