【问题标题】:Control of a program by use of Serial to-USB switch使用 Serial to-USB 开关控制程序
【发布时间】:2013-01-31 20:23:00
【问题描述】:

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

我们将不胜感激任何帮助。

【问题讨论】:

    标签: vb.net serial-port usb usbserial


    【解决方案1】:

    这是 Robert Grier(Visual Basic Programmer's Guide to Serial Communications, 4th Edition 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
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 你好,彼得。电脑上有一个USB接口。使用串行到 USB 适配器的想法是能够访问 IO 引脚以在输入缓冲区创建可检测的信号变化,以便我们可以使用此状态变化来触发程序中的功能。适配器由计算机供电。
      • 嗨 - 然后我的答案适用 - 使用我所说的流量控制引脚,并在 Sparers 答案中更全面地说明。就个人而言,无论如何您都在使用额外的硬件,我仍然会根据我的链接使用 USB 到硬件适配器;这正是它的设计目的,而使用串行端口,即使完全可以接受,仍然感觉有点麻烦。这就是我。更可靠的原因是 - 根据您的应用程序 - USB 适配器为您提供更多输入和输出线,以便您的应用程序扩展以需要它们。
      【解决方案3】:

      我没有对此进行测试,但有一些变化......

      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 的状态。您也可以使用此方法访问其他引脚。

      【讨论】:

      • 您好,备件。这将是非常有价值的。但是我们使用的是VB6。 VB6 中是否有此例程的等效代码?
      • 我没有安装 VB6,但应该是在调用 .OnComm 时检查 .ComEvent 是否为 4 (comEvDSR)。您可能需要更改 .Handshaking 属性 msdn.microsoft.com/en-us/library/aa259410(v=vs.60).aspx
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      • 2023-04-02
      • 2020-08-09
      相关资源
      最近更新 更多