Как открыть com порт
Перейти к содержимому

Как открыть com порт

  • автор:

Открытие COM-портов в модеме с HiLink прошивкой

Мы поговорим об открытие COM-портов в модеме с HiLink прошивкой и об ошибках возникающих при этом.

Важно. К компьютеру должен быть подсоединён ТОЛЬКО МОДЕМ, отключены ВСЕ ДРУГИЕ СЕТЕВЫЕ ПОДКЛЮЧЕНИЯ (локальные, кабель, Wi-Fi. ), установленные АНТИВИРУСЫ, включённые ФАЙРВОЛЫ, закрыть всё то, что может занимать порты (DC-Unlocker, Терминал и т.п.) и все Приложения и Процессы в Диспетчере задач, связанные с модемом (смотреть по названиям операторов и приложений).
Модем подключать через интерфейс порта USB 2.0 (В системном блоке подключаться к USB разъёмам на задней панели.)

Необходимо наличие в ОС драйвера — Fc Sеrial Driver

Нужно перевести HiLink-модем в режим с портами, но http://192.168.1.1/html/switchProjectMode.html или http://192.168.8.1/html/switchProjectMode.html (switchDebugMode.html) не работает:

Переключение устройства в Project/Debug mode (открывалка портов) скачать.

Внимание! Скрипт порты не откроет, если, по какой-либо причине, нет доступа к модему по сети.

Автоопределение в DC-Unlocker (Запуск от имени администратора) и нажать лупу, затем в Диспетчере устройств (ДУ) посмотреть порты. Если порты не появились, то закрываем DC-Unlocker, пере подключаем модем и снова запускаем DC-Unlocker.

Если вышеописанные способы не открыли порты, то надо удалить MobileBrServ, если установлена

mobilebrserv

и(или)
отключить Управление переключением во вторичную, рабочую USB-композицию в Windows, если включено и попробовать ещё раз.
При отсутствии положительного результата —>

Восстановление модемов не аварийным методом (без иголки) (Под сполейром будет метод как для модемов с прошивкой HILINK, так и STICK

Запустить Диспетчер задач и в нём закрыть все Приложения и Процессы, связанные с модемом (смотреть по названиям операторов и приложений), а также всё то, что может занимать порты (Терминалы, Операторские утилиты и т.п.).

Перевести модем в режим загрузки:

1. Удалить все драйверы для модемов и программы управления модемами (модем отсоединён);

2. Перезагрузка;

3. Установить на компьютер без подключённого модема эти драйверы:
HUAWEI DataCard Driver 6.00.08.00 (иногда, в более ранние ОС, лучше устанавливать HUAWEI DataCard Driver 5.05.01.00);
Fc Sеrial Driver;
set hilink switch (Удалить MobileBrServ, если ранее была установлена. Выполнить скрипт set_hilink_switch_01.exe, выбрать «1 — включить переключение» и перезагрузить систему)

4. Подключить модем без сим-карты и флеш-карты (microSD), на предложение установить программное обеспечение с модема, нажать на кнопку «ОТМЕНА» и дождаться установки ранее установленных драйверов, если ОС предложит перезагрузиться —> перезагрузиться, нет —> нет.
Желательно: в DC-Unlocker (Запуск от имени администратора) определить модем (выбрать «Автоопределение» и нажать лупу, если в Диспетчере устройств (ДУ) порты не появились —> закрыть DC-Unlocker —> переподключить модем —> и снова определить DC-Unlocker-ом. Если порты появились, но пишет: «Модем не найден!», то, просто, перезапустить DC-Unlocker или вторично нажать лупу. ) —> закрыть DC-Unlocker и продолжить;

5. Открыть Терминал нажать «Порт«, выбрать PC UI Interface, нажать на кнопку «Закрыт«, в случае соединения программы терминал с этим портом, кнопка «Закрыт» переименуется в кнопку «Открыт«.
а) Выполнить две АТ команды ( через меню Терминала «Действия» ): AT^CURC=0 затем ATE1.
б) Набрать последовательно команды: AT^DATALOCK=»код v201(или v2)», затем AT^GODLOAD в поле «Отправить«, нажимая кнопку «Отправить«. Закрыть терминал, посмотреть Диспетчер Устройств на наличие портов.
в) Код v201 (или v2) можно получить у нас.

