Как прослушать com порт windows 10

Есть устройство работающее по СОМ порту + программа для нее. Существует программа которая умеет слушать СОМ порт как бы в фоне? Те программы что нахожу в инете захватывают СОМ порт и не позволяют запустить программу устройства которую нужно слушать. Либо запускается программа для прослушивания СОМ или программа для устройства

Программа для прослушивания СОМ порта

aftaev

Зачётный участник
Зачётный участник
Сообщения: 34009
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6177
Откуда: Казахстан.
Контактная информация:

Программа для прослушивания СОМ порта

Есть устройство работающее по СОМ порту + программа для нее.
Существует программа которая умеет слушать СОМ порт как бы в фоне? Те программы что нахожу в инете захватывают СОМ порт и не позволяют запустить программу устройства которую нужно слушать. Либо запускается программа для прослушивания СОМ или программа для устройства

Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет — ищет возможности, кто не хочет — ищет оправдание.
Найди работу по душе и тебе не придется работать.

Аватара пользователя

Serg

Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5179
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Программа для прослушивания СОМ порта

Сообщение

Serg » 02 апр 2015, 23:48

Есть такие: создают виртуальный порт, который указывается вместо настоящего, а настоящмй связывается с виртуальным через прогу-монитор. Помню что гуглится без проблем.

Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку…

aftaev

Зачётный участник
Зачётный участник
Сообщения: 34009
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6177
Откуда: Казахстан.
Контактная информация:

Re: Программа для прослушивания СОМ порта

Сообщение

aftaev » 02 апр 2015, 23:58

как их гуглить?

Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет — ищет возможности, кто не хочет — ищет оправдание.
Найди работу по душе и тебе не придется работать.

Аватара пользователя

Serg

Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5179
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Программа для прослушивания СОМ порта

Сообщение

Serg » 03 апр 2015, 01:53

О, для этого нужно обладать сокровенными знаниями и знать тайные заклинания, которые передаются только от дедов внукам, минуя отцов!
Но тебе так уж и быть скажу: «com port monitor». :)

Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку…

Аватара пользователя

selenur

Почётный участник
Почётный участник
Сообщения: 4579
Зарегистрирован: 21 авг 2013, 19:44
Репутация: 1614
Настоящее имя: Сергей
Откуда: Новый Уренгой
Контактная информация:

aftaev

Зачётный участник
Зачётный участник
Сообщения: 34009
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6177
Откуда: Казахстан.
Контактная информация:

Re: Программа для прослушивания СОМ порта

Сообщение

aftaev » 03 апр 2015, 10:37

UAVpilot писал(а):Но тебе так уж и быть скажу: «com port monitor».

Это гениально, как же я не додумался :freak: Да, и кучу я уже накачал с подобным запросом. Либо платные, либо введите сотовый телефон, либо захватывают СОМ порт и ничего не работает ;)

Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет — ищет возможности, кто не хочет — ищет оправдание.
Найди работу по душе и тебе не придется работать.

aftaev

Зачётный участник
Зачётный участник
Сообщения: 34009
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6177
Откуда: Казахстан.
Контактная информация:

Re: Программа для прослушивания СОМ порта

Сообщение

aftaev » 03 апр 2015, 10:46

UAVpilot писал(а):Есть такие: создают виртуальный порт, который указывается вместо настоящего, а настоящмй связывается с виртуальным через прогу-монитор. Помню что гуглится без проблем.

как такие нагуглить без проблем?

Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет — ищет возможности, кто не хочет — ищет оправдание.
Найди работу по душе и тебе не придется работать.

masterlomaster

Новичок
Сообщения: 15
Зарегистрирован: 23 мар 2015, 16:23
Репутация: 3
Настоящее имя: Виктор
Откуда: Кыргызстан
Контактная информация:

Re: Программа для прослушивания СОМ порта

Сообщение

masterlomaster » 03 апр 2015, 12:00

