COM порт Windows. SerialPort. C#.

Автор: | 14.03.2017

Всем привет!

В данном уроке мы откроем тему построения программы на C#(ОС Windows), предназначенную для взаимодействия с COM-портом системы. Данный порт и по сей день очень часто используется для передачи данных между внешними устройствами и ПК.

Оперировать данными COM порта можно при помощи готовых программ. Например, Terminal и COM Port Toolkit, которые Вы запросто сможете найти Вашим любимым поисковиком. Однако они позволяют лишь читать или передавать данные при помощи порта. Обрабатывать данные, отображать их в удобном для пользователя виде они не могут, потому что это не их основная задача. Каждое разрабатываемое устройство уникально, и поэтому, если Вы хотите создать законченный проект, который каким либо образом взаимодействует с пользователем при помощи ПК, рано или поздно возникает необходимость создания программы-интерфейса взаимодействия с пользователем. С помощью данной программы Вы сможете принимать/отправлять данные используя COM-порт, обрабатывать их, представлять в удобном пользователю виде.

Для создания данной программы, отлично подойдет среда Visual Studio и язык программирования C#, так как с их помощью можно не только непосредственно взаимодействовать с портом, но и построить удобный интерфейс(GUI) в очень сжатые сроки.

Приступим!

Работать с COM портом будем используя класс SerialPort. Данный класс принимает всю аппаратную часть интерфейса на себя, нам лишь необходимо настроить его и считывать/передавать данные используя буфер этого класса.

Для начала перечислим список доступных COM портов системы:

Теперь в списке ComPorts_comboBox, который является выпадающим списком comboBox, сохранены названия всех портов системы.

Читайте также  Программаторы AVR.

Создать экземпляр данного класса Вы можете как при помощи конструктора форм, так и при помощи кода, например так:

Настройка происходит следующим образом:

Здесь мы создаем новый экземпляр класса SerialPort, который будет работать с портом выбранным в ComPorts_comboBox. При создании мы задаем настройки порта, в данном случае мы выбираем скорость 38400, без контроля четности, с передачей по 8 бит данных и 1 стоп-бита.

Открыть COM порт мы можем следующим методом:

Поле Serial.isOpen позволяет проверить нам, открыт ли COM порт.

Работать с COM портом мы можем как по таймеру, с определенным интервалом, так и по событию DataReceived.

Принимать данные можно при помощи следующих методов:

  • Serial.Read(byte[] Buffer,int offset,int count) — считать count байт в массив Buffer, со смещением offset.

  • Serial.ReadByte() — считать один байт.

  • Serial.ReadChar() — считать один символ.

  • Serial.ReadExisting() — считать строкой все содержимое буфера.

  • Serial.ReadLine() — считать строку из буфера до символа Serial.NewLine .

  • Serial.ReadTo(String str) — считать содержимое буфера, до достижения строки str.

Для отправки данных в порт существуют методы:

  • Serial.Write(byte[] Buffer,int offset,int count)записать count байт массива Buffer, со смещением offset.

  • Serial.WriteLine(string text)записать строку text в порт.

По окончанию работы с COM портом, не забудьте закрыть его командой:

В принципе, данной информации вполне достаточно для самостоятельного создания приложения. Поэтому я предлагаю Вам попробовать создать его самостоятельно, и выложить результаты в комментариях.

Читайте также  STM32 для начинающих. Урок 5. Внешние прерывания STM32.

В следующем уроке создадим интерфейс, и продолжим нашу разработку.

Спасибо за внимание!

COM порт Windows. SerialPort. C#.: 5 комментариев

  1. Уведомление: COM порт Windows. SerialPort. C#.Visual Studio | MKPROG.RU

  2. Станислав

    Здравствуйте.
    Спасибо за код, он работает. Я только начинающий.Подскажите, пожалуйста. Как написать, чтобы в комбобоксе при включении выбирался автоматически последний выбранный порт?
    Спасибо.

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

      Здравствуйте!
      Сохраняйте его во внешнем файле или в настройках. А при запуске программы считывайте сохраненное значение

  3. Станислав

    У меня реализовано как в тексте
    ComPorts_comboBox.Items.Clear();
    foreach (string portName in SerialPort.GetPortNames())
    {
    ComPorts_comboBox.Items.Add(portName);
    }
    ComPorts_comboBox.SelectedIndex = 0;

    А как во внешнем файле или в настройках? У меня не получилось. Может. пример кода приведете

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

      Ищите в поисковике по запросу «c# настройки приложения»

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

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