Usuário com melhor resposta
Conversão automática de ASCII

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
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
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 -
-
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'. -
É 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