Для того чтобы в системе создать виртуальный comport нужно в систему установить соответствующий системный драйвер, что не всегда удобно. Гораздо проще сделать платку разветвитель и слушать порты с помощью любой программы, которая работает с COM портами.
Причем распаивать всего нужно несколько проволок RX,TX и землю. Сам делал так и не раз. Можно слушать все, что проходит тройником, а если нужно разделять прием передачу, то ставим четыре разъема.

Вложения
full-duplex-cable.gif (12695 просмотров) <a class='original' href='./download/file.php?id=47258&sid=fd47b013e9413a5e0c69e0c6ffe44366&mode=view' target=_blank>Загрузить оригинал (18.12 КБ)</a>
half-duplex-cable.gif (12695 просмотров) <a class='original' href='./download/file.php?id=47259&sid=fd47b013e9413a5e0c69e0c6ffe44366&mode=view' target=_blank>Загрузить оригинал (14.32 КБ)</a>

Аватара пользователя

crazydnb

Опытный
Сообщения: 163
Зарегистрирован: 01 май 2013, 16:59
Репутация: 99
Откуда: Питер
Контактная информация:

Re: Программа для прослушивания СОМ порта

Сообщение

crazydnb » 03 апр 2015, 12:12

aftaev писал(а):

UAVpilot писал(а):Есть такие: создают виртуальный порт, который указывается вместо настоящего, а настоящмй связывается с виртуальным через прогу-монитор. Помню что гуглится без проблем.

как такие нагуглить без проблем?

пользовался такой прогой в машине для подключения нескольких программ к одному gps приемнику.
http://www.curioustech.net/xport.html

aftaev

Зачётный участник
Зачётный участник
Сообщения: 34009
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6177
Откуда: Казахстан.
Контактная информация:

Re: Программа для прослушивания СОМ порта

Сообщение

aftaev » 03 апр 2015, 13:42

masterlomaster писал(а):Гораздо проще сделать платку разветвитель и слушать порты с помощью любой программы, которая работает с COM портами.

есть малость сложность — у одного форумчанина есть нужным мне прибор, прошу его записать протокол общения между ПО и прибором. Сомневаюсь что он станет паять разные платки, со временем у него туго, да и не нужно оно ему ;)

Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет — ищет возможности, кто не хочет — ищет оправдание.
Найди работу по душе и тебе не придется работать.

Аватара пользователя

Serg

Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5179
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Программа для прослушивания СОМ порта

Сообщение

Serg » 03 апр 2015, 16:28

aftaev писал(а):Да, и кучу я уже накачал с подобным запросом. Либо платные, либо введите сотовый телефон, либо захватывают СОМ порт и ничего не работает ;)

Второй ссылкой предлагают http://www.serial-port-monitor.com/ она у меня даже на компе стоит и есть в бэкапе винды — это означает, что я ей пользовался и она признана годной. :)

Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку…

