leer desde puerto serial

mark
27 de Junio del 2004
necesito saber como leer datos de un puerto serial de una pesa electronica para camiones, desde ya gracias

Gonzalo
27 de Junio del 2004
Podrias enviarme alguna ayuda referente al mismo tema de tu consulta, necesito tomar datos de una balanza electrónica serial para joyerias.
Desde ya Gracias

Luisen98
27 de Junio del 2004
Ricardo C. escribio. El procedimiento de hacerlo es como sigue:

1.- instanciar un objeto de Mscomm. Anclando el objeto en un form.
2.- especificar propiedades del puerto: velocidad, paridad, bit de datos, bit de parada, etc. (Settings)
3.- abrir puerto
4.- checar si hay datos en puerto, ya sea con un objeto timer para que a intervalos regulares obtenga los datos.
te adjunto un archivo donde viene el codigo que estoy usando para leer el puerto, y te voy a recomendar que busques mas informacion en el msdn o en el sitio de microsoft, para que veas las propiedades del objeto.
a mi me ha funcionado bien en, espero y te sirva


*** rutina para abrir puerto serial de comunicaciones
public oCom
public SendCmd
public firstTime

* creAR OBJETO
SendCmd = .F. && para determinar si requiere enviar comando para

* obtener data
FirstTime = .T.
oCom = Createobject ("MSCOMMLIB.MSCOMM")
oCom.CommPort = 1
oCom.Settings = "9600,N,8,1"
oCom.inputlen = 0
oCom.inputmode = 0
oCom.Rthreshold = 1
oCom.Inbuffercount = 0
oCom.PortOpen = .T.


* VALIDAR SI HAY DATOS EN EL PUERTO, ESTO LO TENGO EN UN OBJ TIMER
* if thisform.txtpesobasc.value =0
ocom.portopen =.T.
thisform.btn.fillcolor = rgb (255,0,0)

*ESTE EVENTO ME DEVUELVE 2 SI HAY DATOS EN EL BUFFER

evento = ocom.Commevent
if evento = 2
*
oCom.inputlen = 1 && LE DIGO QUE LA LECTURA ES DE 1 EN 1 BYTES

RESULTADO = ""
ltmp = ''
X = 1
xcount = 10
lnume = ''

*
* messagebox(str(OCOM.INBUFFERSIZE))
DO WHILE X <= OCOM.INBUFFERSIZE
x1 = ocom.input && TOMA EL DATO DEL PUERTO
if x1 = chr(13) or x1 = chr(10)
ltmp = ltmp + " "
exit do
else
ltmp = ltmp + x1
endif
if val(x1)> 0 or x1 = "0" or x1 = "." or x1= '-'
lnume = lnume + x1
endif
X= X+1
ENDDO
resultado = ltmp
*resultado1 = val(resultado)
MESSAGEBOX ( resultado,"peso")

Ocom.inbuffercount =0

if val(lnume) <> 0
* wait window( 'leyendo peso') nowait
thisform.txtpesobasc.value = val(lnume)
* thisform.txtkgs.value = thisform.txtpesobasc.value
* thisform.txtneto.value = thisform.txtkgs.value -
thisform.txttara.value
* thisform.refresh
thisform.btn.fillcolor = rgb (0,255,0)
endif
ocom.portopen =.F.
thisform.refresh


endif
***********

Otra forma es usando funciones de bajo nivel, FOPEN, FCLOSE, FREAD, etc.

Luisen98
27 de Junio del 2004
Consulten estos enlaces:
http://www.portalfox.com/modules.php?op=modload&name=News&file=article&sid=1020

http://www.portalfox.com/modules.php?op=modload&name=News&file=article&sid=416

cecimar
27 de Junio del 2004
Ya te envié info a tu mail.
Espero que te sirva.
Cecilia