Leitura de BALANCA via Serial - As vezes nao captura!

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

Moderador: Moderadores

Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

Leitura de BALANCA via Serial - As vezes nao captura!

Mensagem por ANDRIL »

Faço a captura através da serial do peso de uma ELGIN 15Kg. No início começa bem, depois de algumas pesagens começa a demorar para trazer o resultado, tendo que fazer de 3 a 5 tentativas para retornar o peso. Quando saio e entro no sistema volta ao normal e repete o problema novamente.
Não sei se há algum problema com a configuração da balança (setup dela que requer algum configuração) ou se são os comandos que uso no HARBOUR para uso da serial.

Código: Selecionar todos

//--iniciando a porta
nPorta=2 //COM2
nVeloc=9600
cParid="N"
nBits=8
nParad=1
cInicia="P"
nTemp=0.5
nTama=15

DO WHILE .T.
   COM_HARD(.T.)
   
   nConf := Com_Init(nPorta,nVeloc,cParid,nBits,nParad)

   if .not. nConf
      COM_CLOSE(nPorta)
      Wait "Falha na inicializacao da porta"
      EXIT
      
   endif

   //--envia o caracter de inicio para a balanca
   nRest= COM_SEND(nPorta,cInicia) //CHR(80))

   //--aguarda um tempo para a leitura
   inkey(nTemp)
   
   //--recebe os dados da porta COM
   resulta=COM_READ(nPorta,nTama)
   
   //--limpa o buffer
   COM_FLUSH(nPorta)

   COM_HARD(.F.)

   //--fecha a porta
   COM_CLOSE(nPorta)
   ? resulta
   wait"Resultado da pesagem"   
EXIT
ENDDO

No meu HBP esta

Código: Selecionar todos

-lhbct
-lxhb
Acontece com mais alguém? Alguma idéia do que pode ser?
Até+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Leitura de BALANCA via Serial - As vezes nao captura!

Mensagem por sygecom »

Andril,
Esse negocio de balança é complicado quando se fala em confiança,não da para confiar no que está vindo no buffer da porta, tem que verificar tudo,por exemplo veja quando usar COM_SEND() veja se realmente conseguiu enviar :
com_Send( <nComPort>, <cString|nChar> ) -> <nNotSendLength>

O mais importante de todos: COM_READ(), veifique se realmente retornou o que pediu, caso contrario lima(COM_FLUSH()) e recomece o processo.
com_Read( <nComPort>, [<nLength>], [<lNoDelete>] ) -> <cCharacterstring>

Basicamente é isso que faço nas leituras de balança,por que não da para confiar 100% no retorno dessas biroscas, quando está usando uma DLL do fabricante é basicamente isso que eles fazem na DLL para garantir o retorno, já desenvolvi DLL para fabricante de balança.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder