Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Кто шарит в COM портах?

James Toney Профи (886), на голосовании 2 месяца назад
Что значит открыть com порт? Я не в том смысле что в диспетчере задач кликнуть и посмотреть свойства, а в программном, как программы открывают com порт? Типа порт это какая то ячейка памяти к которой можно подключить устройства для обмена информацией?
Голосование за лучший ответ
Искусственный Интеллект (144803) 3 месяца назад
Там параметры открывают через драйвер для устройства. Например кассы указывая к примеру com_33
Денис, Боталов Оракул (95632) 3 месяца назад
Шлейф (расположенный на корпусе от порта воткни в плату. Если найдёшь куда
Денис Гуру (3808) 3 месяца назад
Открыть порт, это значить инициализировать переменную, через которую потом будете в порт записывать/читать. Настроить параметры порта (скорость, четность, и тд)
Причём открыть его сможете, если его другая программа не заняла дло вас.
Примерно как открыть файл.
James ToneyПрофи (886) 3 месяца назад
Ещё вопрос, когда подключаешь приборы по интерфейсу rs485 или rs232 в диспетчере задач появляется com порт. После этого любой программой конфигуратором можно открыть этот порт и посылать какие любо команды что бы устройство их приняло для дальнейшей работы.
А вопрос по поводу виртуальных com портов. Вот я к примеру с помощью программы com0com создал виртуальные парные com порты. Но программа конфигуратор не хочет открывать этот порт... Почему? Если грубо говоря com порт это переменная которую инициализирует программа, почему она не может инициализировать переменную виртуального com порта? Значит есть ещё какие то подводные камни?
Денис Гуру (3808) James Toney, Если есть физический ком-порт на материнке, он всегда есть в конфигураторе (диспетчере устройств). Если при подключении прибора по USB появляется COM порт, то это потому что устройство использует преобразователь USB-COM, ком порт (виртуальный) создаётся на время подключения устройства. А чтобы просто "виртуальный" ком порт был без физического подключения чего-либо (того же конвертера USB-COM), я про такое не знаю. Может конечно он программно реализован как файл например, но это редкость и зачем? Переменная виртуального ком-порта тоже должна как-то поддерживаться программно. Типа драйвера или ещё чего. При подключении переходника USB-COM система либо автоматически подключает драйвер, либо иногда надо установить такой драйвер в систему при первом использовании переходника.
James ToneyПрофи (886) 3 месяца назад
Может программу другую использовать?
Teslak Гуру (3245) 3 месяца назад
Открытие COM порта в программном контексте означает установление связи с этим портом, чтобы можно было отправлять и получать данные. Это не просто работа с какой-то ячейкой памяти, а взаимодействие с конкретным интерфейсом, который позволяет обмениваться данными между компьютером и внешними устройствами.


Что значит "открыть" COM порт?
Создание соединения: Когда программа "открывает" COM порт, она создает соединение с физическим или виртуальным портом на компьютере. Это позволяет программе использовать порт для обмена данными.

Инициализация ресурсов: Открытие порта также означает, что программа запрашивает доступ к этому порту у операционной системы и инициализирует необходимые ресурсы для передачи данных.

Настройка параметров: После открытия порта программа настраивает его параметры, такие как скорость передачи данных (baud rate), количество битов данных, паритет и стоп-биты, чтобы соответствовать требованиям подключенного устройства.

Как программы открывают COM порты?
Программы используют API операционной системы для открытия и управления COM портами. В Windows это делается через функции WinAPI. Вот общий процесс:

Запрос к операционной системе: Программа вызывает функцию, чтобы запросить доступ к порту. В Windows это функция CreateFile, которая открывает файл или устройство. В данном случае устройство — это COM порт.

 HANDLE hCom = CreateFile( 
"COM1", // Имя порта
GENERIC_READ | GENERIC_WRITE, // Разрешения на чтение и запись
0, // Нет совместного доступа
NULL, // Нет атрибутов безопасности
OPEN_EXISTING, // Открыть существующий порт
0, // Нет дополнительных флагов
NULL); // Нет шаблона атрибутов
Настройка порта: После открытия порта программа настраивает его параметры с помощью функции SetCommState, которая принимает параметры в структуре DCB (Device Control Block). Эта структура содержит информацию о скорости передачи данных, количестве битов и других настройках.

 DCB dcbSerialParams = {0}; 
dcbSerialParams.DCBlength = sizeof(dcbSerialParams);

// Получение текущих параметров порта
GetCommState(hCom, &dcbSerialParams);

// Установка новых параметров
dcbSerialParams.BaudRate = CBR_9600; // Пример: скорость передачи 9600
dcbSerialParams.ByteSize = 8; // Размер данных в байтах
dcbSerialParams.StopBits = ONESTOPBIT; // Один стоп-бит
dcbSerialParams.Parity = NOPARITY; // Без четности

// Применение настроек
SetCommState(hCom, &dcbSerialParams);

Передача данных: После настройки порта программа может использовать функции WriteFile для отправки данных и ReadFile для получения данных через открытый порт.
 WriteFile(hCom, "Hello, COM port!", 16, &bytesWritten, NULL); 
ReadFile(hCom, buffer, sizeof(buffer), &bytesRead, NULL);

Закрытие порта: Когда работа с портом завершена, программа закрывает его с помощью CloseHandle, чтобы освободить ресурсы.
 CloseHandle(hCom);  
Порт как интерфейс: COM порт можно рассматривать как интерфейс для передачи данных, а не просто как ячейку памяти. Он связывает компьютер с внешними устройствами и управляет обменом данных через физический или виртуальный канал.

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