关于vb.net:使用串行to-USB开关控制程序

Control of a program by use of Serial to-USB switch

我们想通过按连接到串行USB适配器的开关来控制程序(用VB编写)。当按下时,程序中的某个功能将被激活。为了实现这一点,我们需要在串行端口的comm_event中连续轮询相关的com端口,并调用所述函数。我们尝试通过在适配器的传输和接地引脚之间连接按钮开关来更改输入缓冲区的状态。有时可以正常工作,但大部分时间都错过了。因此,似乎我们需要创建一个长脉冲序列,以保持输入缓冲区状态持续足够长的时间以检测任何变化。有类似这样的小工具吗?什么样的简单电子设备可以完成此任务。

任何帮助将不胜感激。


这是Robert Grier(《 Visual Basic串行通信程序员指南》,第4版ISBN 1-890422-28-2的作者)的回答,我感谢他的帮助,因此与所有感兴趣的人分享。

将开关的一侧连接到DTR输出(连接器的引脚4),将开关的另一侧连接到DCD输入(引脚1)

从窗体的工具箱中删除Comm控件,并添加一个Label。在代码中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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

我还没有测试过,但是在...上有一些变化。

1
2
3
4
5
6
7
8
9
10
11
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

...应该工作。更改DB9连接器上引脚6的状态。您也可以使用此方法访问其他引脚。


如果我理解正确,则计算机没有串行端口,因此您要将USB适配器插入PC的USB端口,然后尝试读取在适配器的RS-232端创建的某些条件?我将看一下流量控制引脚DTR / DSR等。您是否有可用的外部电源? RS232通常预期为-12v。根据您要实现的目标和您的情况,您还可以考虑向PC添加硬件串行端口,或使用诸如此类的硬件USB接口:http://www.maplin.co.uk/usb -experiment-interface-board-42857