我有一个传感器,它使用RS232 over USB接收来自PC的命令并将数据发送到PC。
在发送命令之前,需要重置传感器(使用DTR线)。
我尝试使用内置的.net串口,但它似乎没有像预期的那样驱动DTR线。我开始怀疑DTREnable属性是否实际驱动DTR引脚,或者它是否仅在握手期间启用它。
我在网上找到的其他SerialPort实现也使用Win32 API,但我发现使用这些实现关闭端口非常困难。如果我单步执行代码,我可以看到它卡在WaitOne命令上。
任何人都知道如何使用System.IO.Ports.SerialPort驱动DTR?或者知道那里有一个好的组件?
答案 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)
检查电缆的引脚排列。它可能会导致这个问题。