Leitura Serial p/Balanças c/IO_LIB

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

gransoft
Usuário Nível 3
Usuário Nível 3
Mensagens: 321
Registrado em: 06 Jul 2004 17:48
Localização: UBERLÂNDIA-MG
Contato:

Leitura Serial p/Balanças c/IO_LIB

Mensagem por gransoft »

ARAGUARI-MG, 20 de abril de 2005.

Prezados Srs.,

Sobre leitura serial, para capturar dados de Balanças, realizo testes com a IO_LIB, onde, conforme ÚNICA orientação do Fabricante, devo ler uma STRING com 19 dígitos.

Postei a rotina abaixo, conforme vários exemplos da Internet. Porém, uma dúvida cruel:

Como manipular partes da tal STRING? Qualquer tentativa de trabalhar a variável (cDados, cBuffer) dentro do loop, com a informação lida, visivelmente em ASCII, e com o PESO correto, resulta em erro em tempo de execução, quando não retorna NIL.

Código: Selecionar todos

/*
Programa: CAPTURAR PESO EM BALANCAS 
Objetivo: Exemplo de comunicacao usando a Biblioteca IOLIB.lib
Autor   : JANIS PETERS GRANTS
Data    : 19/04/2005
*/
*
#include "IOLIB.CH"
*
LOCAL nX:=0, nOK:=0
PUBLIC cPesoFinal := SPACE(01)
PUBLIC cBuffer    := SPACE(19)
*
CLEAR
*
@ 01,01 SAY "COMUNICAÇÃO C/BALANÇAS               <Esc>"
@ 02,01 SAY "======================                Fim "
@ 03,01 SAY "1234567890123456789"
*
IF Abre_COM(COM3,BPS9600,EIGHT_DATA_BITS,NO_PARITY,ONE_STOP_BIT,IRQ4,@cBuffer)
   *
ELSE
   ALERT("Porta de Comunicação não Disponível!")
   QUIT
END
*
WHILE .T.
  *
  WHILE LASTKEY()#27
     * ? "Pressione <ESC> p/Capturar o Peso: "
     INKEY(.1)  // 0
     IF LASTKEY()==27
        EXIT
     END
    
   * cBuffer    := Le_COM(19,.F.)  // .F.
     cDados     := Le_COM(19,.F.)  // .F.

     @ 04,01 SAY cDados
     @ 05,01 SAY SUBSTR(cDados,8,5)

   * cPesoFinal := TRANSFORM(SUBSTR(cDados,8,5),'99999')

  END
  EXIT
END  && WHILE .T.
Fecha_COM()
* @ 06,01 SAY cPesoFinal
QUIT
***

FUNCTION Abre_COM(nPORT,nVELOC,nDADOS,nPARIDADE,nPARADA,nIRQ,cBuffer)
LOCAL lOk
lOk := INIT_PORT(nPORT,nVELOC,nDADOS,nPARIDADE,nPARADA,nIRQ,@cBuffer)
SETRTS(.T.)  && HABILITA RTS ...
RETURN(lOk)
***

FUNCTION Le_COM(nTam,lSTS)
LOCAL nN := 1, cVar, cSTS
INBUFCLR()
WHILE INBUFSIZE() < nTam .AND. LASTKEY()#27
   IF INBUFSIZE()==2 .AND. lSTS   && VERIFICAR STATUS ...
      cSTS := INCHR(2)
      IF cSTS#"L,"
         EXIT
      END
   END
   INKEY()
END
cVar := INCHR(nTam)
RETURN(cVar)
***

FUNCTION Fecha_COM()
LOCAL lOk
SETRTS(.F.)  && DESABILITA RTS ... 
lOk := UNINT_PORT()
RETURN(lOk)
***
Alguma dica para um erro "básico"?

Atenciosamente,
Janis Peters Grants.

Skype: gransoft
http://www.gransoft.com.br
gransoft@zipmail.com.br
gransoft
Usuário Nível 3
Usuário Nível 3
Mensagens: 321
Registrado em: 06 Jul 2004 17:48
Localização: UBERLÂNDIA-MG
Contato:

