El viejo clipper nos sigue la pista....
Tenemos un cliente que usaba un viejo programita ( clipper + lib desconocida de comunicaciones ) que leia desde una balanza electronica via puerto de comunicaciones.
Varias de las instrucciones las ubico o entiendo, pero en general existen mas de las que podria analizar...
Entonces lo que busco, es alguna LIB actual o PRGs, o clase.... lo que sea de un simil de estas funciones....alguien tendra por ahi estas cosas ?
Dejo aqui un ejemplo de lo que logre rescatar
Gracias de antemano a todos
- Code: Select all Expand view RUN
Function Main()
Local mnPesoAux := 15.37
mnPesoAux := val( substr( pesaje(1,2400,'e',7,1,19000) ,3,10) )
? mnPesoAux
save to PESOINVE.MEM all like mnPesoAux
Return NIL
**************************************************************
Function Pesaje(puerta,baudios,paridad,dato,parada)
***************************************************************
Local COK
Local LINEA
Local T1
Local NUM
Local D
local BASE := 9
Local mnPeso
Local aPesos := {}
COM_CLOSE(PUERTA)
COK=COM_OPEN(PUERTA,256)
COM_INIT(PUERTA,BAUDIOS,PARIDAD,DATO,PARADA)
COM_SOFT(PUERTA, .T.)
LINEA = ""
MILLISEC(300)
DATO = "13,"+STR(BASE,1,0)+";1.1.1%y"
COM_SEND(PUERTA,DATO)
MILLISEC(300)
T1 = TIME()
DO WHILE !COM_SOFT_S(PUERTA)
IF (TIMETOSEC(TIME()) - TIMETOSEC(T1)) > 15
EXIT
ENDIF
ENDDO
IF (TIMETOSEC(TIME()) - TIMETOSEC(T1)) < 15
NUM = 0
DO WHILE .T.
IF COM_COUNT(PUERTA) > 0 .OR. ( NUM > 0 .AND. NUM <= 9000)
D=COM_READ(PUERTA,1)
IF D = CHR(10)
if len(aPesos) > 100
exit
else
aadd(aPesos, LINEA )
endif
LINEA = ""
ELSE
IF LEN(LINEA) = 0
LINEA = D
NUM = 0
ELSE
LINEA = LINEA + D
NUM = 0
ENDIF
IF LINEA = "ENDofDB"
EXIT
ENDIF
ENDIF
ELSE
EXIT
ENDIF
ENDDO
ENDIF
COM_CLOSE(PUERTA)
mlOK := .f.
mnPeso := 0
if len(aPesos) > 1
mnPeso := val(substr(atail(aPesos), (at('kg', atail(aPesos) ) - 7) , 7))
For i=1 to len(aPesos)
? mnPeso , val(substr(alltrim(aPesos[i]), (at('kg', alltrim(aPesos[i]) ) - 7) , 7))
if mnPeso # val(substr(alltrim(aPesos[i]), (at('kg', alltrim(aPesos[i]) ) - 7) , 7))
mlOK := .t.
endif
next
endif
if mlOK
mnPeso := 0
endif
? mnPeso
RETURN mnPeso