VB 2008 Porta Serial (pra variar!)

Programação Visual Basic

Moderadores: 51, guest2003

VB 2008 Porta Serial (pra variar!)

Mensagempor Flaviofrc » 31 Jan 2009 19:32

Olá amigos,

Estou tentando fazer um simples terminal serial no VB 2008 e estou tendo dificuldades, aparentemente minha dificuldade é bem basica mas como não sei nada de VB ai vai...

Primeiramente fiz uma tecla para mandar uma string de caracteres pela serial e funcionou certinho.... Mas quando tento receber uma string o dito cujo recebe uma linha e trava o programa, realmente não sei o que acontece...

O código segue abaixo:
------------------------------------------------------------------------------------
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
SerialPort1.Open()
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

SerialPort1.WriteLine("D" + Chr(13))

End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

Dim Retorno As String
Retorno = SerialPort1.ReadLine()
RichTextBox1.Text = Retorno

End Sub

End Class
------------------------------------------------------------------------------------

Agradeço qualquer ajuda...
Flavio
Flaviofrc
Byte
 
Mensagens: 111
Registrado em: 16 Out 2006 17:32
Localização: São Paulo

Re: VB 2008 Porta Serial (pra variar!)

Mensagempor Rodrigo_P_A » 01 Fev 2009 13:37

vc tentou usar o teste para verificar quantos bytes existem no buffer de recepcao,. antes de mandar ler?

eu não uso essa função readline, não sei como funciona. eu uso a função readbyte ( eu acho, estou sem meu pc aqui, agora).

mas tente fazer isso, tente testar quantos bytes existem no buffer de recepção, pode ser aí que está o problema
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2236
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

Re: VB 2008 Porta Serial (pra variar!)

Mensagempor Rodrigo_P_A » 01 Fev 2009 16:58

Rodrigo_P_A escreveu:vc tentou usar o teste para verificar quantos bytes existem no buffer de recepcao,. antes de mandar ler?

eu não uso essa função readline, não sei como funciona. eu uso a função readbyte ( eu acho, estou sem meu pc aqui, agora).

mas tente fazer isso, tente testar quantos bytes existem no buffer de recepção, pode ser aí que está o problema



cara, depois de almoçar e ficar sem fazer nada, só assistindo TV, fui ào banheiro hehehe, e lembrei de um detalhe kkkk:

o comando ReadLine "Lê uma linha" , uma linha em vb, sempre termina com o caractere: CHR(10) + CHR(13)

ou seja, seu programa deve estrar travando, pq não tem uma linha no buffer, ou seja, você pode até ter enviado um dado, mas se não enviou os caracteres CHR(10) "\n" + o CHR(13) "\r" ele vai ficar travado mesmo, aguardando.

ao invés de fazer isso, coloque no timer assim:

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

dim lDado as byte, retorno as string=""
If Serial.ReadBufferSize > 0 Then
For b = 1 To Serial.ReadBufferSize
Try
lDado = CByte(Serial.ReadByte)
Catch
Exit Sub
End Try
Retorno=Retorno & chr(lDado) ' monto o dado recebido na string.
next
RichTextBox1.Text = Retorno

ou se quiser exibir os dados em HEX na tela:

dim lDado as byte, retorno as string=""
If Serial.ReadBufferSize > 0 Then
For b = 1 To Serial.ReadBufferSize
Try
lDado = CByte(Serial.ReadByte)
Catch
Exit Sub
End Try
Retorno=Retorno & HEX(lDado) ' monto o dado recebido na string.
Retorno = Retorno & " "
next
RichTextBox1.Text = Retorno


End Sub
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2236
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

Mensagempor Flaviofrc » 02 Fev 2009 20:56

Olá Rodrigo,

Vou tentar essas modificações para ver no que vai dar...

Depois posto aqui se deu certo ou não...

Valew...
Flavio
Flaviofrc
Byte
 
Mensagens: 111
Registrado em: 16 Out 2006 17:32
Localização: São Paulo

Mensagempor Flaviofrc » 02 Fev 2009 21:20

Olá Rodrigo,

Fiz o que você sugeriu mas nada feito, logo que dou RUN a ampulheta ja informa direto que o programa parou de responder ou está travado sei lá, exatamente como ocorria antes, só que dessa vez nehum caractere apareceu na tela como ocorria antes.

Alias me certifiquei de que os carcteres /r/n estão sendo enviados.. mas nada feito...

Mais alguma sujestão?
Flavio
Flaviofrc
Byte
 
Mensagens: 111
Registrado em: 16 Out 2006 17:32
Localização: São Paulo

Mensagempor Rodrigo_P_A » 03 Fev 2009 08:26

Flaviofrc escreveu:Olá Rodrigo,

Fiz o que você sugeriu mas nada feito, logo que dou RUN a ampulheta ja informa direto que o programa parou de responder ou está travado sei lá, exatamente como ocorria antes, só que dessa vez nehum caractere apareceu na tela como ocorria antes.

