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

Рейтинг: 2Ответов: 1Опубликовано: 04.04.2015

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

Слышал я, что есть возможность удаленно манипулировать COM-портом можно через WMI, но я не знаю как.

Ответы

▲ 4

В командной строке 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-портом из командной строки (англ.)

Документация на класс SerialPort