Запуск/остановка мониторинга последовательного порта, открытого другим приложением (доступно в версииях Professional и Company) Serial Port Monitor полностью совместим с Windows 10 (x32 и x64) Serial Port Monitor и все его драйверы имеют цифровую подпись Одновременный контроль неограниченного количества последовательных портов Возможность добавления нескольких портов для мониторинга в рамках одной сессии Поддерживает все виды COM-портов: стандартные встроенные порты, порты плат расширения, виртуальные программные последовательные порты, COM-порты Bluetooth, USB to SERIAL адаптеры и др. Мониторинг передачи данных и ее логирование Расширенный диалог отправки: легко отправлять различные типы данных, применять псевдонимы для быстрого набора текста и автоматизации, отправлять файлы и замыкать функции и команды, изменять параметры последовательного порта в процессе работы (доступно в версииях Professional и Company) Сбор данных в режиме реального времени Различные визуализаторы мониторинга: табличное представление, вид строки, дамп и терминал Логирование входящих и исходящих потоков данных Файл с данными можно разбить на несколько файлов или задать ему определенный размер Возможность экспорта необработанных данных в файл из терминального вида Разноцветная визуализация команд в табличном видовом представлении Любое программное/аппаратное обеспечение, работающее с последовательным портом, может контролироваться Возможность перехватывать и записывать все последовательные управляющие коды ввода/вывода (IOCTLs), отслеживая все их данные и параметры Настраиваемое логирование сессии мониторинга (несколько форматов временных меток, различные системы счисления, настраиваемая длина строки и т.д.) Удобное и гибкое управление сессией мониторинга: сохранение и загрузка всех данных мониторинга, функции экспорта и перенаправления в файл Экспорт сессии мониторинга (HTML, ASCII текст, Unicode текст, Exсel CSV) и автоматическое перенаправление в файл (Serial Port Monitor автоматически добавит в файл все данные мониторинга в режиме реального времени) Поддерживает копирование всех записанных данных в буфер обмена Поддерживает автоматическое добавление данных до и после передачи пакета Поддерживается полнодуплексный режим Визуализируется статус управляющих линий Уникальные инструменты фильтрации потока с пресетами Поддерживаются все скорости передачи данных Гибкая конфигурация: стоп-биты, управление потоком, контроль четности, биты данных, выделение и пр. Удобный гибкий интерфейс: программное обеспечение разработано специально для обеспечения легкого доступа к последовательным портам, никаких навыков программирования не требуется Раздел комментариев для табличного отображения Быстрая настройка фильтров на панели инструментов Если мониторинг неактивен, может быть создан новый файл перенаправления данных Статистика в строке состояния от первого до последнего подсвечивает IRP в виде «Таблица». В IRP появились подсказки по их расшифровке Фильтрация данных по портам Данные, которые приложение пыталось записать в порт, отображаются дополнительно к фактически записанным данным Автоматическую прокрутку для представления терминала можно отключить Опция командной строки позволяет продолжить запись в файл, вместо того, чтобы перезаписывать существующие данные

Показать еще 25 функцию(й)

В этой статье рассматривается проверка COM-портов на компьютере на примере преобразователя USB-COM серии UPort 1150.

Методы, описанные в этой статье, подойдут для проверки встроенных COM-портов на компьютере или COM-портов преобразователей интерфейсов, например USB-COM или USB-Ethernet, а также другого оборудования, которое требует установки драйвера виртуального COM-порта.

Содержание статьи:

  • Скачать PComm Lite
  • Как проверить RS-232 интерфейс?

    • Схема подключения внешнего устройства с RS-232
  • Как проверить RS-422 интерфейс?

    • Схема подключения внешнего устройства с RS-422
  • Как проверить RS-485 интерфейс?

    • Схема подключения внешнего устройства с RS-485
  • Подтягивающие и согласующие резисторы
  • Рекомендации по устранению неисправностей

Скачать PComm Lite

Для работы с СОМ портом нужна программа, которая позволит открыть СОМ порт и отправить в него данные. MOXA предлагает воспользоваться бесплатной утилитой PComm Lite.

Для проверки RS-232 можно воспользоваться простым способом: достаточно замкнуть контакты RX и TX между собой. Тогда все переданные данные будут приняты обратно.

Если у вас полный RS-232 или нужно использовать аппаратный контроль за передачей данных, тогда вам нужно распаять специальную заглушку. В ней должны быть соединены между собой следующие контакты:

После этого мы можем открыть СОМ порт через программу и отправить туда любые данные. Отправленные данные должны вернуться обратно в этот же порт.

На примере PComm Lite это будет выглядеть так.

Убедитесь, что COM-порт настроен на RS-232.

Откройте программу PComm Terminal Emulator, во вкладке Port Manager откройте СОМ порт, соответствующий вашему устройству. Скорость и другие параметры можно оставить по умолчанию.

Однако, если вы подключаете внешнее устройство к СОМ порту, эти параметры должны совпадать с параметрами внешнего устройства.

Мы отправили несколько единиц в СОМ порт и получили их обратно, также видим одинаковые значения счетчиков TX и RX, что подтверждает получение всех отправленных данных.

