Solicitud de ejemplo para leer los datos de bascula TORREY PCR-40 por USB

180 views
Skip to first unread message

Servoy2x

unread,
Oct 14, 2022, 1:33:32 PM10/14/22
to Comunidad de Visual Foxpro en Español
Hola estimados foxeros, solicito de la manera mas atenta algún ejemplo para leer los datos de bascula TORREY PCR-40 por USB o similar
Muchas gracias por su atención.

Octavio Rodriguez

unread,
Oct 14, 2022, 3:51:49 PM10/14/22
to publice...@googlegroups.com
ERNESTO ESPERO TE SIRVA, ALGUIEN LO PUBLICO NO RECUERDO QUIEN ES EL AUTOR, SOLO LO MODIFIQUE A MIS REQUERIMIENTOS

SET DECIMALS TO 3 && ** Si no, me redondea el peso a 2 decimales
LOCAL el_peso, eran, ns
eran = SET( 'DECIMALS', 1)
el_peso2=0
el_peso=" "
ThisForm.olecontrol1.commPort= 5
thisform.olecontrol1.Settings= "115200,n,8,1"
thisform.olecontrol1.InputLen= 10 && NUMERO DE CARACTERES QUE ENVIA LA BASCULA
thisform.olecontrol1.Portopen= .t.
thisform.olecontrol1.CTSTimeout=15
thisform.olecontrol1.Interval=15
FOR i=1 TO 100
thisform.olecontrol1.Output= CHR(80) &&+ CHR(13)
wait WINDOW AT 30,60 " Obteniendo el peso de la bascula, Espere por Favor ... "  TIMEOUT 1 &&nowait TIMEOUT 3
el_peso = Thisform.olecontrol1.input && ** Aqui esta el peso medido
el_peso = LEFT(ALLTRIM(el_peso),6) &&RIGHT( el_peso, LEN( el_peso) - 1)
el_peso2 = VAL(el_peso) &&INT(VAL( LEFT( el_peso, 7)))
IF el_peso2>0
     exit
   ENDIF    
next
Thisform.olecontrol1.portopen=.f.
IF el_peso2>40
  el_peso=0
else
         thisform.tcantidad.Value=el_peso2
        endif


El vie, 14 oct 2022 a las 12:33, Servoy2x (<ernesto...@gmail.com>) escribió:
Hola estimados foxeros, solicito de la manera mas atenta algún ejemplo para leer los datos de bascula TORREY PCR-40 por USB o similar
Muchas gracias por su atención.

--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/e2308287-e250-42fe-b0a6-ac417d11a78bn%40googlegroups.com.

Ernesto Arias

unread,
Oct 14, 2022, 7:23:50 PM10/14/22
to publice...@googlegroups.com
Hola Octavio muchisimas gracias por tu atención voy a probar.
Saludos.

almonts ( www.ontariombd.es )

unread,
Oct 17, 2022, 2:06:43 PM10/17/22
to Comunidad de Visual Foxpro en Español
Te comento.
Como decimos aquí en España, leer el peso de la báscula es una auténtico "dolor de Huevos"...
Te comento como la hago yo.

Primero descárgate un software que lea lo que recibe el puerto COM. Un sniffer de puertos.
El mejor es este.  https://www.com-port-monitoring.com/es/ Es de pago, pero los primero 14 dias son de prueba.
Verás lo que recibe el puerto.

Una vez sepas esto, puedes utilizar la rutina que te adjunto verás que hay 2 versiones una normal, y una dentro de una clase formulario.
Que no sea nada... 

*********************************************************************************************
*    PESO BASCULA
*********************************************************************************************

PROCEDURE FBASCULA()

    RELEASE cPeso, nPeso
    LOCAL   cPeso, nPeso
    cPeso=""
    nPeso=00
    X12N=00


    IF UPPER(ALLTRIM(KVSBFORM))<>"F"    &&    NO FORMULARIO
   
        IF VARTYPE(oCombas)='U' OR VARTYPE(oCombas)<>'O'
            RELEASE oCombas
            PUBLIC  oCombas AS Object
            oCombas = CreateObject('MSCOMMLib.MSComm')
            oCombas.commPort =ALLTRIM(KVSBCOM)    && Numero del puerto
            oCombas.Settings =ALLTRIM(KVSBVEL) && Seteo de velocidad,paridad,bit de datos,bit stop
            oCombas.PortOpen    = .T.            && Abre el puerto
        ENDIF
       
        IF UPPER(ALLTRIM(KVSBPRO))="TISA"    && protocolo tisa
            oCombas.InBufferCount = 0
            oCombas.Output = "98000001"+chr(13)+chr(10)    && protocolo TISA
            FOR TT=01 TO 50
                INKEY(0.1)        &&    Wait WINDOW "" TIMEOUT 0.1
                cPeso = oCombas.Input          && Almacena la lectura en una variable
                cPeso = RIGHT( cPeso, LEN(cPeso)-01)
                nPeso = VAL(LEFT(cPeso,07))
                nPeso =(nPeso-9000000)/1000        && protocolo TISA
                X12N=nPeso
                IF nPeso>00
                    EXIT
                ENDIF        
            NEXT TT
        ENDIF
   
        IF UPPER(ALLTRIM(KVSBPRO))="DOLAR"    && protocolo DOLAR
            oCombas.InBufferCount = 0
            oCombas.Output = "$"                && protocolo DOLAR
            FOR TT=01 TO 50
                INKEY(0.1)        &&    Wait WINDOW "" TIMEOUT 0.1
                cPeso = oCombas.Input          && Almacena la lectura en una variable

                    cPeso = RIGHT( cPeso, LEN(cPeso)-01)
                    cPeso    =CHRTRAN(cPeso,CHR(02),'')    && INICIO TEXTO
                    cPeso    =CHRTRAN(cPeso,CHR(65),'')    && A
                    cPeso    =CHRTRAN(cPeso,CHR(32),'')    && ESPACIO
                    cPeso    =CHRTRAN(cPeso,CHR(46),'')    && PUNTO
                    cPeso    =CHRTRAN(cPeso,CHR(44),'')    && COMA
                    cPeso    =CHRTRAN(cPeso,CHR(10),'')    && CL
                    cPeso    =CHRTRAN(cPeso,CHR(13),'')    && CR
                    cPeso    =CHRTRAN(cPeso,CHR(03),'')    && FINAL TEXTO
               
                nPeso = VAL(ALLT(cPeso))
                nPeso =(nPeso/1000)        && protocolo DIVIDO POR 1000
                X12N=nPeso
                IF nPeso>00
                    EXIT
                ENDIF        
            NEXT TT
        ENDIF

