使用.NET中的System.IO.Ports.SerialPort驱动DTR

时间:2009-03-20 16:03:37

标签: .net hardware serial-port components

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

在发送命令之前,需要重置传感器(使用DTR线)。

我尝试使用内置的.net串口,但它似乎没有像预期的那样驱动DTR线。我开始怀疑DTREnable属性是否实际驱动DTR引脚,或者它是否仅在握手期间启用它。

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

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

2 个答案:

答案 0 :(得分:4)

我写这个来测试DTR。它使用我的USB串行端口适配器按预期工作。我通过将电缆连接到我的DataTracker(带有LED的RS232接口盒)来检查它。 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

答案 1 :(得分:0)

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

Cable Pinouts