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í?

Foi útil?

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.

Piadas de cabo

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top