Puerto RS232 - Bascula Torrey

216 views
Skip to first unread message

xianse...@gmail.com

unread,
Nov 20, 2016, 11:31:00 AM11/20/16
to Comunidad de Visual Foxpro en Español
Buen día!

He estado indagando como configurar, enviar y recibir al puerto SERIAL... y a esto es a lo que he llegado.... al parecer tengo comunicación con el puerto serial (Bascula marca Torrey) cada que ejecuto el código..., se destella la pantalla de la bascula y enseguida recibo algún dato... 

Sin embargo... en mi campo de texto SOLO MUESTRA ESPACIOS...

SI ME PODRÍAN INDICAR.. EN QUE ESTOY MAL... Y COMO MEJORARLO... muchas gracias...

Saludos cordiales.

--------------------------------------------------------------------------------------------------------
public ComForm
ComForm = createobject('Form')
ComForm.addobject("Testcom","Olecontrol","MSCOMMLib.MSComm")
ComForm.Testcom.CommPort = &vPuerto && Use number port serial 1,2,3..etc...
ComForm.Testcom.Settings = &VConfig   && 14.4 Kbaud, No Parity, && 8 data Bits, 1 Stop Bit
ComForm.testcom.InputMode = 0  && 0- texto , 1 - Binary
*!* ComForm.Testcom.RThreshold = 1
*!* ComForm.Testcom.InBufferSize = 8192
ComForm.Testcom.PortOpen = .T.
ComForm.Testcom.InputLen = 0   
ComForm.Testcom.Output = "P" + chr(13) && Envio "P" para recibir datos.. * The chr(13) is needed to complete the modem command sequence
if ComForm.Testcom.CommEvent = 2 AND ComForm.Testcom.InBufferCount > 0
*!* vBufferCOM = vBufferCOM + ComForm.Testcom.Input &&CHR(VAL(ComForm.Testcom.Input))
for i=1 to 350
vbuffercom = vbuffercom + ComForm.Testcom.Input && leo el valor del buffers de entrada y lo almaceno
endfor
endif
thisform.txtPeso.value = ALLTRIM(vBufferCOM)
thisform.txtPeso.Refresh 
messagebox (vBufferCOM)
ComForm.Testcom.PortOpen = .F.
--------------------------------------------------------------------------------------------------------



francisco prieto

unread,
Nov 20, 2016, 12:10:24 PM11/20/16
to Comunidad de Visual Foxpro en Español
Si la informacion viene en binarios con  un campo de texto no vas a leer nada...

Utiliza un monitor de puertos serie para ver que es lo que en realidad trae y a partir de ahi vas a poder interpretar y mostrar el peso.

Saludos,

Pancho
Córdoba
Argentina

Carlos Alfaro

unread,
Nov 20, 2016, 2:54:26 PM11/20/16
to publice...@googlegroups.com

Saludos estimado colega:

 

Esa bascula envía texto, no te preocupes en cuanto a eso.

 

Pero debes saber, que para recibir no es en la misma secuencia de código, lo que quiero decir que no te funciona:

 

if ComForm.Testcom.CommEvent = 2 AND ComForm.Testcom.InBufferCount > 0

*!* vBufferCOM = vBufferCOM + ComForm.Testcom.Input &&CHR(VAL(ComForm.Testcom.Input))

for i=1 to 350

vbuffercom = vbuffercom + ComForm.Testcom.Input && leo el valor del buffers de entrada y lo almaceno

endfor

endif

thisform.txtPeso.value = ALLTRIM(vBufferCOM)

thisform.txtPeso.Refresh 

messagebox (vBufferCOM)

ComForm.Testcom.PortOpen = .F.

 

Hay dos posibilidades:

 

1.       Usar el método OnComm

a.       Funciona si en la propiedad RThreshold le pones un valor que no sea 0.

b.      En este método pones tu código de recepción de datos.

c.       NOTA: debes tomar en cuenta que si no recibe nada no se cerrara el puerto.

                                                              i.      ComForm.Testcom.PortOpen = .F.

2.       Usar un objeto Timer

a.       Deberia activarse agregando el código adjunto en la solicitud de peso

                                                               i.      Thisform.Timer.Interval = (Valor mayor que 0)

b.      Estara viendo el contenido del buffer del puerto (InBufferCount), al encontrar un valor mayor que 0 podes tomar lo que está en Input.

 

Perdona lo escueta de mi respuesta, pero espero que te sirva para entender porque no ves lo que envía la bascula.

 

Bendiciones.

 

 

Carlos Alfaro

Reply all
Reply to author
Forward
0 new messages