Fahren DTR mit System.IO.Ports.SerialPort in .NET
-
21-08-2019 - |
Frage
Ich habe einen Sensor, die RS232 über USB verwendet Befehle von einem PC zu empfangen und Daten an den PC senden.
Der Sensor muss zurückgesetzt werden (die DTR-Leitung), bevor ein Befehl an ihn gesendet werden kann.
Ich habe versucht, das eingebaute in .net serielle Schnittstelle zu verwenden, aber es scheint nicht die DTR-Leitung zu treiben, wie erwartet. Ich fange an zu fragen, ob die DTREnable Eigenschaft tatsächlich den DTR-Pin treibt, oder wenn er ermöglicht es nur während des Handshaking.
Andere Serialport-Implementierungen, die ich im Internet finden konnte, verwenden auch den Win32-API, aber ich finde es sehr schwierig, den Hafen mit diesen Implementierungen zu schließen. Wenn ich durch den Code Schritt kann ich sehen, es auf einem WaitOne Befehl stecken bleibt.
Wer weiß, wie DTR fahren mit System.IO.Ports.SerialPort? Oder weiß von einem guten Komponente da draußen?
Lösung
Ich schrieb dieses DTR zu testen. es funktioniert wie erwartet meinen USB Serialport-Adapter. Ich habe es durch das Kabel an meinen DataTracker (RS232 Breakout-Box, mit LEDs) zu befestigen. DTR nicht ändert.
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
Andere Tipps
Überprüfen Sie die Pin-Belegung des Kabels. Es könnte zum Problem beitragen.