Re: Leitura Serial p/Balanças c/IO_LIB

Mensagem por gransoft »

gransoft escreveu: Alguma dica para um erro "básico"?
ARAGUARI-MG, 7 de maio de 2005.

Prezados Srs.,

Conforme POST anterior, qualquer tentativa de manipular a tal variável "cDados" gerava erro em tempo de execução, ou simplesmente travava o micro.

O interessante é que o TIPO da variável é indefinido, e seu conteúdo, NIL. Ponteiro ? Referência ?

Segue "solução":

Código: Selecionar todos

( ... )
*
WHILE .T.
   cPeso  := SPACE(01)
   xcDados := Le_COM(19,.F.)  // .F.
   cD := xcDados
   IF LASTKEY()==27
      EXIT
   END
   nI := 1
   WHILE  nI < LEN(cD)
      IF SUBSTR(cD,nI,1) $ "0123456789"
         cPeso := cPeso + SUBSTR(cD,nI,1)
      END
      cPeso := ALLTRIM(cPeso)
      IF LEN(cPeso) == 5
         cPesoFinal := cPeso
         @ 11,35 SAY cPesoFinal PICTURE '99999'
         EXIT
      END
      nI := nI + 1
   END
END  // WHILE .T.
*
Fecha_COM()
*
@ 13,35 GET cPesoFinal PICTURE '99999'
  READ
QUIT
***
( ... )
Atenciosamente,
Janis Peters Grants.

Skype: gransoft
http://www.gransoft.com.br
gransoft@zipmail.com.br
LuizHenrique
Usuário Nível 1
Usuário Nível 1
Mensagens: 5
Registrado em: 27 Dez 2005 14:34

problema semelhante.

Mensagem por LuizHenrique »

Preciso desenvolver algo que fique escutando a porta serial.

Estou com um problema semelhante a esse.
porem eu nao sei o tamanho da string q vou receber na porta serial.
e tambem recebo NIL,
quando uso o inchar(parametro) ele me retorna sempre algo do tipo "NIL", que nao sei o que é. se é um ponteiro se eh uma String.

Os parametros de comunicaçao estao corretos, pois a funçao que de envio q criei jah foi testada e funciona.

Se alguem puder me ajudar agradeço encarecidamente.
Obrigado.
jpalma
Usuário Nível 3
Usuário Nível 3
Mensagens: 153
Registrado em: 18 Ago 2003 14:15

Mensagem por jpalma »

Colegas

Tenho rotinas para as balanças Toledo e Filizola.
Vocês tem interesse?


sds
Avatar do usuário
filizola
Usuário Nível 3
Usuário Nível 3
Mensagens: 421
Registrado em: 19 Ago 2003 20:10
Localização: Belo Horizonte/MG

Mensagem por filizola »

tenho a rotina para balanças filizola, se interessar me fale que te passo.
fabiodocs
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 28 Dez 2005 15:44

Mensagem por fabiodocs »

Sera que é possivel então vc enviar as rotinas da filizola no email fabiodocs@ig.com.br...desde ja fico muito agradecido.


Consegui receber e interpretar os valors usando oas funções FOPEN, Fread...mas não consigo enviar comandos pela FWRITE....


Valeu , desde ja.
fabiodocs
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 28 Dez 2005 15:44

Mensagem por fabiodocs »

Sera que é possivel então vc enviar as rotinas da filizola no email fabiodocs@ig.com.br...desde ja fico muito agradecido.


Consegui receber e interpretar os valors usando oas funções FOPEN, Fread...mas não consigo enviar comandos pela FWRITE....


Valeu , desde ja.
LuizHenrique
Usuário Nível 1
Usuário Nível 1
Mensagens: 5
Registrado em: 27 Dez 2005 14:34

rotinas balanças

Mensagem por LuizHenrique »

Jpalma.

Envie entao por favor as rotinas para as balanças. talvez eu aprenda algo.
luizhen@gmail.com

obrigado
Responder