В настоящее время я работаю над написанием небольшого скрипта на VB6 для замены скрипта, запущенного на машине UNIX. Этот сценарий ожидает, пока система ИБП закроет переключатель, который затем будет получен через COM-порт, и драйвер выключит машину UNIX. Я хочу сделать это для ПК с Windows, но это вызывает у меня проблемы.

Я построил соединитель, согласно имеющейся у меня схеме, перемыкнув контакты 7 и 8 и подключив переключатель между контактами 2 и 3 (RXD и TXD). Включение переключателя происходит точно так же, как это делает система ИБП.

Private Sub shutdownPC()

Dim inStr As Variant

myCom.CommPort = 1
myCom.Settings = "9600,e,7,1"
myCom.RThreshold = 1
myCom.InputLen = 0
myCom.InputMode = comInputModeBinary
myCom.InBufferCount() = 0
myCom.PortOpen = True

'Shell ("shutdown.exe -s -t01")

If myCom.CommEvent = comEvReceive Then
    inStr = myCom.Input
End If

End Sub

Пока это мой код. Я включил библиотеку MSComm и добавил объект MSComm в свою форму. Когда я использую comInputModeBinary и comInputModeText, я получаю «Нет переменных» и «» в myCom.Input соответственно. Используя Powershell, я вижу, что порт COM1 работает.

Есть идеи о том, что я делаю неправильно?

2
Panagiotis 16 Май 2014 в 17:23

2 ответа

Лучший ответ

подключение переключателя между контактами 2 и 3 (RXD и TXD)

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

Есть идеи о том, что я делаю неправильно?

Ваша программа не может пассивно ждать.
Он должен опрашивать ИБП, отправляя байты, а затем проверять, получены ли обратно какие-либо данные.

1
sawdust 17 Май 2014 в 00:49

Вам нужно либо зациклить, либо добавить обработчик событий, поскольку ваш код будет выполняться до того, как что-либо произойдет во внешнем мире. Зацикливание расходует заряд батареи и замедляет работу компьютеров. Файл справки находится в C: \ Windows \ HELP \ COMM98.CHM.

OnComm событие

Событие OnComm генерируется всякий раз, когда значение свойства CommEvent изменяется, указывая на то, что произошло событие связи или ошибка.

Синтаксис

Private Sub object_OnComm ()

Синтаксис события OnComm состоит из следующих частей:

Часть Описание объект Выражение объекта, оценивающее объект в списке «Применимо к».

Замечания

Свойство CommEvent содержит числовой код фактической ошибки или события, вызвавшего событие OnComm. Обратите внимание, что установка для свойств RThreshold или SThreshold значения 0 отключает перехват событий comEvReceive и comEvSend соответственно.

0
GoughW 16 Май 2014 в 20:03