Página 1 de 1

VB 2008 Porta Serial (pra variar!)

MensagemEnviado: 31 Jan 2009 19:32
por Flaviofrc
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...

Re: VB 2008 Porta Serial (pra variar!)

MensagemEnviado: 01 Fev 2009 13:37
por Rodrigo_P_A
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

Re: VB 2008 Porta Serial (pra variar!)

MensagemEnviado: 01 Fev 2009 16:58
por Rodrigo_P_A
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

MensagemEnviado: 02 Fev 2009 20:56
por Flaviofrc
Olá Rodrigo,

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

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

Valew...

MensagemEnviado: 02 Fev 2009 21:20
por Flaviofrc
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?

MensagemEnviado: 03 Fev 2009 08:26
por Rodrigo_P_A
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?

MensagemEnviado: 03 Fev 2009 08:27
por Rodrigo_P_A
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

MensagemEnviado: 03 Fev 2009 09:15
por joao
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

MensagemEnviado: 03 Fev 2009 11:54
por Flaviofrc
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...... :(

MensagemEnviado: 03 Fev 2009 15:41
por Rodrigo_P_A
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.

MensagemEnviado: 03 Fev 2009 16:46
por Flaviofrc
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.

MensagemEnviado: 09 Fev 2009 23:37
por Flaviofrc
Olá Rodrigo e olá a todos,

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


Desde já agradeço.