Если вы хотите отображать текст, который печатаете, то вам нужно включить функцию Local echo на вкладке Terminal при открытии порта. Важно: после включения функции Local echo, если вы замкнули TX и RX, то текст в терминале удвоится, потому что будет отображен вводимый символ и тот, который получен обратно.

Схема подключения внешнего устройства с RS-232:

Прямой кабель DTE-DCE (компьютер-модем)


Нуль-модемный кабель DCE-DCE (модем-модем)


Нуль-модемный кабель DTE-DTE (компьютер-компьютер)

Как проверить RS-422 интерфейс?

Для проверки RS-422 можно также воспользоваться простым способом: достаточно замкнуть контакты TD+ на RD+ и TD- на RD-. Тогда все переданные данные будут приняты обратно.

Убедитесь, что COM-порт настроен на RS-422.

В терминале видны данные, которые мы отправили в СОМ порт.

Схема подключения внешнего устройства с RS-422:

Как проверить RS-485 интерфейс?

Интерфейс RS-485 может быть реализован на 2 или 4 контактах.

Для варианта RS-485 с 4 контактами проверка сводится к тем же действиям что и в RS-422 с таким же подключением контактов TD+ на RD+ и TD- на RD.

Для варианта RS-485 с 2 контактами нужно использовать внешнее устройство для проверки работы. Это может быть второй порт UPort или заведомо исправное устройство с RS-485.

Убедитесь, что COM-порт настроен на RS-485 и правильно указано количество контактов.

Схема подключения внешнего устройства с RS-485:


Подтягивающие и согласующие резисторы

В некоторых моделях оборудования есть встроенные резисторы, которые обеспечивают правильную работу линий RS-422/485.

Согласующий резистор или терминатор 120 Ом – ставится в начале и конце линии для предотвращения отражения сигнала от конца линии и искажения полезного сигнала в RS-422/485.

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

Подтягивающие резисторы (pull high/low resistors) – предназначены для ограничения тока, протекающего по сигнальным цепям, и чтобы сделать состояние цифрового входа по умолчанию высоким или низким.

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

Цепь с подтягивающим резистором можно представить в виде делителя напряжения из двух резисторов — одного подтягивающего и другого на месте кнопки.

Логический вход имеет ёмкость относительно земли, что влияет на время нарастания или спада сигнала при размыкании кнопки. Время спада или нарастания — это время между размыканием кнопки и достижением сигнала порогового напряжения, при достижении которого логическим входом фиксируется изменение логического состояния с высокого «1» на низкий «0» или наоборот.

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

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

Обычно значения подтягивающих резисторов по умолчанию оптимальны, но если форма сигнала сильно искажена или данные передаются с ошибками, то вам следует изменить значения подтягивающих резисторов.

Ниже показан пример расположения переключателей для изменения значений подтягивающих резисторов.

Рекомендации по устранению неисправностей

Структурная схема подключения устройства с СОМ портом к ПК выглядит так:

Схема подключения на примере UPort

  1. Если вы настроили подключение, но оно у вас не работает, убедитесь, что ваш конвертер работает и настроен правильно. Рекомендации по проверке RS-232/422/485 даны выше.
  2. Проблема может быть в подключении к конечному устройству, проверьте распиновку конвертера и конечного устройства.
  3. Проблема может быть в отличающихся параметрах СОМ порта на конвертере и конечном устройстве: скорости, четности, типе интерфейса, протоколе данных и т.д.
  4. Также можно изменить номинал подтягивающих резисторов и добавить согласующий резистор (для RS-422/485).
  5. Проблема может быть в программном обеспечении, попробуйте использовать другое ПО для проверки, например PComm Lite.

Если у Вас есть вопросы по продукции МОХА, обращайтесь по телефону: +7 (495) 419-1201 или по e-mail: russia@moxa.pro

Терминальные программы получили довольно широкое распространение в среде радиолюбителей и не только. Все потому, что с их помощью очень удобно выполнять отладку или что-то настраивать. Они существенно упрощают работу и экономят время. 

