Как узнать com порт устройства через командную строку
Перейти к содержимому

Как узнать com порт устройства через командную строку

  • автор:

Как из командной строки осуществить открытие, чтение и запись в COM-порт Windows?

У меня стоит задача мониторинга и управления ИБП АРС, подключенного к удаленной ПЭВМ через COM-порт RS232. Как работать с COM-портом на локальной ПЭВМ и осуществить мониторинг и управление ИБП АРС я знаю. А также я знаю как подключиться (через WMI или Telnet) к удаленной ПЭВМ и запустить и запустить задачу и исполнить её в консольном режиме. На удаленной ПЭВМ я не могу устанавливать своего ПО, т.е. мне необходимо пользоваться стандартными средствами Windows. А на ПЭВМ где производиться мониторинг (локальная) я хозяин, поэтому моя задача узнать как стандартными средствами Windows манипулировать COM-портом (а значит ИБП АРС) на удаленной ПЭВМ, а результаты получать и обрабатывать на локальной ПЭВМ (где мониторинг). Слышал я, что есть возможность удаленно манипулировать COM-портом можно через WMI, но я не знаю как.

Отслеживать
32.1k 19 19 золотых знаков 79 79 серебряных знаков 106 106 бронзовых знаков
задан 4 апр 2015 в 8:46
71 1 1 золотой знак 1 1 серебряный знак 5 5 бронзовых знаков
ru.stackoverflow.com/questions/413530. Я вам уже отвечал
4 апр 2015 в 8:55

На удаленную ПЭВМ я не могу устанавливать свои программы, поэтому я могу использовать только стандартные средства Windows.

4 апр 2015 в 9:21

Никак. Удалённый компьютер должен сотрудничать, то есть, там должна бежать либо ваша, либо ещё чья-то программа (по сути, сервер), которая по вашему запросу выполнит нужные действия.

6 апр 2015 в 19:58

Это не обязательно. Первый вариант: Можно подцепиться через WMI к удаленной ПЭВМ (предварительно запустив соответственную службу см. Попов Андрей, Шикин Е. А Администрирование Windows с помощью WMI и WMIC) и делать запросы WMI) а затем их обрабатывать на локальной ПЭВМ. Второй вариант: через Telnet и выполнять консольные команды(CMD) и получать результаты исполнения команд, а затем их обрабатывать на локальной ПЭВМ (предварительно запустив службу Сервер Telnet). Т.е. серверами на удаленной ПЭВМ будут Сервер WMI или Сервер Telnet.

7 апр 2015 в 11:32

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

В командной строке Windows есть возможность обращаться к COM-порту по имени вида COMx , где x — номер порта. Эта возможность пришла ещё из MS DOS.

Например, для отправки текста «123» устройству можно воспользоваться командой

echo 123 > COM1 

В порт будут отправлены байты, содержащие коды символов из параметра команды echo .

Для указания параметров порта можно воспользоваться командой mode . Пример использования:

mode COM1 BAUD=9600 PARITY=n DATA=8 

Это означает, что порт COM1 работает со скоростью 9600 бод, передаёт данные по 8 бит и не использует проверку чётности.

Судя по тегам, вы можете использовать C#. В этом случае просто воспользуйтесь классом SerialPort из пространства имён System.IO.Ports . Однако этот класс позволяет работать с портом лишь на локальной машине.

Если вам требуется сложное поведение, то вы можете из командной строки удалённо создать файл с программой на C# и скомпилировать его утилитой csc.exe при условии, что на удалённой машине установлена платформа .NET (консольный компилятор входит в комплект её поставки).

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

PS> [System.IO.Ports.SerialPort]::getportnames() COM3 PS> $port= new-Object System.IO.Ports.SerialPort COM3,9600,None,8,one PS> $port.open() PS> $port.WriteLine("Hello world") PS> $port.Close() 
PS> $port= new-Object System.IO.Ports.SerialPort COM3,9600,None,8,one PS> $port.Open() PS> $port.ReadLine() 

Пример работы с портом из VBScript (к сожалению, не было возможности проверить на реальном железе).

Dim port, fso ' Константы для режимов работы с файлом Const ForAppending = 8 ' Объект для работы с файлами Set fso = CreateObject("Scripting.FileSystemObject") ' Открываем порт для записи Set port = fso.OpenTextFile("COM4:9600,N,8,1", ForAppending) ' Запись строки port.Write "test" ' См. также WriteLine ' Закрываем порт port.Close 
Dim port, fso ' Константы для режимов работы с файлом Const ForReading = 1 ' Объект для работы с файлами Set fso = CreateObject("Scripting.FileSystemObject") ' Открываем порт для чтения Set port = fso.OpenTextFile("COM4:9600,N,8,1", ForReading) ' Если не конец потока данных if not port.AtEndOfStream then ' Выводим строку msgbox port.ReadAll ' См. также .Read и .ReadLine end if ' Закрываем порт port.Close 

Определение номера подключенного COM порта

Для правильного подключения оборудования, необходимо определить номер COM порта.

Проверка проводится при условии, что сервер полностью развернут, и работает заведомо правильно.

Windows

Для определения номера COM порта на ОС Windows необходимо:

  1. Убедиться в том, что многожильный кабель подключен к COM-порту
  2. Перейти в «Диспетчер устройств», расположенный в: Панель управления\Оборудование и звук\Диспетчер устройств (необходимы права администратора)
  3. Раскрыть дерево «Порты (COM и LPT)»
  4. Отсоединить многожильный кабель
  5. Запомнить изменения в дереве устройств «Порты (COM и LPT)»
  6. Присоединить многожильный кабель обратно к COM-порту
  7. Найти новый порт в дереве устройств «Порты (COM и LPT)»

ComP 1.png

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

ComP 2.png

Linux

Для определения номера COM порта на ОС Linux необходимо:

  1. Обладать правами Root либо пользователь должен входить в группу dialout
  2. Убедиться в том, что многожильный кабель подключен к COM-порту
  3. Проверить наличие COM портов в системе, введя в командную строку следующую команду:
ls -l /dev/ttyS* /dev/ttyUSB*

4. После выполнения команды отобразится список всех доступных COM-портов

ComP 3.png

dev/ttyS0 — первый COM порт

/dev/ttyS1 — второй COM порт

/dev/ttyUSB0 — специальный кабель-переходник из USB в COM (Gembird UAS111)

5. Установить программу minicom. Для этого вводим следующую команду:

apt-get install minicom

6. Найти многожильный кабель в оплётке длиной 4-6 см.

7. Соединить 2 и 3 выводы COM порта перемычкой из кусочка многожильного провода. Оплётка будет удерживать провод на контактах, а металлические жилы внутри будут проводниками.

8. Настроить программу minicom. Для этого вводим следующую команду:

minicom -s

ComP 5.png

9. Выбрать «Настройка последовательного порта»

ComP 6.png

10. Нажимая А поочередно выбираем порты (если используется кабель-переходник из USB в COM то выбрать /dev/ttyUSB0)

11. Отключить аппаратное управление потоком, нажав «F»

12. Выйти из настроек нажав «Enter»

13. Сохранить настройки по умолчанию «Сохранить настройки как dfl»

14. Выйти из minicom

15. Запустить minicom выполнив команду:

minicom

16. Нажать на любую клавишу на клавиатуре

ComP 7.png

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

Если вводимые символы отображаются — значит COM-порт определен верно

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

Как показать порты COM и LPT в Диспетчере устройств

Одним из способов увеличения скорости интернета на компьютерах, использующих старые типы подключения к глобальной сети являлась настройка COM -порта — интерфейса стандарта RS-232 , которым в свое время массово оснащались компьютеры. Изначально COM, или иначе последовательный порт использовался для подключения терминалов, затем по нему стали подключать модемы, мыши и другую периферию.

Сегодня интерфейс COM считается устаревшим, тем не менее, в отдельных случаях он всё еще используется для подключения ИБП, программаторов, спутниковых ресиверов и некоторых других устройств.

COM порты

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

Например, для увеличения пропускной способности интернета в свойствах устройства «Последовательный порт» рекомендовалось увеличить значение показателя «Бит в секунду» до 128000. Дело в том, что в современных версиях Windows ни COM-, ни LPT-порты (еще один устаревший интерфейс, используемый для подключения принтеров) не отображаются. В том числе при показе скрытых устройств.

Как показать COM- и LPT-порты, если они всё же понадобятся?

Откройте Диспетчер устройств и выберите в меню «Действие» опцию «Установить старое устройство».

Установить старое устройство

Если в меню у вас будет доступна только одна опция «Справка», кликните правой кнопкой мыши по названию вашего ПК и выберите «Обновить конфигурацию оборудования», после чего опция «Установить старое устройство» станет доступной.

Обновить конфигурацию оборудования

В открывшемся окне мастера жмем «Далее»,

Окно мастера

выбираем «Установка оборудования, выбранного вручную» и снова жмем «Далее».

Установка оборудования, выбранного вручную

В появившемся списке выбираем «Порты (COM и LPT)»,

Порты (COM и LPT)

после нажатия «Далее» выбираем «Последовательный порт».

Последовательный порт

И устанавливаем его драйвер нажатием «Далее».

Устанавливаем драйвер

И «Готово».

Готово

Порты (COM и LPT) появятся в Диспетчере устройств.

Порты COM и LPT

Если этого не произойдет, скорее всего, данный тип интерфейса у вас отключен в BIOS.

Если что, ищите отвечающие за их включение/отключение опции в разделе Integrated Peripherals, они могут иметь названия IO Devices, Com-Port и Parallel Port.

Как узнать com порт устройства через командную строку

Мне часто нужно посылать короткие строки символов в последовательный порт на операционной системе Windows (перевод статьи [1]). Это можно использовать для отправки команд роботу или в другие устройства, основанным на микроконтроллерах. Для соединения с устройством можно использовать аппаратный преобразователь USB-to-serial, которые в обилии можно найти на сайтах AliExpress, Ebay и dx.com. Для отправки символов есть удобная утилита SerialSend [2], но также можно использовать встроенные команды Windows: echo, set и mode.

К примеру, нужно послать строку «hello» в COM1 (имя первого последовательного порта Windows). Для этого можно просто ввести в консоли cmd.exe следующую команду:

echo hello > COM1

Команда echo обычно используется для отображения строк в консоли командной строки, когда нужно вывести какое-нибудь информационное сообщение из скрипта команд *.BAT или *.CMD. Однако в этом примере с помощью символа > применено перенаправление вывода в специальный файл COM1, который в действительности не файл на диске, а последовательный порт. По этой причине строка «hello» отправляется в последовательный порт вместо экрана консоли.

Но для такого вывода текста в последовательный порт есть несколько препятствий:

• Нужно заранее знать номер COM-порта, который хотите использовать. Если Вы используете преобразователь USB-to-serial, то этот номер может неожиданно поменяться, особенно если Вы подключили его в другой разъем USB (программа SerialSend [2] предоставляет простой альтернативный метод отправки строк в любой доступный COM-порт с самым высоким порядковым номером, что может быть очень полезным).
• Строка, которая отправляется в нашем примере, в действительности имеет длину 8 байт, потому что она включает 1 байт завершающего пробела (код ASCII 0x20) плюс символ возврата каретки (CR, код 0x0D) и перевода строки (LF, код 0x0A).
• Отправлять можно только обычные символы текста. К примеру, произвольные байты с кодами 0x00 .. 0x19 отправлять не получится, на это способна только утилита SerialSend [2].
• Последовательный порт, который Вы хотите использовать, может быть настроен не на ту скорость, которая Вам нужна. В таком случае дополнительно нужно использовать команду mode, чтобы сконфигурировать скорость baudrate (и/или другие параметры фрейма последовательного протокола).
• COM-порты с большими номерами могут быть не распознаны для такого примера, но для их использования есть обходной маневр, описанный ниже.

Следующий пример — более надежный аналог команды из примера выше:

set /p x="hello" < nul >\\.\COM22 

Эта команда может выглядеть поначалу довольно непонятной, давайте разберем её по частям.

Команда set обычно используется для установки значения для так называемой переменной окружения (environment variable). Например, следующая команда должна использоваться для установки переменной окружения с именем x в значение строки «sunshine»:

set x="sunshine"

Когда в команде set используется ключ /p, то команда set выводит приглашение для пользователя, чтобы он ввел значение для устанавливаемой переменной окружения. Приглашение отображается на экране в виде строки, предоставленной в команде. Например:

set /p x="Введите значение для x: "

Конечно, нас в сущности не интересует установка значения переменной x как таковой, сейчас это просто средство для достижения другой цели. Все, что мы хотим — вывести строку «hello» без символов CR и LF, и команда set только лишь предоставляет способ для решения этой задачи.

Мы не хотим, чтобы команда set остановилась на ожидании ввода пользователя, чтобы он ввел значение для переменной x, для этого команда set перенаправлена на ввод из nul (т. е. нет ввода как такового, вместо обычного ввода, который обычно происходил бы из консоли). Это означает, что команда сразу завершит работу, вместо того, чтобы ожидать ввода пользователя. Перенаправление ввода осуществляется символом < , указанным перед nul.

set /p x="Enter a value for x: "

Теперь, чтобы вывести только корректные символы, и только их, нам нужно перенаправить вывод в COM22. Чтобы гарантировать, что имя COM-порта будет правильно распознано, и произошло перенаправление вывода, здесь вместо специального системного имени используется его полная форма «\\.\COM22».

set /p x="hello" < nul >\\.\COM22 

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

mode COM8 BAUD=38400 PARITY=n DATA=8

Вот полный пример на скриншоте окна консоли:

Windows send symbols COM port via cmdline

[Ссылки]

1. Simple command line trick for sending characters to a serial port in Windows site:batchloaf.wordpress.com.
2. SerialSend: утилита для работы с виртуальным COM-портом.

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

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