Conducir DTR con System.IO.Ports.SerialPort en .NET
-
21-08-2019 - |
Pregunta
Tengo un sensor que utiliza RS232 a través de USB para recibir comandos desde un PC y enviar los datos al PC.
El sensor tiene que ser reajustadas (usando la línea DTR) antes de que un comando puede ser enviada a la misma.
He intentado utilizar la función de puerto serie .net, pero no parece conducir a la línea DTR como se esperaba. Estoy empezando a preguntarse si la propiedad DTREnable realidad impulsa el pin DTR, o si sólo se permite durante el apretón de manos.
Otras implementaciones SERIALPORT que pude encontrar en la web también utiliza la API de Win32, pero me resulta muy difícil de cerrar el puerto con estas implementaciones. Si me paso a través del código que puedo ver se queda atascado en un comando WaitOne.
Alguien sabe cómo conducir DTR con System.IO.Ports.SerialPort? O sabe de un buen componente por ahí?
Solución
he escrito esto para probar DTR. funciona como se esperaba usando mi adaptador USB serialport. Lo he comprobado conectando el cable a mi DataTracker (caja de conexiones RS232, con LED 's). DTR hace el cambio.
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
Otros consejos
Compruebe el pinout del cable. Podría estar contribuyendo al problema.