Я очень новичок в общении с оборудованием. В настоящее время я создаю GUI в C#, используя Windows Forms. Я использую последовательный порт/usb для взаимодействия с аппаратным устройством. То, что я пытаюсь достичь, состоит в том, чтобы несколько потоков опросили устройство в разное время. Некоторые данные, такие как температура, ток, мощность и т. Д., Должны регулярно восстанавливаться (по крайней мере каждую секунду) и обновляться в графическом интерфейсе пользователя. В то время как другие данные будут извлекаться только тогда, когда пользователь нажимает кнопку в форме. Будет ли многопоточность правильной подходом к решению этой проблемы? Если нет, то что было бы лучшим решением? Примеры были бы весьма полезны. Спасибо за ваше время, ребята!Каков правильный способ опроса нескольких потоков на одном и том же последовательном порту?
Обновление: Я пытаюсь использовать событие SerialPort.DataReceived, как многие из вас предложили, и символ терминатора '\ r' для разбора отдельных ответов из последовательного порта. Затем я вызываю метод DisplayText для обработки этой строки. Моя проблема в том, что я не знаю, как понять, что представляет строка. Имеет ли она представляет собой температуру, ток и т.д.
private char terminator = '\r';
private void SerialPorts_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
output += serialPort1.ReadExisting();
if (output.IndexOf((char)this.terminator) > -1)
{
string workingString = output.Substring(0, output.IndexOf(terminator));
output = output.Substring(output.IndexOf(terminator) + 1);
this.Invoke(new EventHandler((s, a)=>DisplayText(s, a, workingString)));
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void DisplayText(object sender, EventArgs e, string s)
{
Console.WriteLine(s); // for testing only
richTextBox1.AppendText(s); // for testing only
}
это могло бы помочь: https://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived%28v=vs.110%29.aspx –
Имеется ли у части оборудования несколько портов ввода/вывода? Это простой микроконтроллер, такой как Arduino? Если это так, вам не понадобится многопоточность – Sean
@SPrashad да, это простой микроконтроллер с одним портом ввода-вывода. Так что было бы лучшим решением? Моя главная задача - попытаться опросить устройство в одно и то же время и тем самым заполнить буфер мусором. (создание условия гонки) –