COM порт Windows. SerialPort. C#.Продолжение.

Автор: | 26.03.2017

Продолжим!

Для создания Windows приложения будем использовать Microsoft Visual Studio 2012. В более современных версиях Visual Studio всё должно работать аналогично. В версиях младше, следует проверить наличие компонента SerialPort.

Создаем новый проект Visual C# с графическим интерфейсом. Затем, открываем дизайнер форм и размещаем необходимые нам элементы. Я размещу ComboBox для отображения доступных COM портов системы, Button для подключения к порту ,Label для отображения принятых данных и компонент SerialPort для работы с COM портом.

У меня получилось так:

Так же не забудьте настроить свойства COM-порта (скорость передачи, чисто бит данных, число стоп-бит и т.д.), при необходимости, что так же делается в дизайнере форм.

В панели событий можете так же настроить обработку события DataReceived, которое происходит при каждом получении данных COM портом. Теперь перейдем к коду. Принцип работы с компонентом SerialPort можете посмотреть в предыдущем уроке.

 

Читайте также  GPS маячок. STM32

Вопросы по работе кода можете оставлять в комментариях.

COM порт Windows. SerialPort. C#.Продолжение.: 10 комментариев

  1. sim31

    В 2010 версии тоже есть. А вот в Дельфях нет, приходится инициализировать вручную длинным нудным кодом )))

    1. DamiKK Автор записи

      Да, в плане скорости разработки C# прекрасен)
      2010 студии под рукой не было)

  2. Антон

    Не работает. Создаю элементы, вставляю код. 17 ошибок. В чем может быть проблема?

  3. Александр

    Добрый день, только начал работать с C# при создании всех элементов формы их переименовывании и добавлении вашего кода вылетает основная ошибка в виде: «Имя SerialPort отсутствует в текущем контексте».
    Using SYSTEM.IO.Ports подключен

    1. DamiKK Автор записи

      Здравствуйте!
      Это означает что нет переменной с данным названием. Вы добавили на форму соответствующий компонент?

  4. Сергей

    Неужели при приеме данных у вас не возникает вот такая ошибка:
    Недопустимая операция в нескольких потоках: попытка доступа к элементу управления ‘label1’ не из того потока, в котором он был создан.

    Что бы обеспечить прием данных в C# вообще нужно вот такой сатанинский код писать

    private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
    this.Invoke(new EventHandler(DoUpdate)); // Что это такое вообще не понятно…
    }

    private void DoUpdate(object s, EventArgs e)
    {
    label1.Text = serialPort1.ReadExisting(); // И вот только теперь нормально считывается в label1
    }

    И этот код самое вменяемое, что мне удалось найти. Есть еще более извращенные методы, которые совсем для новичков не понятны

    1. DamiKK Автор записи

      Нет, ошибки не вылетало.
      Однако, Вы правы, вынести прием данных в отдельный поток — хорошая идея.
      Если этого не сделать, при получении данных, в моем случае, интерфейс программы просто подвисал, но без ошибок

  5. Андрей

    не обрабатывается событие click У кнопки.
    private void connectButton_Click(object sender, EventArgs e){
    connectButton.Text = «…»;
    }

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *