Перейти к содержимому

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

  • автор:

Как узнать 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-портом.

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

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

Отслеживать
32k 19 19 золотых знаков 79 79 серебряных знаков 105 105 бронзовых знаков
задан 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, для устройства, подключенного многожильным кабелем.

Диагностика и логи

Когда решено обменяться данными по локальной сети, устройства связываются друг с другом. Для этого каждому устройству нужно иметь свой IP-адрес и открыть порты для взаимодействия.

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

Проверить порт сервера на доступность можно следующими способами:

  • с помощью сервиса Проверка доступных портов,
  • с помощью консольных команд: telnet, ping, traceroute,
  • с помощью программы MTR.

Как проверить, открыт ли порт, командой Telnet

Telnet — это утилита, с помощью которой можно соединиться с удалённым портом любого компьютера и установить канал связи. Это реализация клиентской части протокола с тем же названием (стандартный порт telnet — 23). Для использования telnet нужно знать, какой порт использует искомое приложение, а также имя или IP-адрес сервера. Если при работе с telnet не указать порт, утилита проверит доступность сервера аналогично команде ping.

Рассмотрим, как узнать, открыт ли порт на компьютере или сервере в Windows и Linux.

Важно: в Windows Vista и Windows 7/8/10 утилита telnet по умолчанию отключена. Вы можете установить утилиту по инструкции от Microsoft.

Нажмите Пуск или сочетание клавиш Win + R.
В поле поиска введите «cmd» и нажмите кнопку ОК.

В командной строке введите команду: telnet имя_сервера номер_порта или: telnet IP_сервера номер_порта Если командная строка или терминал возвращает ошибку, то порт закрыт: команда telnet закрытый портКак с помощью telnet в Windows 10 проверить порт
Если окно становится полностью пустым или на экране появляется приглашение сервера, порт открыт: команда telnet открытый портКак выглядят в Windows и Linux (Ubuntu, Centos) открытые порты

Запустите терминал. Для этого в поисковой строке введите слово «Терминал» или нажмите комбинацию клавиш Ctrl+Alt+T.

Установите утилиту telnet: sudo apt install telnet

В терминале введите команду: telnet имя_сервера номер_порта или: telnet IP_сервера номер_порта Если командная строка возвращает ошибку, то порт закрыт: telnet доступность порта 1Если порт открыт, появится следующее сообщение: telnet доступность порта 2Telnet: подключение к порту

Как пользоваться ping и traceroute

Ping — это утилита, с помощью которой возможна проверка доступности сервера по IP с компьютера. Опрашиваемому узлу отправляются эхо-запросы (ICMP-пакеты Echo Request). Если до узла дошёл запрос, в ответ он должен отправить ICMP-пакет с принятыми данными и эхо-ответ (Echo Reply). Подробнее в статье Команда Ping.

Traceroute — это утилита, с помощью которой можно отследить путь запроса к серверу, а также проблемы, связанные с доступностью удалённого сервера. Утилита отправляет запрос узлу и последовательно опрашивает все маршрутизаторы на пути. Подробнее о работе утилиты и её установке читайте в статье Утилиты Traceroute и Tracert.

Если у вас кириллический домен

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

Чтобы проверить доступность сайта или IP адреса, выберите инструкцию для вашей ОС.

Нажмите Пуск или сочетание клавиш Win + R.
В поле поиска введите «cmd» и нажмите кнопку ОК.

В окне терминала введите нужную команду:

  • ping — ping имя_сайта или ping IP_сервера , как пользоваться ping в WindowsКоманда ping: как проверить доступность сервера или компьютера
  • traceroute — tracert имя_сайта или tracert IP_сервера . как пользоваться traceroute в WindowsTelnet: порт Windows 7

Запустите терминал. Для этого в поисковой строке введите слово «Терминал» или нажмите комбинацию клавиш Ctrl+Alt+T.

В открывшемся окне терминала введите нужную команду:

  • ping — ping имя_сайта или ping IP_сервера , как пользоваться ping в Linux
  • traceroute — traceroute имя_сайта или traceroute IP_сервера . как пользоваться traceroute в Linux

Найдите в Spotlight утилиту Network Utility (Сетевая утилита) и запустите её.

В открывшейся программе выберите нужную вкладку:

  • ping — на вкладке «Ping» введите имя домена или IP-адрес и нажмите кнопку Ping: как пользоваться ping в MacOS
  • traceroute — на вкладке «Traceroute» введите имя домена или IP-адрес и нажмите кнопку Trace: как пользоваться traceroute в MacOS

Готово, мы рассмотрели, как пользоваться командой ping и как запустить tracert.

Результатом работы каждой из этих команд будет несколько строк в окне терминала. Результат команды ping покажет количество переданных и потерянных пакетов при обмене с узлом, а также время приёма и передачи. Результатом traceroute будет трассировка маршрута к узлу.

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

Диагностика сети при помощи MTR

