SerialPort в C#
Формулировка задачи:
Ребята помогите с несколькими примерами обработки входящих данных на COM port. просмотрел кучу разных примеров в гугле и так не понял не чего. Меня интересует как можно обработать массив данных поступающих на порт используя WinForm b serialport.read(byte), serialport.read(char), На порт приходят данные в таком формате с0 23 45 65 78 23 56 с1
Решение задачи: «SerialPort в C#»
textual
Листинг программы
// При подключении к порту соединится с загрусчиком, считать сигнатуру и заполнить поля. private void Boot_Init() { // Буфер данных char[] Byte_Data = new char[16]; // Команда для подключения к загрузчику char[] Com_S = new char[] { 'S' }; // Команда получить сигнатуру МК char[] Com_s = new char[] { 's' }; // Если выбран программный переход к загрузчику. if (Prog_Boot.Checked == true) { // Конвертация приклодной команды в char массив для вывода for (int i = 0; i < Comanda.Text.Length; i++) { Byte_Data[i] = Convert.ToChar(Comanda.Text[i]); } // Передача приклодной команды основной программе serialPort1.Write(Byte_Data, 0, Comanda.Text.Length); // Индикация состояния работы программы Info.Text = "Команда"; // Установка времени ожидания перехода МК от основной программы к загрузчику serialPort1.ReadTimeout = (Convert.ToInt32(Seconds.Text, 16) * 1000); try { // Чтение ответа от загрузчика serialPort1.Read(Byte_Data, 0, Byte_Data.Length); // Если переход к загрузчику удачный, проверяем на правильный ответ if (Byte_Data[0] != 0xAA) { // Если ответ не верный (Скорее всего неправильный битрейт) // Вывод состояния работы программы, закрыть порт и выйти из функции Info.Text = "Нет ответа"; ErrorCOM(); return; } } catch { // Выход по таймауту // Вывод состояния работы программы, закрыть порт и выйти из функции Info.Text = "Нет ответа"; ErrorCOM(); return; } } // Подключение к загрузчику // таймаут пол секунды serialPort1.ReadTimeout = 500; // Передать команду подключения к загрузчику serialPort1.Write(Com_S, 0, 1); try { // Получить ответ (Без разницы какой) serialPort1.Read(Byte_Data, 0, Byte_Data.Length); } catch { // Выход по таймауту // Вывод состояния работы программы, закрыть порт и выйти из функции Info.Text = "Нет ответа"; ErrorCOM(); return; } // таймаут пол секунды serialPort1.ReadTimeout = 500; // Команда на получение сигнатуры serialPort1.Write(Com_s, 0, 1); // Чтение из порта serialPort1.Read(Byte_Data, 0, Byte_Data.Length); try { // Если сигнатура от Mega8 вывести значения if ((Byte_Data[0] == 0x07) & (Byte_Data[1] == 0x93)) { Chip_Signatura.Text = "1E 93 07"; Chip_type.Text = "ATMega8"; Chip_flash.Text = "8"; } else { // Выход по таймауту // Вывод состояния работы программы, закрыть порт и выйти из функции Info.Text = "Нет ответа"; ErrorCOM(); return; } } catch { // Выход по таймауту // Вывод состояния работы программы, закрыть порт и выйти из функции Info.Text = "Нет ответа"; ErrorCOM(); return; } // Если все команды отработали нормально Info.Text = "Подключен"; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д