Logo Hardware.com.br
matheusryndack
matheusrynda... Tô em todas Registrado
2K Mensagens 41 Curtidas

Porta Serial (RS-232) + Visual Basic

#1 Por matheusrynda... 22/06/2009 - 14:53
Olá pessoal!
Vou desenvolver uns projetos com PIC, em que ele manda e recebe informação pela porta serial.
Uso a linguagem VB, pois achei ela mais fácil!
Então,
eu gostaria de acessar ler e escrever na serial.
Tipo assim:
a 9600bps;
1 stop e 1 start bit,
sem paridade.
Como faço isso? Pesquisei um monte e não achei nada!

Matheus Ryndack
br_branco
br_branco Membro Senior Registrado
341 Mensagens 22 Curtidas
#4 Por br_branco
22/06/2009 - 18:17
O rogercom já conhecia, mas ele usa C ou C++.
, Na maioria dos exemplos sim, mas repare que a conversão dos exemplos de c/c++ para vb é muito intuitiva, principalmente quando se usa a API.

Veja o artigo "CONECTANDO 8 TECLADOS NA PORTA SERIAL ATRAVÉS DE UM MICROCONTROLADOR PIC 16F877 PARA CONTROLE DE ACESSOS", nesse artigo na segunda ou terceira pagina, ele dá vários exemplos de como poderia ficar o código em "vb, c, delphi, etc...".

Quanto ao "pic" caso você não conheça o protocolo, também irá encontrar muitas rotinas prontas na net, bastando apenas fazer algumas adaptações para sua necessidade.
matheusryndack
matheusrynda... Tô em todas Registrado
2K Mensagens 41 Curtidas
#5 Por matheusrynda...
22/06/2009 - 18:20
br_branco disse:
, Na maioria dos exemplos sim, mas repare que a conversão dos exemplos de c/c++ para vb é muito intuitiva, principalmente quando se usa a API.

Veja o artigo "CONECTANDO 8 TECLADOS NA PORTA SERIAL ATRAVÉS DE UM MICROCONTROLADOR PIC 16F877 PARA CONTROLE DE ACESSOS", nesse artigo na segunda ou terceira pagina, ele dá vários exemplos de como poderia ficar o código em "vb, c, delphi, etc...".

Vou ver.

Quanto ao "pic" caso você não conheça o protocolo, também irá encontrar muitas rotinas prontas na net, bastando apenas fazer algumas adaptações para sua necessidade.

Como assim??
Eu sei mais ou menos o RS232 com os Stop Bit, Start Bit etc...
Agora fiz umas experiências com o Terminal do MikroBasic, Deu tudo certo.
Fiz um programa que agente manda um dado e o pic manda ele denovo!
E com isso muda o estado de um LED Ficou masssa!

Matheus Ryndack
matheusryndack
matheusrynda... Tô em todas Registrado
2K Mensagens 41 Curtidas
#8 Por matheusrynda...
22/06/2009 - 18:57
hum....
Vou dar uma estudada...
pessoal,
não teria algo fácil fácil, como nos PICs?
Tipo assim:


usart_init(9600) 'Inicia o módulo serial do PIC
if usart_data_ready=1 then 'se tiver um dado para ser lido
variavel=Usart_read 'sim, lê o dado
Usart_write(variavel) 'envia o conteúdo da variavel pela usart
end if
qual outra linguagem me recomendariam? Eu sei pouco de VB, ja´fiz alguns programas achei legal... mas esse negócio de API me complicou tudo!
Vou dar uma olhada no exemplo fergo.
obrigado a todos!

Matheus Ryndack

Edit________
Tinha o VB instalado em um PC com XP para mim treinar...
Agora fui instalar o VB6 no Vista e ele diz que não é compatível!
Que que eu faço?
Posso fazer o desenvolvimento no XP, e depois compilar e rodar no vista?
Eu queria fazer programas que rodem em qualquer lugar para poder colocar meus projetos aqui no fórum!
Então o que é melhor continuar com o VB ou mudar? delphi seria bom? Eu queria uma linguagem visual... E não texto... E fácil ao mesmo tempo!? isso seria pedir demais?

