Leitura Serial p/Balanças c/IO_LIB
Enviado: 20 Abr 2005 13:24
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.
Alguma dica para um erro "básico"?
Atenciosamente,
Janis Peters Grants.
Skype: gransoft
http://www.gransoft.com.br
gransoft@zipmail.com.br
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)
***
Atenciosamente,
Janis Peters Grants.
Skype: gransoft
http://www.gransoft.com.br
gransoft@zipmail.com.br