none
Conversão automática de ASCII RRS feed

  • Pergunta

  • Estou recebendo um resposta de uma solicitação que envie a um hardware via Serial Port, esta resposta é em ASCII no entanto o meu programa esta convertendo automaticamente toda a resposta sem o devido tratamento, e este eu gostaria de tratar cada carácter separadamente. 


    Imports System.IO.Ports
    Imports System.IO.Ports.SerialPort
    
    Public Class Form1
    
        Dim comPort As IO.Ports.SerialPort = Nothing
        Dim sComPort As String = ""
      
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            GetSerialPortNames()
        End Sub
    
        Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
            tbxIn.Text = e.ToString
        End Sub
    
        Sub GetSerialPortNames()
            ' Show all available COM ports.
            For Each sp As String In My.Computer.Ports.SerialPortNames
                lstPorts.Items.Add(sp)
            Next
        End Sub
    
    
        Private Sub lstPorts_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstPorts.SelectedIndexChanged
            sComPort = lstPorts.SelectedItem
            Button1.Enabled = True
            Button2.Enabled = False
            Button3.Enabled = False
    
    
        End Sub
    
        Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            ' Abre a posta usando o metodo metodo OpenserialPort
            Button1.Enabled = False
            Button2.Enabled = True
            CheckBox1.Enabled = True
            CheckBox2.Enabled = True
            Button3.Enabled = True
            comPort = My.Computer.Ports.OpenSerialPort(sComPort, 9600, IO.Ports.Parity.None, 8, 1)
            comPort.ReadTimeout = 500
            comPort.WriteTimeout = 500
        
        End Sub
    
        Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        
            Try
                comPort.WriteLine(TextBox1.Text)
                Dim sIncomming As String = comPort.ReadLine()
             
                tbxIn.Text = sIncomming & vbCrLf
    
           
            Catch ex As TimeoutException
                tbxIn.Text &= "Error: Serial Port Read Timeout" & vbCrLf
            End Try
    
        End Sub
    
        
    
        Public Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
            If CheckBox1.Checked = True Then
                comPort.DtrEnable = True
            Else
                comPort.DtrEnable = False
            End If
    
        End Sub
    
    
        Public Sub CheckBox2_CheckedChanged_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged
    
            If CheckBox2.Checked = True Then
                comPort.RtsEnable = True
            Else
                comPort.RtsEnable = False
            End If
    
        End Sub
        
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            tbxIn.Clear()
            comPort.Close()
            Button1.Enabled = True
            Button2.Enabled = False
            CheckBox1.Enabled = False
            CheckBox2.Enabled = False
    
    
        End Sub
    
    End Class

    Esta é a imagem com o a resposta enviada pelo hardware via serial port, vejam que ele faz a conversão automática. 


    Grato se alguém puder me dar uma luz
    quarta-feira, 4 de julho de 2012 12:53

Respostas

  • É um vetor de bytes,tente algo como:

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        
            Try
                comPort.WriteLine(TextBox1.Text)
    
                Dim respostas() As String = System.Text.Encoding.ASCII.GetString(comPort.ReadLine(), 0, 0)
                tbxIn.Text = respostas
    
    
           
            Catch ex As TimeoutException
                tbxIn.Text &= "Error: Serial Port Read Timeout" & vbCrLf
            End Try
    
        End Sub


    Microsoft Technology Associate (MTA)

    • Sugerido como Resposta Heloisa PiresModerator terça-feira, 10 de julho de 2012 13:44
    • Marcado como Resposta FFDESOUSA terça-feira, 10 de julho de 2012 20:26
    quinta-feira, 5 de julho de 2012 16:04

Todas as Respostas

  • Olá,

    Já tentou alterar a propriedade Encoding do seu objeto SerialPort?

    http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.encoding.aspx


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima

    quarta-feira, 4 de julho de 2012 13:19
    Moderador
  • Tente algo parecido com isso

    DadosRecebidos = System.Text.Encoding.ASCII.GetString(bytes, 0, 0)

    Isso decodifica dados recebidos em ASCII

    Att.,

    Jeimes Ribeiro

    quarta-feira, 4 de julho de 2012 13:19
  •     Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        
            Try
                comPort.WriteLine(TextBox1.Text)
    
                Dim respostas As String = System.Text.Encoding.ASCII.GetString(comPort.ReadLine(), 0, 0)
                tbxIn.Text = respostas
    
    
           
            Catch ex As TimeoutException
                tbxIn.Text &= "Error: Serial Port Read Timeout" & vbCrLf
            End Try
    
        End Sub

    Fiz um teste mas ele me retorna um erro 

    Error 1 Value of type 'String' cannot be converted to '1-dimensional array of Byte'.
    quarta-feira, 4 de julho de 2012 13:48
  • É um vetor de bytes,tente algo como:

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        
            Try
                comPort.WriteLine(TextBox1.Text)
    
                Dim respostas() As String = System.Text.Encoding.ASCII.GetString(comPort.ReadLine(), 0, 0)
                tbxIn.Text = respostas
    
    
           
            Catch ex As TimeoutException
                tbxIn.Text &= "Error: Serial Port Read Timeout" & vbCrLf
            End Try
    
        End Sub


    Microsoft Technology Associate (MTA)

    • Sugerido como Resposta Heloisa PiresModerator terça-feira, 10 de julho de 2012 13:44
    • Marcado como Resposta FFDESOUSA terça-feira, 10 de julho de 2012 20:26
    quinta-feira, 5 de julho de 2012 16:04