Перевести модем в режим загрузки:
1. Повторить все то же самое, как и по Код 12 и 16

Как научиться открывать сетевые порты в Windows 7 и 10

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

В нашей новой статье мы кратко расскажем вам об общем назначении портов и как их разблокировать в ОС Windows, приведя несколько примеров.

Что такое «Порт» и зачем он нужен

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

При установке новой игры или другого софта по умолчанию происходит автоматическая проверка туннеля и подключение к серверу. Брандмауэр Windows выводит окно на экран с предложением о разрешении или запрете активности данной программы в сети. Если такового не наблюдается и ПО не хочет подключаться – нужно открыть его порт на компьютере.

Проверка статуса портов

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

  1. Открываем меню «Пуск/Программы/Стандартные» и выбираем программу «Командная строка».

Другой способ – введите «cmd» (без кавычек) в поисковую строку Пуска и нажмите «Enter».

  1. В открывшейся командной строке задаем команду «netstat –aon | more» без кавычек. Система отобразит состояние всех активных туннелей.

Смотрим на два последних столбца и находим нужный номер. Напротив номера выведен его статус:

  • Listening – идет опрос свободного порта системой. Он является открытым.
  • Established – идет передача данных, порт занят.
  • Close wait – процесс прекращения передачи данных.
  • Time wait – порт не отвечает.
  1. Открыв «Диспетчер задач» комбинацией клавиш Ctrl+Alt+Delete, вы сможете узнать, чем занят нужный порт, сопоставив его номер из консоли с идентификатором процесса.

Если требуемый порт отсутствует или занят – переходим к следующему пункту.

Открываем порт через Брандмауэр Windows

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

Процесс деблокирования выглядит так:

  1. Заходим в «Пуск/Панель управления/Система и безопасность» и находим «Брандмауэр ЗащитникаWindows» (либо «Брандмауэр Windows»).
  2. Выбираем пункт «Дополнительные параметры».

  1. В этом меню содержится список процессов, использующих каналы для подключения к серверам. Для того чтобы открыть порты в брандмауэре, нажимаем на «Правила для входящих подключений» и «Создать правило».
  2. Если вам известно, какой именно канал вам нужен, то указываем пункт «Для порта».

Ради примера попробуем открыть порт 27015 для сетевого шутера Counter-Strike 1.6.

Выбираем «Разрешить подключение» и жмем «Далее».

Выделяем галочками все варианты.

Вписываем имя программы, например, «CS 1.6» и нажимаем кнопку «Готово».

Созданное нами правило появится в общем списке. Теперь порт для игры открыт. Этот способ является стандартным и он идентичен для последних версий Windows, начиная с «семерки».

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

По тому же принципу вы можете открыть порт 8080 и 443, которые отвечают за передачу данных через http-сервер и https-сервер повышенной безопасности для онлайн-игр, сервисов, кассовых аппаратов и прочих услуг.

Открываем порт 80

Данный канал является главным для передачи данных между ПК и Всемирной сетью по протоколу http. Порт 80 не освободить вышеописанным способом, так как он контролируется специальным системным драйвером http.sys.

На этот раз мы обратимся к командной строке.

  1. Открываем командную строку известным способом и вводим команду «netsh http «add iplisten ipaddress=::» (без кавычек) и жмем «Enter».
  2. Второй шаг – это внесение изменения в файл блокнота hosts, находящийся по пути «C:\Windows\System32\drivers\etc\hosts». В нем необходимо добавить запись «127.0.0.1 local» (без кавычек). После этого перезагрузить свой ПК и проверить статус порта 80.
  1. Если это не помогло, то открываем меню «Пуск/Панель управления/Программы/Программы и компоненты» и нажимаем на «Включение или отключение компонентовWindows».
  2. Отключаем службы IIS, снимая все галочки с пунктов.

