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 = "Подключен";
        }

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


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

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

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