Управление программой с помощью переключателя Serial to-USB

Мы хотим управлять программой (написанной на VB), нажимая переключатель, подключенный к последовательному адаптеру USB. При нажатии будет активирована определенная функция в программе. Для этого нам нужно непрерывно опрашивать соответствующий COM-порт в comm_event последовательного порта и вызывать указанную функцию. Мы попытались, подключив кнопочный переключатель между выводами передачи и заземления адаптера, изменить состояние входного буфера. Иногда срабатывает, но чаще всего промахивается. Таким образом, кажется, нам нужно создать длинную последовательность импульсов, чтобы сохранить состояние входного буфера достаточно долго, чтобы обнаружить любое изменение. Есть ли какой-нибудь гаджет для чего-то подобного? Какая простая электроника может решить эту задачу.

Любая помощь будет высоко оценена.


person user1046647    schedule 31.01.2013    source источник


Ответы (3)


Вот ответ Роберта Гриера (автора Руководства программиста Visual Basic по последовательной связи, 4-е издание ISBN 1-890422-28-2) Я благодарен ему за помощь и поэтому делюсь этим со всеми заинтересованными.

Подключите одну сторону переключателя к выходу DTR (контакт 4 разъема), а другую сторону переключателя к входу DCD (контакт 1).

Удалите элемент управления Comm из панели инструментов вашей формы и добавьте одну метку. В коде:

Private Sub Form_Load()

    On Error Resume Next
    With MSComm1
        .CommPort = 3  'use the actual port number that is created when you install your USB adapter
        .PortOpen = True
        .DTREnable = True
        If .PortOpen = False Then MsgBox "Unable to open serial port."
    End With
End Sub

Private Sub MSComm1_OnComm()

    With MSComm1
        If .CDHolding = True Then
            Label1.Caption = "Switch On"
            Label1.BackColor = vbGreen
        Else
            Label1.Caption = "Switch Off"
            Label1.BackColor = vbRed
        End If
    End With
End Sub
person user1046647    schedule 04.02.2013

Если я правильно понимаю, у компьютера нет последовательного порта, поэтому вы подключаете USB-адаптер к USB-порту на ПК, а затем пытаетесь прочитать какое-то условие, которое вы создаете на стороне RS-232 адаптера? Я бы посмотрел на контакты управления потоком DTR / DSR и т. Д. Есть ли у вас внешний источник питания? RS232 обычно ожидает +/- 12В. В зависимости от того, чего вы пытаетесь достичь, и ваших обстоятельств, вы также можете добавить аппаратный последовательный порт к ПК или использовать аппаратный USB-интерфейс, такой как этот: http://www.maplin.co.uk/usb-experiment-interface-board-42857

person peterG    schedule 31.01.2013
comment
Привет Питер. На компьютере есть USB-порт. Идея использования адаптера последовательного порта в USB состоит в том, чтобы иметь возможность доступа к выводам ввода-вывода для создания обнаруживаемого изменения сигнала во входном буфере, чтобы мы могли использовать это изменение состояния для запуска функции в нашей программе. Адаптер питается от компьютера. - person user1046647; 03.02.2013
comment
Привет. Тогда применима остальная часть моего ответа - используйте контакты управления потоком, как я сказал и как более подробно изложено в ответе Spars. Лично, поскольку вы в любом случае используете дополнительное оборудование, я все равно склоняюсь к использованию адаптера USB-аппаратного обеспечения в соответствии с моей ссылкой; это именно то, для чего он предназначен, тогда как использование последовательного порта, хотя и вполне приемлемое, все же кажется чем-то вроде бреда. Это всего лишь я. Более веская причина - в зависимости от вашего приложения - USB-адаптер дает вам гораздо больше входных и выходных линий, которые можно использовать, если ваше приложение будет нуждаться в них. - person peterG; 03.02.2013

Я не тестировал это, но некоторые варианты...

Private WithEvents com As New IO.Ports.SerialPort

Private Sub com_PinChanged(sender As Object, e As System.IO.Ports.SerialPinChangedEventArgs) Handles com.PinChanged

    Dim pin As IO.Ports.SerialPinChange = e.EventType

    If pin.DsrChanged Then
        MsgBox("DSR changed")
    End If

End Sub

...должно сработать. Измените состояние контакта 6 на разъеме DB9. Вы также можете получить доступ к другим контактам, используя этот метод.

person Sparers    schedule 31.01.2013
comment
Привет Запчасти. Это было бы очень ценно. Но мы используем VB6. Есть ли эквивалентный код в VB6 для этой процедуры? - person user1046647; 03.02.2013
comment
У меня не установлен VB6, но нужно проверить .ComEvent для 4 (comEvDSR) при вызове .OnComm. Возможно, вам придется изменить свойство .Handshaking msdn. microsoft.com/en-us/library/aa259410(v=vs.60).aspx - person Sparers; 03.02.2013