Перезагружаем компьютер и опять проверяем доступность 80 порта.

Применение стороннего софта CurrPorts

В рассмотренных выше способах использовались лишь стандартные ресурсы Windows, однако, в Сети есть несколько программ для открытия портов на Windows. Первой на обзоре мы выбрали «CurrPorts» версии 2.51 от разработчика Nir Sofer. Она помогает узнать все свои активные порты на Windows и пригодится для их быстрого освобождения, удаляя ненужный или опасный процесс. Программа бесплатна и легка в освоении.

Для ее использования:

  1. Переходим на сайт разработчика https://www.nirsoft.net/utils/cports.html и скачиваем программу и русификатор на ПК. Русификатор распаковываем в папку с файлами ПО.
  1. Программа предлагает массу информации о процессе, включая занимаемый им порт.

На скриншоте мы видим, что антивирус Avast занимает два порта: 80 и 443. При желании мы можем закрыть данное соединение из контекстного меню или панели инструментов программы (но делать этого не советуем по понятным причинам). Закрывайте только те ненужные процессы, назначение которых вам известно.

Преимущества

  • Бесплатная программа на русском языке.
  • Не требует установки.
  • Отображает все запущенные процессы и занимаемые ими порты в реальном времени.
  • Предоставляет самую подробную информацию.
  • Можно освобождать порты от одного или всех процессов.
  • Классический понятный интерфейс.

Недостатки

  • Не выявлено.

Работаем с UPnP Wizard

Простая программка для управления портами «UPnP Wizard», работающая почти со всеми модемами по технологии UPnP. Вам не составит труда посмотреть открытые порты в Windows и освободить самые необходимые из них. ПО бесплатно, но не поддерживает русский язык, что может осложнить управление для некоторых пользователей.

Начинаем работу с UPnP Wizard так:

  1. По ссылке https://www.xldevelopment.net/upnpwiz.php переходим на ресурс разработчиков и скачиваем ПО бесплатно.
  2. Устанавливаем и запускаем UPnP Wizard. Перед пользователем появятся все активные порты и занимаемые их процессы.

Для примера попробуем открыть порт 7777, который нужен для обмена данными с сервером игры SAMP (San Andreas Multiplayer Mod). Нажимаем на зеленый плюс панели инструментов.

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

  1. В окне создания порта вводим произвольное название (например, SAMP), номер порта (7777) и тип протокола (TCP). После этого подтверждаем данные кнопкой «ОК».

В таблице появится новый пункт с открытым портом для игры SAMP.

Преимущества

  • Бесплатная лицензия.
  • Красивый интерфейс без нагромождений.
  • Работает со многими моделями роутеров, поддерживающих технологию UPnP.
  • Можно быстро открывать и освобождать порты.

Недостатки

  • Нет перевода на русский язык.
  • Малоинформативная сводка о запущенных процессах.

Онлайн-сервис 2ip.ru

Ну и напоследок мы воспользуемся простым онлайн-сервисом «2ip.ru», предназначенным для отображения разной полезной информации на компьютере, включая сетевые порты.

Для посещения сервиса:

  1. Открываем интернет-браузер и переходим по ссылке https://2ip.ru/check-port.
  2. В свободную строку вводим номер порта, например, 25565 и нажимаем «Проверить».

  1. Как видно на скрине выше, туннель 25565 уже занят. Таким образом вы сможете проверить любой канал на занятость.

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

Подводим итоги вышесказанному

В этой статье мы постарались дать вам ответ на вопрос: «как открыть порты на Windows 7 и 10?». Для этого нами было выбрано и описано самые востребованные способы решения данной проблемы с примерами.

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

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

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

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

