SerialPort в C#

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

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

Ребята помогите с несколькими примерами обработки входящих данных на COM port. просмотрел кучу разных примеров в гугле и так не понял не чего. Меня интересует как можно обработать массив данных поступающих на порт используя WinForm b serialport.read(byte), serialport.read(char), На порт приходят данные в таком формате с0 23 45 65 78 23 56 с1

Решение задачи: «SerialPort в C#»

textual
Листинг программы
  1. // При подключении к порту соединится с загрусчиком, считать сигнатуру и заполнить поля.
  2.         private void Boot_Init()
  3.         {
  4.             // Буфер данных
  5.             char[] Byte_Data = new char[16];
  6.             // Команда для подключения к загрузчику
  7.             char[] Com_S = new char[] { 'S' };
  8.             // Команда получить сигнатуру МК
  9.             char[] Com_s = new char[] { 's' };
  10.  
  11. // Если выбран программный переход к загрузчику.
  12.             if (Prog_Boot.Checked == true)
  13.             {
  14.                 // Конвертация приклодной команды в char массив для вывода
  15.                 for (int i = 0; i < Comanda.Text.Length; i++)
  16.                 {
  17.                     Byte_Data[i] = Convert.ToChar(Comanda.Text[i]);
  18.                 }
  19.  
  20.                 // Передача приклодной команды основной программе
  21.                 serialPort1.Write(Byte_Data, 0, Comanda.Text.Length);
  22.  
  23.                 // Индикация состояния работы программы
  24.                 Info.Text = "Команда";
  25.  
  26.                 // Установка времени ожидания перехода МК от основной программы к загрузчику
  27.                 serialPort1.ReadTimeout = (Convert.ToInt32(Seconds.Text, 16) * 1000);
  28.  
  29.                 try
  30.                 {
  31.                     // Чтение ответа от загрузчика
  32.                     serialPort1.Read(Byte_Data, 0, Byte_Data.Length);
  33.  
  34.                     // Если переход к загрузчику удачный, проверяем на правильный ответ
  35.                     if (Byte_Data[0] != 0xAA)
  36.                     {
  37.                         // Если ответ не верный (Скорее всего неправильный битрейт)
  38.                         // Вывод состояния работы программы, закрыть порт и выйти из функции
  39.                         Info.Text = "Нет ответа";
  40.                         ErrorCOM();
  41.                         return;
  42.                     }
  43.                 }
  44.                 catch
  45.                 {
  46.                     // Выход по таймауту
  47.                     // Вывод состояния работы программы, закрыть порт и выйти из функции
  48.                     Info.Text = "Нет ответа";
  49.                     ErrorCOM();
  50.                     return;
  51.                 }
  52.             }
  53.  
  54. // Подключение к загрузчику            
  55.  
  56.             // таймаут пол секунды
  57.             serialPort1.ReadTimeout = 500;
  58.             // Передать команду подключения к загрузчику
  59.             serialPort1.Write(Com_S, 0, 1);
  60.  
  61.             try
  62.             {
  63.                 // Получить ответ (Без разницы какой)
  64.                 serialPort1.Read(Byte_Data, 0, Byte_Data.Length);
  65.             }
  66.             catch
  67.             {
  68.                 // Выход по таймауту
  69.                 // Вывод состояния работы программы, закрыть порт и выйти из функции
  70.                 Info.Text = "Нет ответа";
  71.                 ErrorCOM();
  72.                 return;
  73.             }
  74.  
  75.             // таймаут пол секунды
  76.             serialPort1.ReadTimeout = 500;
  77.  
  78.             // Команда на получение сигнатуры
  79.             serialPort1.Write(Com_s, 0, 1);
  80.  
  81.             // Чтение из порта
  82.             serialPort1.Read(Byte_Data, 0, Byte_Data.Length);
  83.  
  84.             try
  85.             {
  86.                 // Если сигнатура от Mega8 вывести значения
  87.                 if ((Byte_Data[0] == 0x07) & (Byte_Data[1] == 0x93))
  88.                 {
  89.                     Chip_Signatura.Text = "1E 93 07";
  90.                     Chip_type.Text = "ATMega8";
  91.                     Chip_flash.Text = "8";
  92.                 }
  93.                 else
  94.                 {
  95.                     // Выход по таймауту
  96.                     // Вывод состояния работы программы, закрыть порт и выйти из функции
  97.                     Info.Text = "Нет ответа";
  98.                     ErrorCOM();
  99.                     return;
  100.                 }
  101.  
  102.             }
  103.             catch
  104.             {
  105.                 // Выход по таймауту
  106.                 // Вывод состояния работы программы, закрыть порт и выйти из функции
  107.                 Info.Text = "Нет ответа";
  108.                 ErrorCOM();
  109.                 return;
  110.             }
  111.  
  112.             // Если все команды отработали нормально
  113.             Info.Text = "Подключен";
  114.         }

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


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

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

10   голосов , оценка 4.3 из 5

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

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

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