Fwd: Recepção Serial no Visual Basic

169 views
Skip to first unread message

Haroldo Amaral

unread,
May 15, 2013, 1:04:36 PM5/15/13
to Texas Instruments Info para Designers e Projetistas, sis_emb...@googlegroups.com
Estou estudando sobre a recepção de dados seriais no visual basic (por conta própria) e surgiu uma dúvida.

Como faço para ler a porta "automaticamente" através de uma interrupção, assim como fazemos nos microcontroladores? Existe alguma maneira?

Fazendo pooling com um timer consegui fazer a leitura e receber valores sucessivos enviados pelo MSP430, entretanto quando utilizo valores muito pequenos de intervalo acabo paralisando o programa que parece ficar preso a função de receber os dados seriais.

Grato.

--
Haroldo L. M. Amaral
Mestrando em Eng. Elétrica - UNESP Bauru
Tecnólogo em Sistemas Biomédicos - FATEC Bauru



--
Haroldo L. M. Amaral
Mestrando em Eng. Elétrica - UNESP Bauru
Tecnólogo em Sistemas Biomédicos - FATEC Bauru

Davyd Melo

unread,
May 15, 2013, 1:16:21 PM5/15/13
to sis_emb...@googlegroups.com, Texas Instruments Info para Designers e Projetistas
Normalmente em .NET os controles gráficos (botões, labels, etc.) possuem atributos e eventos na janela de Propriedades (Properties). Por exemplo, a SerialPort pode ter um evento associado a recepção de dados. Já fiz uma aplicação em C# onde utilizei esse evento de recepção. Verifica se existe pra Visual Basic também.

Abraço


2013/5/15 Haroldo Amaral <agae...@gmail.com>

--
Você está recebendo esta mensagem porque se inscreveu no grupo "sis_embarcados" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para sis_embarcado...@googlegroups.com.
Para postar neste grupo, envie um e-mail para sis_emb...@googlegroups.com.
Visite este grupo em http://groups.google.com/group/sis_embarcados?hl=pt-BR.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
 
 



--
Davyd Bandeira de Melo - Instituto Atlântico
Firmware Trainee
Oracle Certified Java Programmer 6.0
Linux User #526110

Email Pessoal: davy...@gmail.com
Atlante Mail: davyd...@atlantico.com.br
Messenger: davy...@hotmail.com
Skype: davydmelo

Rafael Dias

unread,
May 15, 2013, 1:26:11 PM5/15/13
to sis_emb...@googlegroups.com, Texas Instruments Info para Designers e Projetistas
Opa!

Eu não programo com Visual Basic a muito tempo.
Nas épocas do VB6, usava um tal de Microsoft Commom Control. Funcionava...

De lá para cá mudaram algumas coisas, acho que para o seu tipo de aplicação, a leitura do material do Jan Axelson será uma boa:
http://www.lvr.com/serial_ports_dotnet.htm

A descrição do objeto Serial Port do .NET está no MSDN:
http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx

E tem essas dicas... Podem ser úteis:
http://blogs.msdn.com/b/bclteam/archive/2006/10/10/top-5-serialport-tips-_5b00_kim-hamilton_5d00_.aspx

Espero ter ajudado!

Rafael Dias



--
--
Você recebeu esta mensagem porque está inscrito no Grupo Google "Texas Instruments Info para Designers e Projetistas".
Para postar uma mensagem neste grupo, mande um email para texa...@googlegroups.com
Para deixar o grupo, mande um email para texas-sc+u...@googlegroups.com
Para mais opções, visite este grupo no endereço:
http://groups.google.com/group/texas-sc?hl=pt-BR
 
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Texas Instruments Info para Designers e Projetistas" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para texas-sc+u...@googlegroups.com.

Caio

unread,
May 15, 2013, 2:18:08 PM5/15/13
to sis_emb...@googlegroups.com
No VB6 era o MSCOMM um ícone de um telefone é bem tranquilo de usar.

http://www.macoratti.net/vbserial.htm

Abraços
> "sis_embarcados" dos Grupos do Google.
> Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie
> um e-mail para sis_embarcado...@googlegroups.com.
> Para postar neste grupo, envie um e-mail para
> sis_emb...@googlegroups.com.
> Visite este grupo em http://groups.google.com/group/sis_embarcados?hl=pt-BR.
> Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
>
>



--
----------------------------------------------
Caio Pereira

Haroldo Amaral

unread,
May 15, 2013, 10:21:06 PM5/15/13
to Texas Instruments Info para Designers e Projetistas, sis_emb...@googlegroups.com
Pessoal, obrigado pelas dicas. Procurando um pouco mais consegui descobrir como receber no pc através do evento (interrupção), dai cai em outro problema... Mas consegui resolver. consegui utilizar o "chart" do visual basic para desenhar gráficos e com isso desenhar uma senoide gerada pelo launchpad.