Как правильно открыть COM порт

На столе лежит Gsm модуль RX 101 от «Телеофис», хочу пообщаться с ним из кода, но не получается.

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

А теперь что происходит когда я пытаюсь обратиться к модулю из кода — ничего! То есть лампочка RX мигает, но ответа нет. При чем после закрытия программы которая успешно общалась с модулем, я могу из кода обращаться и модуль отвечает. Вот такая магия. Я полагаю что программы открывают порт с какими-то параметрами которые я не указываю в коде, но понятия не имею какие.

Вот код который пытается связаться с модулем:

В данном случае необходимо установить кроме основных параметров инициализации СОМ порта еще и дополнительные

так как по умолчанию этот параметр установлен в None . Более детально про этот параметр можно посмотреть здесь.

Так же иногда могут возникать ситуации когда устройство долго отвечает на запрос(дольше стандартных значений). В таких случаях нужно изменять время ответа (искать в документации или экспериментировать с увеличением значений)

Я встречал устройства у которых время ответа по умолчанию равнялось 10с.

А вообще, в подобных ситуациях, когда не получается опросить устройство по СОМ порту и у вас есть родная программа опроса, запускать снифер СОМ-порта и смотреть какие основные и дополнительные параметры порта устанавливает эта программа.

COM-порт в Windows (программирование)

  Этот текст надо викифицировать. Пожалуйста, отформатируйте его согласно рекомендациям.
Логотип Википедии

Написать программу, управляющую устройством через COM-порт, для MS-DOS не так сложно. С платформой Win32 дело обстоит сложнее. Но только на первый взгляд. Конечно напрямую работать с регистрами портов нельзя, Windows это не позволяет, зато можно не обращать внимания на тонкости различных реализаций (i8251, 16450, 16550A) и не возиться с обработкой прерываний.

Содержание

Открытие порта [ править ]

С последовательными и параллельными портами в Win32 работают как с файлами. Для открытия порта используется функция CreateFile . Эта функция предоставляется Win32 API. Ее прототип выглядит так:

lpFileName [ править ]

Указатель на строку с именем открываемого или создаваемого файла. Формат этой строки может быть очень «хитрым». В частности можно указывать сетевые имена для доступа к файлам на других компьютерах. Можно открывать логические разделы или физические диски и работать в обход файловой системы.

Последовательные порты имеют имена «COM1», «COM2», «COM3», «COM4», «COM5», «COM6», «COM7», «COM8», «COM9». Для доступа к портам, чей номер больше 9, необходимо указывать имя порта как «\\.\COMx», где x — номер порта. Например, «\\.\COM72» (в нотации языка C/C++ строка будет выглядеть «\\\\.\\COM72»). Такой синтаксис подходит для любого номера порта. Точно так же они назывались в MS-DOS. Параллельные порты называются «LPT1», «LPT2» и так далее.

dwDesiredAccess [ править ]

Задает тип доступа к файлу. Возможно использование следующих значений:

  • 0 Опрос атрибутов устройства без получения доступа к нему.
  • GENERIC_READ Файл будет считываться.
  • GENERIC_WRITE Файл будет записываться.
  • GENERIC_READ|GENERIC_WRITE Файл будет и считываться и записываться.

dwShareMode [ править ]

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

lpSecurityAttributes [ править ]

Задает атрибуты защиты файла. Поддерживается только в Windows NT. Однако при работе с портами должен в любом случае равняться NULL .

dwCreationDistribution [ править ]

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

dwFlagsAndAttributes [ править ]

Задает атрибуты создаваемого файла. Также управляет различными режимами обработки. При работе с портом этот параметр должен быть или равным 0 , или FILE_FLAG_OVERLAPPED . Нулевое значение используется при синхронной работе с портом, а FILE_FLAG_OVERLAPPED при асинхронной, или, другими словами, при фоновой обработке ввода/вывода. Подробнее про асинхронный ввод/вывод я расскажу позже.