Alias me certifiquei de que os carcteres /r/n estão sendo enviados.. mas nada feito...

Mais alguma sujestão?
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2236
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

Mensagempor Rodrigo_P_A » 03 Fev 2009 08:27

Flaviofrc escreveu:Olá Rodrigo,

Fiz o que você sugeriu mas nada feito, logo que dou RUN a ampulheta ja informa direto que o programa parou de responder ou está travado sei lá, exatamente como ocorria antes, só que dessa vez nehum caractere apareceu na tela como ocorria antes.

Alias me certifiquei de que os carcteres /r/n estão sendo enviados.. mas nada feito...

Mais alguma sujestão?


se vc quiser me enviar o projeto que vc fez, eu olho para vc
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2236
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

Mensagempor joao » 03 Fev 2009 09:15

Ola Flavio,

Você está testando com um loop entre TX e RX na serial?
Se sim, testa primeiro essa conexao, usando o hyperterminal do windows.
Veja se o que vc digita está aparecendo(desabilite todos os controles de fluxo).

Se isso funcionar, parta para apenas a parte de envio do seu prog. Ou seja, deixe o hyperterminal aberto e mande textos pelo seu programa. Veja se está ok.

Se isso funcionar, tente agora o inverso. Apenas espere texto pela seu programa e envie textos usando o hyperterminal.

Funcionou todos esses passos? Problema de código mesmo! :)

PS: Eu sugiro ler byte a byte no começo só para ver o que está acontecendo e depois mude para line a line.

[]'s
Avatar do usuário
joao
Byte
 
Mensagens: 463
Registrado em: 17 Out 2006 08:21

Mensagempor Flaviofrc » 03 Fev 2009 11:54

Olá Rodrigo,

Segue abaixo todo o código do projeto mas se vc preferir posso enviar por e-mail tambem....

Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
SerialPort1.Open()
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

SerialPort1.WriteLine("D" + Chr(13))

End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim carac As String
carac = SerialPort1.ReadLine()
RichTextBox1.Text = carac
End Sub

End Class

//-----------------------------------------------------------------------------

Olá Para vc tambem João...

Bem a coisa funciona da seguinte maneira:

tenho um dispositivo que envia uma linha de dados pela serial, que é o que quero receber na tela do PC.

já tenho um programa tipo terminal que fiz no VB6 com a componente MSCOMM e funciona perfeitamente, mas para efeito de upgrade no windows Vista por exemplo quero fazer o mesmo no VB 2008 que é diferente e ai está minha questão.

Parece tudo tão mais simples mas não funfa...... :(
Flavio
Flaviofrc
Byte
 
Mensagens: 111
Registrado em: 16 Out 2006 17:32
Localização: São Paulo

Mensagempor Rodrigo_P_A » 03 Fev 2009 15:41

Flaviofrc escreveu:Olá Rodrigo,

Segue abaixo todo o código do projeto mas se vc preferir posso enviar por e-mail tambem....

Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
SerialPort1.Open()
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

SerialPort1.WriteLine("D" + Chr(13))

End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim carac As String
carac = SerialPort1.ReadLine()
RichTextBox1.Text = carac
End Sub

End Class

//-----------------------------------------------------------------------------

Olá Para vc tambem João...

Bem a coisa funciona da seguinte maneira:

tenho um dispositivo que envia uma linha de dados pela serial, que é o que quero receber na tela do PC.

já tenho um programa tipo terminal que fiz no VB6 com a componente MSCOMM e funciona perfeitamente, mas para efeito de upgrade no windows Vista por exemplo quero fazer o mesmo no VB 2008 que é diferente e ai está minha questão.

Parece tudo tão mais simples mas não funfa...... :(



Kra, olha é o seguinte, vc continua a usar:

carac = SerialPort1.ReadLine()

isso provavelmente trava o teu programa, e ele num vai receber mais nada, inclusive deve travar até a tela do teu programa, pois ele pára aí, e provavalmente não executa mais nada.

vou fazer um exemplo simples e postar para vc ver como é que eu faço e funciona.
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2236
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

Mensagempor Flaviofrc » 03 Fev 2009 16:46

Olá Rodrigo,

Em primeiro lugar agradeço imenssamente sua ajuda, está sendo de grande valia.

Postei esse código pois é o primeiro que usei, pois o codigo que vc me passou nos posts anteriores causavam o mesmo efeito, o programa trava, a tela trava e só falta travar o PC inteiro...rsrsrsrs.

ficarei aguardando seu codigo de exemplo...

Abraço.
Flavio
Flaviofrc
Byte
 
Mensagens: 111
Registrado em: 16 Out 2006 17:32
Localização: São Paulo

Mensagempor Flaviofrc » 09 Fev 2009 23:37

Olá Rodrigo e olá a todos,

Ainda estou com o dito problema, alguem tem mais alguma sujestão de codigo??


Desde já agradeço.
Flavio
Flaviofrc
Byte
 
Mensagens: 111
Registrado em: 16 Out 2006 17:32
Localização: São Paulo


Voltar para Visual Basic

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x