【问题标题】:Driving DTR with System.IO.Ports.SerialPort in .NET在 .NET 中使用 System.IO.Ports.SerialPort 驱动 DTR
【发布时间】:2010-10-14 14:05:13
【问题描述】:

我有一个传感器,它通过 USB 使用 RS232 接收来自 PC 的命令并将数据发送到 PC。

需要先重置传感器(使用 DTR 线),然后才能向其发送命令。

我尝试使用内置的 .net 串行端口,但它似乎无法按预期驱动 DTR 线。我开始怀疑 DTREnable 属性是否真的驱动 DTR 引脚,或者它是否仅在握手期间启用它。

我可以在网上找到的其他 SerialPort 实现也使用 Win32 API,但我发现使用这些实现关闭端口非常困难。如果我单步执行代码,我可以看到它卡在 WaitOne 命令上。

有谁知道如何使用 System.IO.Ports.SerialPort 驱动 DTR?或者知道那里有一个好的组件?

【问题讨论】:

    标签: .net hardware serial-port components


    【解决方案1】:

    我写这个是为了测试 DTR。它使用我的 USB 串口适配器按预期工作。我通过将电缆连接到我的 DataTracker(RS232 接线盒,带 LED)来检查它。 DTR 确实发生了变化。

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        SerialPort1.Close()
    End Sub
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SerialPort1.PortName = "COM5"
        SerialPort1.Open()
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        SerialPort1.RtsEnable = True
    
        Debug.WriteLine("DTR +")
        System.Threading.Thread.Sleep(1000)
    
        SerialPort1.DtrEnable = True 'DTR -
        Debug.WriteLine("DTR -")
        System.Threading.Thread.Sleep(1000)
    
        SerialPort1.DtrEnable = False 'DTR +
        Debug.WriteLine("DTR +")
        System.Threading.Thread.Sleep(1000)
    
        SerialPort1.RtsEnable = False
    End Sub
    

    【讨论】:

    • 感谢您的反馈。一定是其他原因使我的传感器无法响应。我不得不说附加到 DTREnabled 属性的描述不是很清楚。它说明了“在握手期间启用 DTR”的效果。
    【解决方案2】:

    检查电缆的引脚排列。这可能会导致问题。

    Cable Pinouts

    【讨论】:

    • 另请注意,一些更便宜的串行电缆不包含连接到所有引脚的电线 - 有些只有 3 线(Rx、Tx、接地),因此 DTR/CTS/等。不工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多