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 = "Подключен";
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д