Matheus Ryndack
Fergo
Fergo Highlander Registrado
9.3K Mensagens 1.1K Curtidas
#9 Por Fergo
22/06/2009 - 22:57
Eu tenho o VB6 instalado no Vista e já testei inclusive no Seven. Ambos funcionaram sem problemas (e os aplicativos compilados também). Matheus, quanto a API, por mais que você tenha achado confusa, é algo que o VB6 faz muito bem. Depois que você entende como usar, fica tão lógico quanto declarar uma outra função qualquer. Recomendo esse site para usar como referência a API. Destinado ao VB e com exemplos para todas elas:
http://allapi.mentalis.org/

Fergo
Site pessoal www.fergonez.net
Portfolio
www.fbirck.com
Artigos
Informática
br_branco
br_branco Membro Senior Registrado
341 Mensagens 22 Curtidas
#10 Por br_branco
22/06/2009 - 23:20
Eu ainda não usei o vista, mas como o @Fergo já falou eu creio que não deve haver problema algum, se mesmo assim não conseguir instalar, você poderia optar por usar umas maquinas virtuais ("virtualbox" por exemplo) com isso ficaria até mais facil você testar seus projetos com vários "OS".

E pode acreditar que os mais faceis são vb e delphi, use o google e pesquise por "vb6 serial port", veja outro exemplo que embora simples é completo para enviar e receber os dados. http://www.programmers-corner.com/sourcecode/111.

Nesse exemplo é criado um form com 2 textbox e um command button, e mais a adição do componente "mscomm", se você reparar com meia duzia de cliques e algumas linhas de código você já tem algo bem funcional. Caso não queira usar o pic para testar esse código você pode optar por fazer um cabo "loop-back" e usar somente o programinha para ver o funcionamento.
matheusryndack
matheusrynda... Tô em todas Registrado
2K Mensagens 41 Curtidas
#11 Por matheusrynda...
23/06/2009 - 12:17
Fergo disse:
Eu tenho o VB6 instalado no Vista e já testei inclusive no Seven. Ambos funcionaram sem problemas (e os aplicativos compilados também). Matheus, quanto a API, por mais que você tenha achado confusa, é algo que o VB6 faz muito bem. Depois que você entende como usar, fica tão lógico quanto declarar uma outra função qualquer. Recomendo esse site para usar como referência a API. Destinado ao VB e com exemplos para todas elas:
http://allapi.mentalis.org/

Fergo

Então vou dizer para ele executar mesmo assim... Vou fazer uns testes, com o PIC que responde com o mesmo dado... Ele faz o papel de um loop-back com o amigo disse.

br_branco disse:
Eu ainda não usei o vista, mas como o @Fergo já falou eu creio que não deve haver problema algum, se mesmo assim não conseguir instalar, você poderia optar por usar umas maquinas virtuais ("virtualbox" por exemplo) com isso ficaria até mais facil você testar seus projetos com vários "OS".

E pode acreditar que os mais faceis são vb e delphi, use o google e pesquise por "vb6 serial port", veja outro exemplo que embora simples é completo para enviar e receber os dados. http://www.programmers-corner.com/sourcecode/111.

Nesse exemplo é criado um form com 2 textbox e um command button, e mais a adição do componente "mscomm", se você reparar com meia duzia de cliques e algumas linhas de código você já tem algo bem funcional. Caso não queira usar o pic para testar esse código você pode optar por fazer um cabo "loop-back" e usar somente o programinha para ver o funcionamento.

Vou testar com o vista...
Aqui eu tenho um PC com XP e 98 e outro Vista e 7, assim fica fácil testar....
Vou fazer uns testes e posto!
Obrigado pela ajuda amigos!

Matheus Ryndack

Olha o codigo que o br_branco passou é facil:
Vejam se a minha interpretação está certa: (comentários em português)

[code=rich]
1 form with
'1 textbox : name=text1, multiline=true, scrollbars=3(both)
'1 textbox : name=text2
'1 command button
'1 mscomm control (Microsoft Comm Control 6.0)
Option Explicit

Private Sub Command1_Click() 'ao clicar no botão
With MSComm1 'abre o MScomm
'make sure the serial port is open
If .PortOpen = False Then .PortOpen = True 'abre a porta
'send the data (including a tailing carriage return as often needed)
.Output = Text2.Text & vbCr 'envia o conteudo de Text2 concatrenado com vb Cr
End With 'MSComm1 'finaliza o mscomm
'não sei o que é agora =D
With Text2
'place the focus back to the textbox
.SetFocus
'select the current text to be overwritten
.SelStart = 0
.SelLength = Len(.Text)
End With 'Text1
End Sub

