Разобрать данные с COM-порта - C#

Узнай цену своей работы

Формулировка задачи:

Привет. Стоит задача проверять данные, приходящие с COM-порта, разбирать блоки побайтно и формировать выходные массивы данных. Данные состоят из блоков фиксированной длины. Последний байт 44 (в 16-и ричном коде - признак окончания блока). 3-й байт - константа. Мне необходимо вынимать данные с 1,2 и 4,5 байтов. Остальная информация не важна. Работает так: делаю отправку блока данных-1 (5 байт), в ответ приходит несколько блоков данных. Пока реализовал чтение так (для проверки работоспособности):
Листинг программы
  1. int byteRecieved = serialPort1.BytesToRead;
  2. byte[] messByte = new byte[byteRecieved];
  3. serialPort1.Read(messByte, 0, byteRecieved);
Все работает, данные считываются, потом сохраняю их в файл. Подскажите, пожалуйста: какой алгоритм лучше использовать для считывания данных побайтно, разбора данных и какими командами это лучше делать? Желательно с примерами кода (или ссылками на примеры), чтобы разобраться. Пока я алгоритм вижу так: 1.считывается первые 9 байт данных, сравниваются с данными в переменной (в неё записана последовательность первого ответа с устройства). Если совпадает, значит идет отправка данных. 2.Читаются следующие 9 байт данных. Проверяем, чтобы 9 и 3 байты совпадали данными констант (т.е. проверяем, что приняли правильно данные). 3.Читаем 1, 2 и 4, 5 байты (данные в формате short int). Пишем их в 2 массива. Какие методы лучше использовать для реализации?
Сорри, выше ошибся, не тот код вставил:
Листинг программы
  1. byte[] array = new byte[serialPort1.BytesToRead];
  2. serialPort1.Read(array, 0, serialPort1.BytesToRead);
  3. SetText(Encoding.ASCII.GetString(array));
Количество блоков данных я задаю. Т.е. для предыдущего примера можно сделать расчет размера буфера для приема данных/ Что-то вроде такого:
Листинг программы
  1. static void Main(string[] args)
  2. {
  3. int16 db = 9; //указываем длину одного блока
  4. int16 dd = 50; //задаем количество блоков
  5. int16 df = dd * db; //читаем размер буфера
  6. }
  7. byte[] array = new byte[df]; //в качестве размера буфера подставляем рассчитанный размер буфера
  8. serialPort1.Read(array, 0, serialPort1.BytesToRead); // читаем данные в буфер
Не совсем понимаю, по какому алгоритму грамотно обработать данные.

Решение задачи: «Разобрать данные с COM-порта»

textual
Листинг программы
  1.             int byteRecieved = serialPort1.BytesToRead;
  2.             byte[] messByte = new byte[byteRecieved];
  3.             serialPort1.Read(messByte, 0, byteRecieved);
  4.  
  5.             using (BinaryWriter bw = new BinaryWriter(new FileStream("data.dat", FileMode.Create, FileAccess.Write)))
  6.             {
  7.                 bw.Write(1000);
  8.             }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.143 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы