Página 1 de 1

Como receber dados pela COM1 e colocar numa variavel

Enviado: 19 Abr 2022 18:02
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?

Como receber dados pela COM1 e colocar numa variavel

Enviado: 19 Abr 2022 18:44
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.

Como receber dados pela COM1 e colocar numa variavel

Enviado: 20 Abr 2022 17:24
por Paulo Eduardo Wanke
Muito obrigado!
Vou tentar agora mesmo!

Como receber dados pela COM1 e colocar numa variavel

Enviado: 21 Abr 2022 11:54
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

Como receber dados pela COM1 e colocar numa variavel

Enviado: 21 Abr 2022 20:01
por frazato
viewtopic.php?f=4&t=9887&p=56481&hilit=Lerbalanca#p56481

Como receber dados pela COM1 e colocar numa variavel

Enviado: 21 Abr 2022 21:37
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.

Como receber dados pela COM1 e colocar numa variavel

Enviado: 22 Abr 2022 09:10
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.