DTR guida con System.IO.Ports.SerialPort in .NET
-
21-08-2019 - |
Domanda
Ho un sensore che utilizza RS232 sopra USB per ricevere comandi da un PC e inviare dati al PC.
Il sensore deve essere resettato (utilizzando la linea DTR) prima di un comando può essere inviato ad esso.
Ho cercato di usare il built-in porta seriale .net, ma non sembra di guidare la linea DTR come previsto. Sto cominciando a chiedersi se la proprietà DTREnable effettivamente guida il pin DTR, o se consente solo durante l'handshake.
Altre implementazioni SerialPort che ho potuto trovare sul web inoltre usa l'API Win32, ma trovo molto difficile chiudere la porta con queste implementazioni. Se faccio un passo attraverso il codice posso vedere si blocca su un comando WaitOne.
Qualcuno sa come guidare DTR con System.IO.Ports.SerialPort? O sapere di una buona componente là fuori?
Soluzione
Ho scritto questo per testare DTR. funziona come previsto con il mio adattatore USB serialport. ho controllato collegando il cavo alla mia DataTracker (breakout box RS232, con LED). DTR non cambia.
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
Altri suggerimenti
Controlla la piedinatura del cavo. Si potrebbe contribuire al problema.