Как я могу выключить проектор с помощью командной строки или 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