*!*            IF VARTYPE(oCombas)='O'
*!*                oCombas.PortOpen = .F.        
*!*                oCombas=.NULL.
*!*                RELEASE oCombas
*!*            ENDIF

    ENDIF

    *//    
   
    IF UPPER(ALLTRIM(KVSBFORM))="F"    &&    FORMULARIO
   
        IF VARTYPE(oComFormB)='U' OR VARTYPE(oComFormB)<>'O'
            RELEASE oComFormB
            PUBLIC  oComFormB AS Object
            oComFormB = CREATEOBJECT('Form')
            oComFormB.visible=.F.
            oComFormB.AddObject("oCom","Olecontrol","MSCOMMLib.MSComm")
            oComFormB.oCom.commPort =ALLTRIM(KVSBCOM)    && Numero del puerto
            oComFormB.oCom.Settings =ALLTRIM(KVSBVEL) && Seteo de velocidad,paridad,bit de datos,bit stop
            oComFormB.oCom.PortOpen    = .T.            && Abre el puerto
        ENDIF
       
        IF UPPER(ALLTRIM(KVSBPRO))="TISA"    && protocolo tisa
            oComFormB.oCom.InBufferCount = 0
            oComFormB.oCom.Output = "98000001"+chr(13)+chr(10)    && protocolo TISA
            FOR TT=01 TO 50
                INKEY(0.1)        &&    Wait WINDOW "" TIMEOUT 0.1
                cPeso = oComFormB.oCom.Input          && Almacena la lectura en una variable
                cPeso = RIGHT( cPeso, LEN(cPeso)-01)
                nPeso = VAL(LEFT(cPeso,07))
                nPeso =(nPeso-9000000)/1000    && protocolo TISA
                X12N=nPeso
                IF nPeso>00
                    EXIT
                ENDIF        
            NEXT TT
        ENDIF
   
        IF UPPER(ALLTRIM(KVSBPRO))="DOLAR"    && protocolo DOLAR
            oComFormB.oCom.InBufferCount = 0
            oComFormB.oCom.Output = "$"                && protocolo DOLAR
            FOR TT=01 TO 50
                INKEY(0.1)        &&    Wait WINDOW "" TIMEOUT 0.1
                cPeso = oComFormB.oCom.Input          && Almacena la lectura en una variable

                    cPeso = RIGHT( cPeso, LEN(cPeso)-01)
                    cPeso    =CHRTRAN(cPeso,CHR(02),'')    && INICIO TEXTO
                    cPeso    =CHRTRAN(cPeso,CHR(65),'')    && A
                    cPeso    =CHRTRAN(cPeso,CHR(32),'')    && ESPACIO
                    cPeso    =CHRTRAN(cPeso,CHR(46),'')    && PUNTO
                    cPeso    =CHRTRAN(cPeso,CHR(44),'')    && COMA
                    cPeso    =CHRTRAN(cPeso,CHR(10),'')    && CL
                    cPeso    =CHRTRAN(cPeso,CHR(13),'')    && CR
                    cPeso    =CHRTRAN(cPeso,CHR(03),'')    && FINAL TEXTO
                   
                    WAIT WINDOW cPeso
                   
                nPeso = VAL(ALLT(cPeso))
                nPeso =(nPeso/1000)        && protocolo DIVIDO POR 1000
                X12N=nPeso
                IF nPeso>00
                    EXIT
                ENDIF        
            NEXT TT
        ENDIF

*!*            IF VARTYPE(oComFormB)='O'
*!*                oComFormB.oCom.PortOpen = .F.        && Cierra el puerto
*!*                oComFormB=.NULL.
*!*                RELEASE oComFormB
*!*            ENDIF


    ENDIF

    RETURN(nPeso)    

ENDPROC

Ernesto Arias

unread,
Oct 17, 2022, 4:13:51 PM10/17/22
to publice...@googlegroups.com
Hola Almonts muchisimas gracias.
Voy a probar.
Saludos.
Reply all
Reply to author
Forward
0 new messages