hTemplateFile [ править ]

Задает описатель файла-шаблона. При работе с портами всегда должен быть равен NULL .

При успешном открытии файла, в данном случае порта, функция возвращает дескриптор ( HANDLE ) файла. При ошибке [[| INVALID HANDLE VALUE ]]. Код ошибки можно получитить вызвав функцию [[| GetLastError ]].

Закрытие порта [ править ]

Открытый порт должен быть закрыт перед завершением работы программы. В Win32 закрытие объекта по его дескриптору выполняет функция CloseHandle :

При успешном завершении функция возвращает не нулевое значение, при ошибке нуль.

Пример открытия/закрытия на языке C [ править ]

В данном примере открывается порт СОМ2 для чтения и записи, используется синхронный режим обмена. Проверяется успешность открытия порта, при ошибке выводится сообщение и программа завершается. Если порт открыт успешно, то он закрывается.

Структура DCB [ править ]

Основные параметры последовательного порта описываются структурой DCB . Временные параметры — структурой COMMTIMEOUTS . Существует еще несколько информационных и управляющих структур, но они используются реже. Настройка порта заключается в заполнении управляющих структур и последующем вызове функций настройки.

Основную информацию содержит структура DCB :

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

DCBlength [ править ]

Задает длину, в байтах, структуры DCB . Используется для контроля корректности структуры при передаче ее адреса в функции настройки порта.

BaudRate [ править ]

Скорость передачи данных. Возможно указание следующих констант: CBR_110, CBR_300, CBR_600, CBR_1200, CBR_2400, CBR_4800, CBR_9600, CBR_14400, CBR_19200, CBR_38400, CBR_56000, CBR_57600, CBR_115200, CBR_128000, CBR_256000 . Эти константы соответствуют всем стандартным скоростям обмена. На самом деле, это поле содержит числовое значение скорости передачи, а константы просто являются символическими именами. Поэтому можно указывать, например, и CBR_9600 , и просто 9600 . Однако рекомендуется указывать символические константы, поскольку при компиляции программы проверяется корректность их имен.

fBinary [ править ]

Включает двоичный режим обмена. Win32 не поддерживает недвоичный режим, поэтому данное поле всегда должно быть равно 1 , или логической константе TRUE (что предпочтительней). В Windows 3.1, если это поле было равно FALSE , включался текстовый режим обмена. В этом режиме поступивший на вход порта символ, заданный полем EofChar , свидетельствовал о конце принимаемых данных.

fParity [ править ]

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

fOutxCtsFlow [ править ]

Включает режим слежения за сигналом [[| CTS ]]. Если это поле равно [[| TRUE ]] и сигнал [[| CTS ]] сброшен, передача данных приостанавливается до установки сигнала CTS . Это позволяет подключеному к компьютеру прибору приостановить поток передаваемой в него информации, если он не успевает ее обрабатывать.

fOutxDsrFlow [ править ]

Включает режим слежения за сигналом [[| DSR ]]. Если это поле равно TRUE и сигнал DSR сброшен, передача данных прекращается до установки сигнала DSR .

fDtrControl [ править ]

Задает режим управления обменом для сигнала [[| DTR ]]. Поле может принимать следующие значения:

  • DTR_CONTROL_DISABLE         Сигнал DTR снимается при открытии порта. У открытого порта может быть изменён функцией EscapeCommFunction.
  • DTR_CONTROL_ENABLE          Сигнал DTR устанавливается при открытии порта. У открытого порта может быть изменён функцией EscapeCommFunction.
  • DTR_CONTROL_HANDSHAKE   Сигнал DTR автоматически устанавливается/снимается в ходе работы с портом. Не может быть изменён функцией EscapeCommFunction.

fDsrSensitivity [ править ]

Задает чувствительсть коммуникационного драйвера к состоянию линии [[| DSR ]]. Если это поле равно TRUE , то все принимаемые данные игнорируются драйвером (коммуникационный драйвер расположен в операционной системе), за исключением тех, которые принимаются при установленом сигнале DSR .