De início é simples, mas é a base para algumas ideias que tenho por aqui.

Se alguém quiser o código eu posto por aqui.

Caio

unread,
May 16, 2013, 8:42:58 AM5/16/13
to sis_emb...@googlegroups.com
Haroldo,

Python também é legal para serial, bem simples.
Mas a facilidade do vb com interface gráfica é indiscutível hehehe

Haroldo Amaral

unread,
May 16, 2013, 10:08:46 AM5/16/13
to sis_emb...@googlegroups.com
É, tenho visto o pessoal utilizar muito python, mas não faço a mínima ideia de como seja. O Visual Basic lembrava vastamente de quando era pequeno e brincava no VB6.

Haroldo Amaral

unread,
May 16, 2013, 10:12:04 AM5/16/13
to sis_emb...@googlegroups.com, Texas Instruments Info para Designers e Projetistas
Caso ajudar quem precisar, vou colar o código do form. Esta com um bug referente a um thread inseguro que usei mas.. não sei ainda o que é isso, novidades...


-----------------------------------------------------------------------------------------------------------------

'   Não sei qual a função destes imports mas podem ser omitidos
Imports System
Imports System.Threading
Imports System.IO.Ports
'Imports System.ComponentModel


Public Class Form1

    Dim serial_port_list As Array                                           ' array que recebe a lista das portas seriais
    Delegate Sub settextcallback(ByVal [text] As String)
    Dim send_string As String                                               ' string que de envio pela serial - caracteres ASCII
    Dim valor_recebido As Integer                                           ' variável que armazena o valor recebido pela serial
    Dim contador_dados_recebidos As Integer = 0                             ' conta quantos dados foram recebidos



    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        CheckForIllegalCrossThreadCalls = False                             ' previne o erro de segurança threads diferentes
        serial_port_list = IO.Ports.SerialPort.GetPortNames()               ' salva no array a lista de portas disponíveis
        serial_port_box.Items.AddRange(serial_port_list)                    ' adicionar as portas disponíveis ao combobox
        open_serial_button.Enabled = False                                  ' botão desabilitado - abrir conexao
        send_button.Enabled = False                                         ' botão desabilitado - enviar dado
        '        Chart1.ChartAreas("ChartArea1").AxisX.Minimum = 0                   ' define min eixo X - valores fixos
        '        Chart1.ChartAreas("ChartArea1").AxisX.Maximum = 64                  ' define max eixo X - valores fixos
        '        Chart1.ChartAreas("ChartArea1").AxisY.Minimum = 0                   ' define min eixo Y - valores fixos
        '        Chart1.ChartAreas("ChartArea1").AxisY.Maximum = 255                 ' define max eixo Y - valores fixos
    End Sub


    Private Sub open_serial_button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles open_serial_button.Click
        serial_rs232.PortName = serial_port_box.Text                        ' define a porta serial escolhida no combobox

        Try
            serial_rs232.Open()                                             ' tenta abrir a conexão
        Catch ex As Exception
            MsgBox(Err.Description)                                         ' em caso de erro - MSG
        Finally
            If serial_rs232.IsOpen = False Then                             ' se não conseguir abrir - exibe mensagem
                MsgBox("Esta conexão não pode ser aberta", MsgBoxStyle.Exclamation)
                open_serial_button.Enabled = False                          ' botão desabilitado
            End If
        End Try

        If serial_rs232.IsOpen Then                                         ' se estiver aberta
            send_button.Enabled = True                                      ' habilita botão - enviar
        End If

    End Sub


    Private Sub send_button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles send_button.Click
        send_string = TextBox1.Text                                         ' salva o valor to textbox na string de envio
        serial_rs232.Write(send_string)                                     ' escreve a string na porta serial - envia string

        If CheckBox1.Checked Then                                           ' caso checkbox marcado
            Timer1.Enabled = True                                           ' habilita o timer de repetição de envio
        Else
            Timer1.Enabled = False
        End If

    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        send_string = TextBox1.Text                                         ' timer para rotina de repetição de envio
        serial_rs232.Write(send_string)                                     ' envia a string de envio
    End Sub



    Private Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar1.Scroll
        Timer1.Interval = TrackBar1.Value                                  ' salva o valor do trackbar como intervalo do timer
    End Sub

    Private Sub serial_port_box_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles serial_port_box.SelectedIndexChanged
        open_serial_button.Enabled = True                                   ' habilita o botão de envio após selecionar uma porta no combobox
    End Sub


    ' rotina de tratamente da interrupção (evento) serial
    Private Sub serial_rs232_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles serial_rs232.DataReceived
        valor_recebido = serial_rs232.ReadByte                              ' salva o byte recebido na variável
        contador_dados_recebidos += 1                                       ' incrementa o contador de dados recebidos
        Label1.Text = "Valor recebido: " + valor_recebido.ToString          ' escreve o valor recebido no label1
        Label2.Text = "Contador: " + contador_dados_recebidos.ToString      ' escreve o contador no label2
        Chart1.Series("Series1").Points.AddY(valor_recebido)                ' adiciona um novo ponto no gráfico com o valor recebido

        If contador_dados_recebidos = 65 Then                               ' se a quantidade recebida for igual a
            contador_dados_recebidos = 0                                    ' zera o contador
            Chart1.Series("Series1").Points.Clear()                         ' zera os pontos do gráfico
        End If

    End Sub


    Private Sub desconnect_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles desconnect_btn.Click
        Timer1.Enabled = False                                              ' desabilita o timer de repetição de envio antes de desconectar
        serial_rs232.Close()                                                ' fecha a conexaão
        open_serial_button.Enabled = True                                   ' habilita o botão de abrir conexão
    End Sub


