Как читать данные из последовательного порта (Rs232), который постоянно отправляет данные, не затрагивая пользовательскиC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как читать данные из последовательного порта (Rs232), который постоянно отправляет данные, не затрагивая пользовательски

Сообщение Anonymous »

У меня есть оборудование, которое непрерывно отправляет данные при выполнении операции. Я использую RS232 для связи через COM-порт. Я могу читать и записывать данные, но читать данные не очень хорошо.
Чтобы лучше понять, рассмотрим следующий сценарий:
Я отправляю " H», а в ответ данные отвечают «HELLO» непрерывно, строка за строкой. Через 10 секунд он останавливается и завершает передачу данных сообщением «ПОКА». Используя цикл do.. while, я могу прочитать данные, но тогда пользовательский интерфейс не отвечает при чтении данных. У меня есть класс с именем SerialCom.cs, который устанавливает соединение, записывает и читает данные. Во время чтения данные отправляются в Form1.cs для отображения в пользовательском интерфейсе. Во время чтения я могу захватывать данные, но не отображать их в пользовательском интерфейсе, поскольку пользовательский интерфейс не отвечает. Фактически, пользовательский интерфейс отображает только сообщение «ПОКА!», когда чтение остановлено и пользовательский интерфейс начинает реагировать.
Как лучше всего читать последовательные данные? какая-нибудь простая логика или синтаксис будут полезны?
namespace ReadSerialData
{
public class serialCom
{
private SerialPort serialPort;

public delegate void sendResponseData(string data);
public event sendResponseData m_resData;

public serialCom()
{
serialPort = new SerialPort();
}

public bool OpenPort(string comPortName, int baudRate)
{
// This contains open port logic
// setting all the properties to open the port
// portname, baudrate, parity, databits
}

public bool closePort()
{
// This function closes the port
}
public void writeCommand(string cmd)
{
serialPort.Write(command);
}
public void ReadSerialData()
{
if(!SerialPort.IsOpen) {
MessageBox.Show("Serial port not open");
} else {
//Read serial data code here
do {
byte[] buffer = new byte[4096];
int bytesRead = 0;
} while();
}

}
}
}


Подробнее здесь: https://stackoverflow.com/questions/786 ... -without-a
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»