fTXContinueOnXoff [ править ]

Задает, прекращается ли передача при переполнении приемного буфера и передаче драйвером символа XoffChar . Если это поле равно TRUE , то передача продолжается, несмотря на то, что приемный буфер содержит более XoffLim символов и близок к переполнению, а драйвер передал символ XoffChar для приостановления потока принимаемых данных. Если поле равно FALSE , то передача не будет продолжена до тех пор, пока в приемном буфере не останется меньше XonLim символов и драйвер не передаст символ XonChar для возобновления потока принимаемых данных. Таким образом это поле вводит некую зависимость между управлением входным и выходным потоками информации.

fOutX [ править ]

Задает использование XON/XOFF управления потоком при передаче. Если это поле равно TRUE , то передача останавливается при приеме символа XoffChar , и возобновляется при приеме символа XonChar .

fInX [ править ]

Задает использование XON/XOFF управления потоком при приеме. Если это поле равно TRUE , то драйвер передает символ XoffChar , когда в приемном буфере находится более XoffLim , и XonChar , когда в приемном буфере остается менее XonLim символов.

fErrorChar [ править ]

Указывает на необходимость замены символов с ошибкой четности на символ задаваемый полем ErrorChar . Если это поле равно TRUE , и поле fParity равно TRUE , то выполняется замена.

fNull [ править ]

Определяет действие выполняемое при приеме нулевого байта. Если это поле TRUE , то нулевые байты отбрасываются при передаче.

fRtsControl [ править ]

Задает режим управления потоком для сигнала RTS. Поле может принимать следующие значения:

  • RTS_CONTROL_DISABLE          Сигнал RTS снимается при открытии порта. У открытого порта может быть изменён функцией EscapeCommFunction.
  • RTS_CONTROL_ENABLE           Сигнал RTS устанавливается при открытии порта. У открытого порта может быть изменён функцией EscapeCommFunction.
  • RTS_CONTROL_HANDSHAKE   Сигнал RTS автоматически устанавливается/снимается в ходе работы с портом. Не может быть изменён функцией EscapeCommFunction. Сигнал RTS устанавливается, когда приемный буфер заполнен менее, чем на половину, и снимается, когда буфер заполняется более чем на три четверти.
  • RTS_CONTROL_TOGGLE          Задаёт, что сигнал RTS установлен, когда есть данные для передачи. Когда все символы из передающего буфера переданы, сигнал снимается.

fAbortOnError [ править ]

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

fDummy2 [ править ]

Зарезервировано и не используется.

wReserved [ править ]

Не используется, должно быть установлено в 0 .

XonLim [ править ]

Задает минимальное число символов в приемном буфере перед посылкой символа XON .

XoffLim [ править ]

Определяет максимальное количество байт в приемном буфере перед посылкой символа XOFF . Максимально допустимое количество байт в буфере вычисляется вычитанием данного значения из размера приемного буфера в байтах.

ByteSize [ править ]

Определяет число информационных бит в передаваемых и принимаемых байтах. Число информационных бит может быть в диапазоне от 4 до 8 .

Parity [ править ]

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

  • EVENPARITY     Дополнение до четности
  • MARKPARITY     Бит четности всегда 1
  • NOPARITY         Бит четности отсутствует
  • ODDPARITY       Дополнение до нечетности
  • SPACEPARITY   Бит четности всегда 0

StopBits [ править ]

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

  • ONESTOPBIT     Один стоповый бит
  • ONE5STOPBIT   Полтора стоповых бита
  • TWOSTOPBITS     Два стоповых бита

XonChar [ править ]

Задает символ XON используемый как для приема, так и для передачи. Обычно 0x11 ( 17 ).

XoffChar [ править ]

Задает символ XOFF используемый как для приема, так и для передачи. Обычно 0x13 ( 19 ).

ErrorChar [ править ]

