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