Private Sub Form_Load()
With MSComm1 'Usa a API ou o MScom. Qual que é?
'make sure the serial port is not open (by this program)
If .PortOpen Then .PortOpen = False 'se a porta estiver aberta .PortOpen é falso (o que é isso?)
'set the active serial port
.CommPort = 2 'Faz ele se comunicar pela com2
'set the badurate,parity,databits,stopbits for the connection
.Settings = "9600,N,8,1" 'abre a conexão em 9600bps, Com o parãmetro N que não sei o que é(vocês sabem?) modo de 8bits e 1 algo que também não sei o que é cap_feceiro.png:
'set the DRT and RTS flags
.DTREnable = True 'liga o DTR 'isso pro PIC fica desligado...
.RTSEnable = True 'liga o RTS
'enable the oncomm event for every reveived character
.RThreshold = 1 'não sei o que é!
'disable the oncomm event for send characters
.SThreshold = 0 'tambén não sei
'open the serial port
.PortOpen = True 'abre a porta, isso?
End With 'MSComm1 'Finaliza o MSComm1.
With Text1
'aqui coisas de aparência que não tem haver com a comunicação
'set the properties for the displaying textbox
.BackColor = vbCyan
.Locked = True
.Text = ""
End With 'Text1
With Text2
'set the properties for the 'send' textbox
.TabIndex = 0
.Text = ""
End With 'Text2
With Command1
'set the properties for the 'send' command button
.Caption = "&Send"
.Default = True
.TabIndex = 1
End With 'Command1
End Sub

Private Sub Form_Resize()
Dim sngWidth As Single, sngHeight As Single
Dim sngDisplayHeight As Single
Dim sngTxtWidth As Single
Dim sngCmdWidth As Single, sngCmdHeight As Single
'calculate the inner size of the form
sngWidth = ScaleWidth
sngHeight = ScaleHeight
With Command1
'resize and reposition the command button
sngCmdHeight = .Height
sngCmdWidth = .Width
sngDisplayHeight = sngHeight - sngCmdHeight
sngTxtWidth = sngWidth - sngCmdWidth
.Move sngTxtWidth, sngDisplayHeight, sngCmdWidth, sngCmdHeight
End With 'Command1
'resize and reposition the label
Text1.Move 0, 0, sngWidth, sngDisplayHeight
'resize and reposition the textbox
Text2.Move 0, sngDisplayHeight, sngTxtWidth, sngCmdHeight
End Sub

Private Sub MSComm1_OnComm()
Dim strInput As String
With MSComm1
'test for incoming event
Select Case .CommEvent
Case comEvReceive
'display incoming event data to displaying textbox
strInput = .Input
Text1.SelText = strInput
End Select
End With 'MSComm1
End Sub


[/code]

As minhas interpretações estão certaS?? Esse aqui não vai dar erro de priviligied instruction?

Matheus Ryndack
br_branco
br_branco Membro Senior Registrado
341 Mensagens 22 Curtidas
#12 Por br_branco
23/06/2009 - 13:50
Suas interpretações estão quase todas certas, quanto ao "With MSComm1", a instrução "With" até "End With" indica que você está se referindo ao objeto mencionado, que nesse caso é o controle "MSComm1".

Se não fosse usado o "With" as seguintes linhas teriam que ser escritas como:
If MSComm1.PortOpen = False Then MSComm1.PortOpen = True

Para resumir melhor o "With" permite que você ignore o nome do controle.

Quando você tiver duvidas sobre um controle/propriedades como é o caso da propriedade "RThreshold = 1", jogue no google o nome do controle.nome da propriedade. exemplo "MSComm1.RThreshold" , com isso você acha a definição rapidinho.
matheusryndack
matheusrynda... Tô em todas Registrado
2K Mensagens 41 Curtidas
#13 Por matheusrynda...
23/06/2009 - 16:15
Opa,
Que bom que está quase certo =D.
Então ainda não fiz os testes mas vou fazer quando tiver um tempo, talvez hoje de noite...
Obrigado pelas dicas!

Matheus Ryndack

edit____
pesquisando sobre mscomm olha o que achei:
http://www.macoratti.net/vb_comm.htm

edit2___
esse exemplo acima funcionou... ele manda um comando e recebe... bem legal....
Vou me basear nele! o que acham?

matheus ryndack

Matheus Ryndack
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal