Dirigindo DTR com System.io.ports.serialport em .NET
-
21-08-2019 - |
Pergunta
Eu tenho um sensor que usa Rs232 sobre USB para receber comandos de um PC e enviar dados para o PC.
O sensor precisa ser redefinido (usando a linha DTR) antes que um comando possa ser enviado a ele.
Tentei usar a porta serial .NET embutida, mas ele não parece dirigir a linha DTR conforme o esperado. Estou começando a me perguntar se a propriedade Dtrenable realmente aciona o pino DTR, ou se apenas o permite durante o aperto de mão.
Outras implementações do Serialport que eu encontrei na Web também usa a API Win32, mas acho muito difícil fechar a porta com essas implementações. Se eu passar pelo código, posso ver que ele ficará preso em um comando wagone.
Alguém sabe como dirigir DTR com system.io.ports.serialport? Ou conhece um bom componente por aí?
Solução
Eu escrevi isso para testar DTR. Funciona como esperado usando meu adaptador USB Serialport. Eu o verifiquei anexando o cabo ao meu datatracker (caixa de breakout RS232, com o LEDs). DTR muda.
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
Outras dicas
Verifique a pinagem do cabo. Pode estar contribuindo para o problema.