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