Como receber dados pela COM1 e colocar numa variavel

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Paulo Eduardo Wanke
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 19 Abr 2022 17:37
Localização: Curitiba

Como receber dados pela COM1 e colocar numa variavel

Mensagem por Paulo Eduardo Wanke »

Fui amigo do Pablo Cesar e foi ele que me apresentou este forum.
Eu e o Plabo desenvolvíamos programas no Clipper. Há 4 anos o Paplo me incentivou a começar a usar o HMG (Harbour).
Infelizmente ele nos deixou prematuramente e não pode me ajudar mais.
Gostaria da ajuda deste forum para resolver um problema o qual já quebrei muito minha cabeça e não consegui.

Meu problema é o seguinte:
Desenvolvi um programa para um restaurante por quilo.
Preciso que o programa receba os dados das balanças (pesagem dos pratos) através da COM1 (saída serial).
A balança está me enviando um texto e eu não consigo ler.
Não acho o comando que receba esses dados (texto). Pode ser numa variável ou text-box ou label.

Alguém pode me dar uma luz?
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Como receber dados pela COM1 e colocar numa variavel

Mensagem por Itamar M. Lins Jr. »

Olá!
Bem, vindo ao forum! Usando a lib hbwin.
Pois tem outras libs no Harbour que fazem a mesma coisa.

Código: Selecionar todos

*****************
Function PegaPeso
*****************
*
*
Local oDlg, cTitle := 'Lendo o peso da balança...'
LOCAL cString := Chr( 5 )
LOCAL nResult, nPeso

Do While .t.

   oWinPort := win_Com():Init( "com1:", WIN_CBR_2400, WIN_NOPARITY, 8, WIN_ONESTOPBIT )

   IF ! oWinPort:Open()
      MsgStop("Erro lendo peso: " + oWinPort:ErrorText() )
      return 0
   Else
      IF !oWinPort:SetDTR( .T. )
          MsgInfo ( "SetDTR( .T. ) Falha:"+ oWinPort:ErrorText() )
      ENDIF

      IF ( nResult := oWinPort:Write( cString ) ) <> Len( cString ) //Mando o chr(5)
          msginfo( "Falha na escrita: "+ str(nResult) + " expected " + str(Len(cString)) )
      ENDIF
   EndIf

      oWinPort:Read( @xString,7)
      nPeso := val(substr(xString,2,5))/1000

      IF !oWinPort:Purge( .T., .T. )
         msginfo( "Falha no comando Purge()  :" + oWinPort:ErrorText())
      ENDIF
      oWinPort:Close()

   If empty(nPeso)
      MsgStop('Coloque um peso na balança !')
   Else
      exit
   EndIf

EndDo
Return nPeso
Troque MsgStop por alert()

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Paulo Eduardo Wanke
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 19 Abr 2022 17:37
Localização: Curitiba

Como receber dados pela COM1 e colocar numa variavel

Mensagem por Paulo Eduardo Wanke »

Muito obrigado!
Vou tentar agora mesmo!
Paulo Eduardo Wanke
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 19 Abr 2022 17:37
Localização: Curitiba

Como receber dados pela COM1 e colocar numa variavel

Mensagem por Paulo Eduardo Wanke »

WIN_CBR_2400, WIN_NOPARITY, WIN_ONESTOPBIT

O que são as variáveis acima?

IF ! oWinPort:Open()

a minha oWinPort não está Open, portanto não está pegando o texto que a balança está me mandando.

Deve ser as variáveis que eu as criei como sendo string para poder rodar a função PegaPeso()

Meu Agradecimento por estarem me ajudando

Abraços Paulo E. Wanke
frazato
Usuário Nível 3
Usuário Nível 3
Mensagens: 219
Registrado em: 08 Jul 2004 07:45

Como receber dados pela COM1 e colocar numa variavel

Mensagem por frazato »

viewtopic.php?f=4&t=9887&p=56481&hilit=Lerbalanca#p56481
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Como receber dados pela COM1 e colocar numa variavel

Mensagem por Itamar M. Lins Jr. »

Olá!
O que são as variáveis acima?
Estão no #include "hbwin.ch"

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Como receber dados pela COM1 e colocar numa variavel

Mensagem por Itamar M. Lins Jr. »

Olá!
portanto não está pegando o texto que a balança está me mandando.
Até onde sei, primeiro mandamos um sinal p/ a balança pedindo o peso, ela manda e processamos.
A Toledo tem uma forma de string e a Filizola outra e uma dessas fechou/vendeu... Tem um tempo que não mexo com isso.
Esse programa eu fiz no windows em outra cpu, estou usando o Linux agora para dizer o tamanho das string de cada marca.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Responder