Некорректное чтение данных из com порта - C#
Формулировка задачи:
Считываю данные из прибора
Протокол обмена следующий:
Текущие данные передаются из прибора каждые 4 сек пакетом 344 байта. Все данные в двоичном формате.
Скорость передачи 9600 бит/c. Каждый байт кодируется: одним старт битом, восемью битами данных и одним стоп битом.
Помогите разобраться с кодом
Байты читаю по кнопке button
Теперь моя проблема: в 70-80% байты считываются правильно, и в 20% - неправильное чтение.
Может у кого то, есть рабочий код под мой случай с использованием события
Листинг программы
- const int DataSize = 344;
- byte[] rez = new byte[DataSize]; // массив для хранения данных длинной 344 бита
- SerialPort ComPort = new SerialPort();
- ComPort.StopBits = StopBits.One; // стоп битов
- ComPort.DataBits = 8; // размер байта
- ComPort.BaudRate = 9600; // скорость обмена
- ComPort.Parity = Parity.None; // бит четности
- ComPort.ReadTimeout = 6000; // тайминги
- // Читаем из Com порта в массив
- public void readcomport()
- {
- ComPort.DiscardInBuffer();
- ComPort.DiscardOutBuffer();
- for (int i = 0; i< DataSize; i++)
- {
- rez[i]= Convert.ToByte(ComPort.ReadByte()); // читаем байты в массив
- }
- // Сохранение в файл под своим номером
- using (BinaryWriter writer = new BinaryWriter(File.Open((rez[15] << 8 | rez[14]).ToString() + ".tek", FileMode.Create)))
- {
- writer.Write(rez);
- }
- display(); // вызов метода отображение данных из прибора на экран
- }
Листинг программы
- private void button1_Click(object sender, EventArgs e)
- {
- try
- {
- ComPort.Open();
- if (ComPort.IsOpen)
- {
- readcomport();
- }
- }
- catch (Exception e1)
- {
- MessageBox.Show(e1.Message);
- }
- }
DataReceived
. Желательно с использованием промежуточного буфера, чтобы считывался весь пакет данных без потерь. Буду признателен за ответ.Решение задачи: «Некорректное чтение данных из com порта»
textual
Листинг программы
- void Port_Read(object sender, SerialDataReceivedEventArgs e)
- {
- try
- {
- for (int i = 0; i < DataSize; i++)
- {
- rez[i] = Convert.ToByte(ComPort.ReadByte()); // ЧТЕНИЕ БАЙТОВ ИЗ ПРИБОРА В МАССИВ
- }
- SetText(Encoding.ASCII.GetString(rez));
- }
- catch (Exception e3)
- {
- MessageBox.Show(e3.Message);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д