Как я могу выключить проектор с помощью командной строки или Powershell?

У меня компьютер под управлением Windows 8, подключенный к проектору ASK Proxima C520 с использованием последовательного интерфейса RS232.

Я не могу заставить проектор выключиться с помощью команд, которые я пробовал или нашел в Интернете.

В руководстве ASK Proxmia сказано следующее:

Method: Asynchronous communication
Bits Per second: 19200
Data bits: 8
Parity: none
Stop bits: 1
flow control: none

Команда, которую я хочу использовать для отключения питания, говорит следующее:

Command: "A01" [CR] (Hex:0x41 0x30 0x31 0x0d)
Details: Power OFF immediately
Return: OK : [ACK][CR]   | NG : "?" [CR]

Команды, с которыми я пытался работать:

powershell
[System.IO.Ports.SerialPort]::getportnames()

Я просто использую это, чтобы убедиться, что я точно использую COM4.

$port = new-Object System.IO.Ports.SerialPort COM4,19200,None,8,one
$port.open()
$port.WriteLine("A01")
$port.ReadLine()
$port.close()

Что происходит: командная строка просто сидит там с мигающим подчеркиванием и не допускает какого-либо взаимодействия после ввода $port.ReadLine()

Я попытался переключить WriteLine на: "A01 \r\n".

Я также пытался использовать различные версии следующего:

MODE COM4: 19200,N,8,1,p
COPY "A01" COM4

Моя проблема: я не уверен, почему проектор не выключается и просто зависает в командной строке или просто сидит там.

Мой вопрос: Как я могу выключить проектор с помощью командной строки или powershell? Я должен что-то упустить или запутаться в работе последовательных команд.

1 ответ

В соответствии со статьей MSDN, приведенной ниже в классе System.IO.Ports.SerialPort, метод ReadLine считывает значение NewLine во входном буфере. Однако предыдущая команда WriteLine записывает значение "A01" в выходной буфер. Эта инструкция ReadLine ожидает некоторого входного значения, которое вы никогда не передадите. Я полагаю, что вы отправляете правильную команду отключения питания, но не отправляете команду возврата или подтверждения, как ожидает проектор. Определенно, ReadLine - неправильная команда. Я считаю, что `r эквивалентно ключу возврата.

Попробуй это:

$port = new-Object System.IO.Ports.SerialPort COM4,19200,None,8,one
$port.open()
$port.WriteLine("A01 `r");
$port.WriteLine("ACK `r");
$port.close()

Возможно, что команды RETURN не нужны...

$port = new-Object System.IO.Ports.SerialPort COM4,19200,None,8,one
$port.open()
$port.WriteLine("A01");
$port.WriteLine("ACK");
$port.close()

https://msdn.microsoft.com/en-us/library/system.io.ports.serialport(v=vs.110).aspx

http://www.askproximausa.com/files/pdf/ASK-PROXIMA-C5-Series-Users-Manual-English.pdf

Другие вопросы по тегам