Помимо этого, они позволяют посмотреть, что шлет контроллер в процессе работы.

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

ice_screenshot_20220202-215222

Содержание

  1. Какие терминальные программы выбрать
  2. Программа Terminal v1.9b by Bray
  3. Программа COM Port Toolkit 
  4. Терминал
  5. Прослушка
  6. Захват

Какие терминальные программы выбрать

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

Программа Terminal v1.9b by Bray

В первую очередь, рекомендуем обратить внимание на программу Terminal v1.9b by Bray. Она очень проста в освоении и интуитивно понятна. Интерфейс действительно очень удобный. Разберется даже новичок. 

В главном окне программы есть все инструменты, чтобы в один клик выполнить настройку скорости работы устройства, выбрать номер порта, отрегулировать доступные параметры передачи данных и запустить другие команды. 

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

term19

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

Из преимуществ данной программы можно также выделить возможность пользоваться таблицей ASCII, а еще можно вывести поток данных в виде удобного для визуального восприятия графика со значениями от 0 до 255.

ice_screenshot_20220202-215412

Также при желании вы можете самостоятельно прописать все необходимые скрипты, если хорошо владеете языком Pascal. 

Конечно, любой программный продукт не застрахован от глюков в процессе работы. Но в случае с данной программой их практически нет. Если не считать только небольшие «тормоза» при выводе информации в hex-кодах. 

Еще одним недостатком можно считать то, что разработчик прекратил выпускать обновления для Terminal v1.9b by Bray. Но текущая версия работает исправно и ее возможностей достаточно для решения текущих задач. 

Скачать программу Bray Terminal v1.9.

Программа COM Port Toolkit 

Разработчиком данного программного продукта является Михаил Голиков. 

Если сравнивать ее с первой программой, то она немного ей уступает. Однако есть и полезные «фишки» — например, с помощью этой программы можно выполнить перехват данных между софтом и физическим COM-портом. 

comporttoolkit

Программа имеет интуитивно понятный интерфейс и поддерживает несколько основных режимов работы. 

Терминал

Отображает логи обмена данных и обрабатывает пересылку с помощью макросов. В остальном обычный терминал.

Прослушка

В данном режиме вы можете «внаглую» подключить ПК между двумя активными устройствами: условно — передающей и принимающей «стороной». Программа дополнительно отображает логи, где прописаны по умолчанию время передачи и отправки.

Захват

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

Подобная функция встречается и в других программах (например, в Advanced Serial Port Monitor), однако услуга платная. В COM Port Toolkit режим «Захват» можно бесплатно попробовать даже в демонстрационной версии. 

Недостатки программы:

  • в режиме «Захват» нельзя отсортировать входящие и исходящие данные, чтобы они отображались в разных окнах;
  • отсутствует туториал по написанию скриптов;
  • после окончания 30-дневной демо-версии, чтобы пользоваться программой, нужно будет купить лицензию. 

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

Скачать последнюю версию COM Port Toolkit.

Помогла ли вам статья?

  • Download source code — 15.2 KB
  • Download compiled assembly — 7.52 KB

SerialPortListenerApp

Introduction

This is a basic sample of serial port (COM port) listening in C#. This application is connected to a GPS sending ASCII text for test, but the serial port listening part is all byte-oriented.

CodeProject is missing a simple serial port application. Serial port listening applications usually have this only as a part of a bigger solution, while this application does nothing else than list the available COM-ports, list the available baud rates for the selected COM-port, and starts sending the data. In this solution, a form converts the data to ASCII-text and displays it in a text box.

Using the code

The serial port handling code is placed in a class called SerialPortManager. This class contains methods to start and stop listening for data on the serial port.

Finding the installed serial ports

Rather than just assuming the number of serial ports, or leaving it up to the user to know this beforehand, the code finds the installed serial ports. A string array of serial ports is received through a call made in the constructor of the class SerialPortManager.

