Opening serial port windows

Содержание
  1. How to Fix: Unable to open serial port error message
  2. April 2021 Update:
  3. Try using another cable.
  4. Hyperterminal
  5. Serial Port. Open Метод
  6. Определение
  7. Исключения
  8. Примеры
  9. Комментарии
  10. COM-порт в Windows (программирование)
  11. Содержание
  12. Открытие порта [ править ]
  13. lpFileName [ править ]
  14. dwDesiredAccess [ править ]
  15. dwShareMode [ править ]
  16. lpSecurityAttributes [ править ]
  17. dwCreationDistribution [ править ]
  18. dwFlagsAndAttributes [ править ]
  19. hTemplateFile [ править ]
  20. Закрытие порта [ править ]
  21. Пример открытия/закрытия на языке C [ править ]
  22. Структура DCB [ править ]
  23. DCBlength [ править ]
  24. BaudRate [ править ]
  25. fBinary [ править ]
  26. fParity [ править ]
  27. fOutxCtsFlow [ править ]
  28. fOutxDsrFlow [ править ]
  29. fDtrControl [ править ]
  30. fDsrSensitivity [ править ]
  31. fTXContinueOnXoff [ править ]
  32. fOutX [ править ]
  33. fInX [ править ]
  34. fErrorChar [ править ]
  35. fNull [ править ]
  36. fRtsControl [ править ]
  37. fAbortOnError [ править ]
  38. fDummy2 [ править ]
  39. wReserved [ править ]
  40. XonLim [ править ]
  41. XoffLim [ править ]
  42. ByteSize [ править ]
  43. Parity [ править ]
  44. StopBits [ править ]
  45. XonChar [ править ]
  46. XoffChar [ править ]
  47. ErrorChar [ править ]
  48. EofChar [ править ]
  49. EvtChar [ править ]
  50. wReserved1 [ править ]
  51. Замечания [ править ]
  52. Заполнение структуры DCB [ править ]
  53. Структура COMMTIMEOUTS [ править ]
  54. Заполнение структуры COMMTIMEOUTS [ править ]
  55. Пример настройки порта [ править ]
  56. Структура COMMPORT [ править ]
  57. Стандартный диалог настройки порта [ править ]
  58. Выделение памяти для структуры COMMPORT [ править ]
  59. Прием и передача данных [ править ]
  60. Сброс порта [ править ]
  61. Пример настройки порта и выполнения чтения/записи данных [ править ]

How to Fix: Unable to open serial port error message

A serial port may be useful, but some users have reported that the serial port message cannot be opened on their PC. This can be a big problem, and in today’s article we will show you how to solve it.

Problems with a serial port can be very annoying, especially if you tend to use the serial port frequently. When we talk about these types of problems, here are some related problems that have been reported by users:

  • Connection to com1 Windows 10, com3 could not be opened – This problem can sometimes occur if you do not have the required drivers. To solve the problem, you must update the serial port driver and verify that it solves your problem.
  • Putty cannot open Windows 10 serial port – Sometimes this problem can occur due to some Windows services. This is not a big problem, and you can solve it by disabling these services.
  • Access to the serial interface com1 cannot be opened – This problem may occur due to problems with the serial interface. To solve the problem, temporarily disable the serial port and see if it helps.
  • Com port cannot be opened win error code 5, 123, 32 – These are some common problems that can occur with a serial port, but you should be able to solve most of them with one of our solutions.

Windows may try to assign it to a COM port already in use. It seems that Windows sometimes gets an inconsistency in the registry of what has already been assigned.

To see if this is the problem (and if possible solve it), try changing the assigned COM port.

  1. Go to Device Manager > Ports (COM & LPT) > mbed Serial Port, then right-click and select Properties.
  2. Select the Port Settings tab and click Advanced.
  3. Under “COM port number”, try to select a different COM port.

п»ї

April 2021 Update:

We now recommend using this tool for your error. Additionally, this tool fixes common computer errors, protects you against file loss, malware, hardware failures and optimizes your PC for maximum performance. You can fix your PC problems quickly and prevent others from happening with this software:

  • Step 1 : Download PC Repair & Optimizer Tool (Windows 10, 8, 7, XP, Vista – Microsoft Gold Certified).
  • Step 2 : Click “Start Scan” to find Windows registry issues that could be causing PC problems.
  • Step 3 : Click “Repair All” to fix all issues.