Задает символ, использующийся для замены символов с ошибочной четностью.

EofChar [ править ]

Задает символ, использующийся для сигнализации о конце данных.

EvtChar [ править ]

Задает символ, использующийся для сигнализации о событии.

wReserved1 [ править ]

Зарезервировано и не используется.

Замечания [ править ]

Если структура DCB содержит конфигурацию для последовательного порта, совместимого с 8250, то к значениям полей ByteSize и StopBits применяются следующие ограничения:

  • Количество информационных бит должно быть от 5 до 8 .
  • Не допускается использование 5 информационных бит с 2 стоповыми битами, также как 6 , 7 или 8 информационных бит с 1,5 стоповыми битами.

Заполнение структуры DCB [ править ]

Структура COMMTIMEOUTS [ править ]

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

Чтобы операция ReadFile немедленно возвращала управление со всеми полученными данными (асинхронный режим) следует задавать следующие значения:

ReadTotalTimeoutMultiplier — Множитель, используемый, чтобы вычислить полный период времени простоя для операций чтения, в миллисекундах. Для каждой операции чтения, это значение умножается на затребованное число байтов, которые читаются.

ReadTotalTimeoutConstant — Константа, используемая, чтобы вычислить полный (максимальный) период времени простоя для операций чтения, в миллисекундах. Для каждой операции чтения, это значение добавляется к произведению члена структуры ReadTotalTimeoutMultiplier и прочитанного числа байтов.

Значение нуля и для члена ReadTotalTimeoutMultiplier, и для члена ReadTotalTimeoutConstant указывает, что полное время простоя не используются для операций чтения.

WriteTotalTimeoutMultiplier — Множитель, используемый, чтобы вычислить полный период времени простоя для операций записи, в миллисекундах. Для каждой операции записи, это значение умножается на число записываемых байтов.

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

Значение нуля и для члена WriteTotalTimeoutMultiplier, и для члена WriteTotalTimeoutConstant указывает, что полное время простоя не используются для операций записи.

Заполнение структуры COMMTIMEOUTS [ править ]

Вариант 1: (максимальная задержка при чтении и записи = TIMEOUT)

Вариант 2: Инициализация значениями (без задержки при чтении)

Пример настройки порта [ править ]

Структура COMMPORT [ править ]

Стандартный диалог настройки порта [ править ]

Для настройки параметров COM — порта может быть вызвано штатное окно Windows. Вызов осуществляется функцией CommConfigDialog(), которая в качестве параметров принимает имя настраиваемого порта, хендл родительского окна и указатель на структуру COMMCONFIG. Следует отметить, что для корректного вызова окна, структура COMMCONFIG должна быть заполнена значениями заранее. Настройку структуры можно выполнить вручную или при помощи функции GetCommConfig(). Например:

Выделение памяти для структуры COMMPORT [ править ]

Прием и передача данных [ править ]

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

Предпоследний параметр dwFlagsAndAttributes должен быть равен 0. После успешного открытия порта, данные могут быть считаны или записаны при помощи функций ReadFile() и WriteFile().

Функция ReadFile/WriteFile осуществляет чтение/запись из файла (устройства) начиная с текущей позиции после окончания чтения обновляет указатель в файле.

Недостатком этого способа является то, что вызывая функцию ReadFile(), мы не знаем есть ли данные для чтения. Можно циклически проверять их наличие, но это приводит к дополнительным расходам времени ЦП. Поэтому на практике часто удобней использовать асинхронный режим. Для этого при вызове функции CreateFile() параметр dwFlagsAndAttributes должен быть равен FILE_FLAG_OVERLAPPED.

Далее, необходимо настроить реакцию порта на события при помощи функции SetCommMask() и используя функции WaitCommEvent() и WaitForSingleObject() ожидать событие или тайм аут. Например:

Сброс порта [ править ]

Пример настройки порта и выполнения чтения/записи данных [ править ]

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

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

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