public SerialPortManager()
{
    
    _currentSerialSettings.PortNameCollection = 
            System.IO.Ports.SerialPort.GetPortNames();
    _currentSerialSettings.PropertyChanged += 
                       new System.ComponentModel.PropertyChangedEventHandler
                       (_currentSerialSettings_PropertyChanged);

    
    if (_currentSerialSettings.PortNameCollection.Length > 0)
        _currentSerialSettings.PortName = 
             _currentSerialSettings.PortNameCollection[0];
}

Updating baud rates supported by the selected device

When a serial port is selected by the user, a query for supported baud rates is done. Depending on the hardware, different collections of baud rates may be supported. The field dwSettableBaud from the COMMPROP structure is a join of all supported baud rates.

private void UpdateBaudRateCollection()
{
    _serialPort = new SerialPort(_currentSerialSettings.PortName);
    _serialPort.Open();

    
    object p = _serialPort.BaseStream.GetType().GetField("commProp", 
       BindingFlags.Instance | BindingFlags.NonPublic).GetValue(_serialPort.BaseStream);
    Int32 dwSettableBaud = (Int32)p.GetType().GetField("dwSettableBaud", 
       BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public).GetValue(p);

    _serialPort.Close();
    _currentSerialSettings.UpdateBaudRateCollection(dwSettableBaud);
}

Serial port settings

The class named SerialSettings contains the currently selected serial port settings, and also includes lists of alternatives for the different setting properties. Everything is data bound to the GUI.

Start listening to a serial port

The serial port is instantiated using the currently selected settings:

public void StartListening()
{
    
    if (_serialPort != null && _serialPort.IsOpen)
        _serialPort.Close();

    
    _serialPort = new SerialPort(
        _currentSerialSettings.PortName,
        _currentSerialSettings.BaudRate,
        _currentSerialSettings.Parity,
        _currentSerialSettings.DataBits,
        _currentSerialSettings.StopBits);

     
     _serialPort.DataReceived += 
         new SerialDataReceivedEventHandler(_serialPort_DataReceived);
     _serialPort.Open();
}

The actual serial port reading

The actual serial port reading runs in a threadpool. When data is received on the serial port, an event is raised and _serialPort_DataReceived is called.

void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    int dataLength = _serialPort.BytesToRead;
    byte[] data = new byte[dataLength];
    int nbrDataRead = _serialPort.Read(data, 0, dataLength);
    if (nbrDataRead == 0)
        return;
          
    
    if (NewSerialDataRecieved != null)
        NewSerialDataRecieved(this, new SerialDataEventArgs(data));
}

The received byte array is sent to those listening for the event. The class SerialDataEventArgs houses a byte array.

Stop listening

We stop listening by simply closing the serial port. Note that this might deadlock your UI-thread if you are using Invoke in the event handling in your form.

public void StopListening()
{
     _serialPort.Close();
}

To work around this possible deadlock, a BeginInvoke is needed. And, that is generally good practice as well.

if (this.InvokeRequired)
{
    
    
    this.BeginInvoke(new EventHandler<SerialDataEventArgs>(
       _spManager_NewSerialDataRecieved), new object[] { sender, e });
    return;
}

Summary

A rather simple sample in how to implement serial port listening has been provided.

Updates

  • 27 April 2010 — Code clean-up and getting < > to show in the article.
  • 10 May 2010 — Fixing some misspells in the article.

This member has not yet provided a Biography. Assume it’s interesting and varied, and probably something to do with programming.

  • Download source code — 15.2 KB
  • Download compiled assembly — 7.52 KB

SerialPortListenerApp

Introduction

This is a basic sample of serial port (COM port) listening in C#. This application is connected to a GPS sending ASCII text for test, but the serial port listening part is all byte-oriented.

CodeProject is missing a simple serial port application. Serial port listening applications usually have this only as a part of a bigger solution, while this application does nothing else than list the available COM-ports, list the available baud rates for the selected COM-port, and starts sending the data. In this solution, a form converts the data to ASCII-text and displays it in a text box.

Using the code

The serial port handling code is placed in a class called SerialPortManager. This class contains methods to start and stop listening for data on the serial port.