Note that Windows marks some of them as (in use), but does not consider them exhaustive, for the same reason that this problem may exist!

Try switching it to a few different unused COM ports and see if it has an effect. If not, we will dive deeper to see what Windows is reporting.

And don’t forget to unplug the power cord after the change to recharge the driver and see all the results.

Try using another cable.

I noticed that using an older USB cable sometimes leads to a poor connection of the card. It would be moody if it worked sometimes and not differently. The problem was solved with a new or even different cable.

Hyperterminal

If you enter “Hyperterminal” in the Windows Start menu, right-click after the call and select “Run as administrator”. It should help you access the serial port.

Also check which COM port it uses. To do this, follow these steps:

1. press the window+R button

2. type devmgmt.msc

Now check which port is assigned to the USE serial converter and use it in the spatula.

CCNA, Web Developer, PC Troubleshooter

I am a computer enthusiast and a practicing IT Professional. I have years of experience behind me in computer programming, hardware troubleshooting and repair. I specialise in Web Development and Database Design. I also have a CCNA certification for Network Design and Troubleshooting.

Serial Port. Open Метод

Определение

Открывает новое соединение последовательного порта. Opens a new serial port connection.

Читайте также:  Язык firefox для линукс

Исключения

Отказ в доступе к порту. Access is denied to the port.

-или- -or- Для текущего процесса или другого процесса в системе уже открыт заданный порт COM — экземпляром SerialPort или в неуправляемом коде. The current process, or another process on the system, already has the specified COM port open either by a SerialPort instance or in unmanaged code.

Одно или несколько свойств этого экземпляра недопустимы. One or more of the properties for this instance are invalid. Например, свойство Parity, DataBits или Handshake имеет недопустимое значение, значение BaudRate меньше или равно нулю, значение ReadTimeout или WriteTimeout меньше нуля и отлично от InfiniteTimeout. For example, the Parity, DataBits, or Handshake properties are not valid values; the BaudRate is less than or equal to zero; the ReadTimeout or WriteTimeout property is less than zero and is not InfiniteTimeout.

Имя порта не начинается с «COM». The port name does not begin with «COM».

Тип файла порта не поддерживается. The file type of the port is not supported.

Порт находится в недействительном состоянии. The port is in an invalid state.

-или- -or- Попытка задать состояние базового порта завершилась неудачей. An attempt to set the state of the underlying port failed. Например, вследствие недопустимости переданных этим объектом SerialPort параметров. For example, the parameters passed from this SerialPort object were invalid.

Заданный порт текущего экземпляра объекта SerialPort уже открыт. The specified port on the current instance of the SerialPort is already open.

Примеры

В следующем примере кода показано использование SerialPort класса, чтобы два пользователя могли общаться с двух отдельных компьютеров, Соединенных нуль-модемным кабелем. The following code example demonstrates the use of the SerialPort class to allow two users to chat from two separate computers connected by a null modem cable. В этом примере пользователям предлагается ввести параметры порта и имя пользователя перед разговором. In this example, the users are prompted for the port settings and a username before chatting. Этот пример кода является частью более крупного примера кода, предоставленного для SerialPort класса. This code example is part of a larger code example provided for the SerialPort class.

Комментарии

Для каждого объекта может существовать только одно открытое соединение SerialPort . Only one open connection can exist per SerialPort object.

Для любого приложения рекомендуется подождать некоторое время после вызова Close метода, прежде чем пытаться вызвать Open метод, так как порт не может быть закрыт мгновенно. The best practice for any application is to wait for some amount of time after calling the Close method before attempting to call the Open method, as the port may not be closed instantly.

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 ]].

Читайте также:  Windows deployment services 2019 настройка

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

Открытый порт должен быть закрыт перед завершением работы программы. В 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.

Читайте также:  Все приложения открываются через windows media center

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-портом. Многострадальный, соответственно относительно простой и понятный, при этом обходит основные подводные камни. Надеюсь, может быть полезен.

Оцените статью