studio - Conducción de DTR con System.IO.Ports.SerialPort en.NET
serial port visual studio 2015 (2)
Tengo un sensor que usa RS232 sobre USB para recibir comandos de una PC y enviar datos a la PC.
El sensor debe reiniciarse (utilizando la línea DTR) antes de poder enviarle un comando.
Traté de usar el puerto en serie .net incorporado, pero no parece conducir la línea DTR como se esperaba. Estoy comenzando a preguntarme si la propiedad DTREnable realmente maneja el pin DTR, o si solo lo habilita durante el intercambio de manos.
Otras implementaciones de SerialPort que pude encontrar en la web también usan la API de Win32, pero me resulta muy difícil cerrar el puerto con estas implementaciones. Si paso por el código, puedo ver que se bloquea en un comando de WaitOne.
¿Alguien sabe cómo manejar DTR con System.IO.Ports.SerialPort? ¿O sabe de un buen componente por ahí?
Escribí esto para probar DTR. funciona como se esperaba utilizando mi adaptador de puerto serie USB. Lo comprobé conectando el cable a mi DataTracker (caja de conexiones RS232, con LED). DTR sí 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
Verifique el pinout del cable. Podría estar contribuyendo al problema.