Finding the installed serial ports

Rather than just assuming the number of serial ports, or leaving it up to the user to know this beforehand, the code finds the installed serial ports. A string array of serial ports is received through a call made in the constructor of the class SerialPortManager.

public SerialPortManager()
{
    
    _currentSerialSettings.PortNameCollection = 
            System.IO.Ports.SerialPort.GetPortNames();
    _currentSerialSettings.PropertyChanged += 
                       new System.ComponentModel.PropertyChangedEventHandler
                       (_currentSerialSettings_PropertyChanged);

    
    if (_currentSerialSettings.PortNameCollection.Length > 0)
        _currentSerialSettings.PortName = 
             _currentSerialSettings.PortNameCollection[0];
}

Updating baud rates supported by the selected device

When a serial port is selected by the user, a query for supported baud rates is done. Depending on the hardware, different collections of baud rates may be supported. The field dwSettableBaud from the COMMPROP structure is a join of all supported baud rates.

private void UpdateBaudRateCollection()
{
    _serialPort = new SerialPort(_currentSerialSettings.PortName);
    _serialPort.Open();

    
    object p = _serialPort.BaseStream.GetType().GetField("commProp", 
       BindingFlags.Instance | BindingFlags.NonPublic).GetValue(_serialPort.BaseStream);
    Int32 dwSettableBaud = (Int32)p.GetType().GetField("dwSettableBaud", 
       BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public).GetValue(p);

    _serialPort.Close();
    _currentSerialSettings.UpdateBaudRateCollection(dwSettableBaud);
}

Serial port settings

The class named SerialSettings contains the currently selected serial port settings, and also includes lists of alternatives for the different setting properties. Everything is data bound to the GUI.

Start listening to a serial port

The serial port is instantiated using the currently selected settings:

public void StartListening()
{
    
    if (_serialPort != null && _serialPort.IsOpen)
        _serialPort.Close();

    
    _serialPort = new SerialPort(
        _currentSerialSettings.PortName,
        _currentSerialSettings.BaudRate,
        _currentSerialSettings.Parity,
        _currentSerialSettings.DataBits,
        _currentSerialSettings.StopBits);

     
     _serialPort.DataReceived += 
         new SerialDataReceivedEventHandler(_serialPort_DataReceived);
     _serialPort.Open();
}

The actual serial port reading

The actual serial port reading runs in a threadpool. When data is received on the serial port, an event is raised and _serialPort_DataReceived is called.

void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    int dataLength = _serialPort.BytesToRead;
    byte[] data = new byte[dataLength];
    int nbrDataRead = _serialPort.Read(data, 0, dataLength);
    if (nbrDataRead == 0)
        return;
          
    
    if (NewSerialDataRecieved != null)
        NewSerialDataRecieved(this, new SerialDataEventArgs(data));
}

The received byte array is sent to those listening for the event. The class SerialDataEventArgs houses a byte array.

Stop listening

We stop listening by simply closing the serial port. Note that this might deadlock your UI-thread if you are using Invoke in the event handling in your form.

public void StopListening()
{
     _serialPort.Close();
}

To work around this possible deadlock, a BeginInvoke is needed. And, that is generally good practice as well.

if (this.InvokeRequired)
{
    
    
    this.BeginInvoke(new EventHandler<SerialDataEventArgs>(
       _spManager_NewSerialDataRecieved), new object[] { sender, e });
    return;
}

Summary

A rather simple sample in how to implement serial port listening has been provided.

Updates

  • 27 April 2010 — Code clean-up and getting < > to show in the article.
  • 10 May 2010 — Fixing some misspells in the article.

This member has not yet provided a Biography. Assume it’s interesting and varied, and probably something to do with programming.

Понравилась статья? Поделить с друзьями:
  • Как прописать хосты в windows 10
  • Как просканировать реестр windows 7 на вирусы
  • Как пронумеровать страницы в ворде без титульного листа windows 10
  • Как прописать файлы dll в windows
  • Как просканировать реестр windows 10 на ошибки