MTR — программа, которая сочетает функционал команд traceroute и ping в одном инструменте. MTR проверяет соединение между локальной системой и указанным узлом (IP или доменом). Программа отправляет запрос к узлу, как команда ping, и показывает маршрут пакета, как traceroute.

Диагностика сети WinMTR:

диагностика сети winmtr 1

Распакуйте архив и запустите программу от имени администратора: Centos: открытые порты

диагностика сети winmtr 2

Нажмите Options, в настройках отключите галочку Resolve names. Нажмите OK:

диагностика сети winmtr 3

В поле «Host» введите ваше доменное имя или IP-адрес. Нажмите Start:

диагностика сети winmtr 4

Когда число отправленных пакетов (колонка «Sent») будет более 200, нажмите Stop: Диагностика сети Winmtr

диагностика сети winmtr 5

Нажмите Export TEXT и сохраните результат работы программы: Centos: проверить открытые порты Результат работы содержит:

  • Hostname — IP-адрес или домен узла. Значение «No response from host» говорит о блокировке ICMP-пакетов в узле;
  • Loss % — процент потерянных ответов от данного узла. Например, при «No response from host» процент потерь равен 100 — значит, маршрутизатор не ответил на ICMP-запрос;
  • Sent — количество отправленных запросов узлу;
  • Recv — количество полученных ответов от узла;
  • Best — наименьшее время задержки, мс;
  • Avrg — среднее время задержки, мс;
  • Worst — наибольшее время задержки, мс;
  • Last — время задержки последнего полученного пакета, мс.

На Linux утилита MTR установлена по умолчанию.

Запустите терминал. Для этого в поисковой строке введите слово «Терминал» или нажмите комбинацию клавиш Ctrl+Alt+T.

  • для Ubuntu/Debian: sudo apt install mtr
  • для CentOS: sudo yum install mtr
  • для Fedora: sudo dnf install mtr

Введите команду: mtr -n -c 300 -r 123.123.123.123 Где 123.123.123.123 — IP-адрес вашего сайта.

диагностика сети mtr

Дождитесь окончания выполнения запроса. В окне терминала вы увидите результат работы утилиты MTR: Результат работы содержит:

  • HOST — IP-адрес или домен узла. Значение «. » говорит о блокировке ICMP-пакетов в узле;
  • Loss% — процент потерянных ответов от данного узла. Например, при «. » процент потерь равен 100 — значит, маршрутизатор не ответил на ICMP-запрос;
  • Snt — количество отправленных запросов узлу;
  • Last — время задержки последнего полученного пакета, мс;
  • Avg — среднее время задержки, мс;
  • Best — наименьшее время задержки, мс;
  • Wrst — наибольшее время задержки, мс;
  • StDev — среднеквадратичное отклонение времени задержки, мс.

В MacOS MTR не установлена по умолчанию. Чтобы установить MTR вручную:

Запустите терминал. Для этого нажмите Cmd + Пробел, в поисковой строке введите слово «Терминал» и нажмите Enter.

Если у вас не установлен пакетный менеджер Brew, установите его командой: ruby -e «$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)» /dev/null Для выполнения команды укажите пароль пользователя. При успешном результате появится уведомление с текстом «Installation successful!»

Затем установите MTR командой: brew install mtr

После установки запустите MTR: sudo /usr/local/sbin/mtr yourdomain.com Где yourdomain.com — ваш домен. Для выполнения команды также потребуется ввести пароль пользователя.

Подождите примерно 10 минут, пока MTR отправит около 300 пакетов и соберёт информацию о задержках и потерях. В окне терминала вы увидите результат работы утилиты MTR: Результат должен содержать:

  • Host — IP-адрес или домен узла. Значение «. » говорит о блокировке ICMP-пакетов в узле;
  • Loss % — процент потерянных ответов от данного узла. Например, при «. » процент потерь равен 100 — значит, маршрутизатор не ответил на ICMP-запрос;
  • Snt — количество отправленных запросов узлу;
  • Last — время задержки последнего полученного пакета, мс;
  • Avg — среднее время задержки, мс;
  • Best — наименьшее время задержки, мс;
  • Wrst — наибольшее время задержки, мс;
  • StDev — среднеквадратичное отклонение времени задержки, мс.

Если вы обнаружили потери на промежуточных узлах, проблемы нет. Промежуточные маршрутизаторы могут не отвечать на ICMP-запросы, а просто пропускать дальше трафик. Если же потери обнаружены на конечном узле, отправьте результат работы программы в службу поддержки. В сообщении укажите ваш внешний IP-адрес. Узнать IP-адрес можно на сайте Рег.ру.

Как просмотреть журналы сайтов

Журналы сайтов расположены в корневой директории хостинга в папке logs. Логи хостинга можно просмотреть как через хостинг-панели управления, так и по FTP и SSH. Подробнее о том, что такое логи, зачем они нужны и как их читать мы описали в статье Логи сервера.

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

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

https://alkogolizm.vyvod-iz-zapoya-v-stacionare-samara11.ru/