End Class

-----------------------------------------------------------------------------------------------------------------

Caio

unread,
May 16, 2013, 10:24:15 AM5/16/13
to sis_emb...@googlegroups.com
O melhor comando do VB6 era On Error Resume Next kkkkkkk o "matador
de bugs" mais gambiarra impossível!

Haroldo Amaral

unread,
May 16, 2013, 10:34:00 AM5/16/13
to sis_emb...@googlegroups.com
kkkk, não conhecia esse.

Mas já corrigi o bug sem gambi, agora esta tudo OK

Diego Moreira

unread,
Jan 2, 2014, 10:13:46 PM1/2/14
to texa...@googlegroups.com, sis_emb...@googlegroups.com
Haroldo, estou terminando de desenvolver um supervisório em Visual Basic para inicialmente controlar os 2 LED's e receber o valor da temperatura do sensor interno no MSP430G2553. O acionamento dos LED' s e a leitura da temperatura já está funcionando. O problema é que tem horas que quando vou acionar um LED estou achando que pode estar ocorrendo algum conflito entre o envio do dado para acionar e o recebimento do dado com o valor da temperatura. Você acha que pode ser esse o problema ? Tem alguma ideia de como posso resolver ? Valeu !

Rafael.Dias

unread,
Jan 3, 2014, 4:37:32 AM1/3/14
to diegu...@gmail.com, texa...@googlegroups.com, sis_emb...@googlegroups.com
Olá! 

Sobre ler a porta serial de forma assíncrona, você pode olhar a função WaitComEvent. 

Dê uma lida nesta documentação do MSDN:  msdn.microsoft.com/en-us/library/ff802693.aspx

Abraço!
Rafael Dias


Sent from Samsung Mobile
--
--
Você recebeu esta mensagem porque está inscrito no Grupo Google "Texas Instruments Info para Designers e Projetistas".
Para postar uma mensagem neste grupo, mande um email para texa...@googlegroups.com
Para deixar o grupo, mande um email para texas-sc+u...@googlegroups.com
Para mais opções, visite este grupo no endereço:
http://groups.google.com/group/texas-sc?hl=pt-BR
 
---
You received this message because you are subscribed to the Google Groups "Texas Instruments Info para Designers e Projetistas" group.
To unsubscribe from this group and stop receiving emails from it, send an email to texas-sc+u...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Diego Moreira

unread,
Jan 3, 2014, 7:42:34 AM1/3/14
to Rafael.Dias, texa...@googlegroups.com, sis_emb...@googlegroups.com

Rafael, consegui resolver o problema. Era no buffer de entrada. Usei uma função para limpar o mesmo.

agaelema .

unread,
Jan 3, 2014, 12:18:16 PM1/3/14
to sis_emb...@googlegroups.com
na época que estava testando consegui resolver o problema criando uma thread que recebia através da interrupção os dados que iam chegando, mas em uma velocidade grande me lembro que chegava a buggar o soft.

Mas estava conseguindo acionar o led da launchpad e receber formas de onda senoidais que gerava nela.

Haroldo L. M. Amaral
Mestrando em Eng. Elétrica - UNESP Bauru
Tecnólogo em Sistemas Biomédicos - FATEC Bauru
Técnico em Eletrônica - CTI/UNESP Bauru


--
Você está recebendo esta mensagem porque se inscreveu no grupo "sis_embarcados" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para sis_embarcado...@googlegroups.com.
Para postar neste grupo, envie um e-mail para sis_emb...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages