Page 1 of 1

Herramientas de comunicacion ( COMM port Tools )

Posted: Fri Feb 29, 2008 2:59 pm
by dbzap
Hola a todos....
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

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


Posted: Fri Feb 29, 2008 6:06 pm
by Antonio Linares
Julio,

Puedes usar perfectamente las funciones de comunicación de FiveWin, que son casi 100% compatibles las de 16 bits con las 32 bits.

Revisa fwh\samples\TestComm.prg

Posted: Fri Feb 29, 2008 8:54 pm
by dbzap
Antonio.
Desafortunadamente a simple vista no se reconocen los "sinonimos" en las funciones ( ej: COM_SOFT(PUERTA, .T.), COM_SOFT_S(PUERTA) )
Si tubieras alguno por ahi, encantado los usaria
Gracias de antemano

Posted: Fri Feb 29, 2008 11:18 pm
by Antonio Linares
Julio,

Los nombres no son exactamente los mismos.

Especifica los parámetros y lo que hace cada función y te decimos cuales son las funciones equivalentes en FiveWin

Posted: Mon Mar 03, 2008 1:01 pm
by dbzap
Antonio.
Parece una broma... pero si supiera las utilidades de cada funcion las habria traducido
Pero por el momento esta ayudandome jose_de_alfonso y espero sus comentarios.
De los tuyos tb muchas gracias.
Saludos

Posted: Tue Mar 04, 2008 8:43 am
by Antonio Linares
Julio,

Revisa samples\TestComm.prg y verás los nombres que usa Windows. La funcionalidad de esas funciones (valga la redundancia) es bastante obvia y esta ampliamente documentada por Microsoft y numerosos ejemplos disponibles en google :-)