Consulta: bucle de lectura puerto COM

Consulta: bucle de lectura puerto COM

Postby fernandomoralesdr » Mon Mar 25, 2013 9:34 pm

Hola a todos.
Tengo un autómata que envía información periódicamente al puerto serie. ¿Podría alguien indicarme qué debo hacer para leer la información de dicho puerto y enviarla a un fichero de texto? Se supone que este programa debería estar en un bucle permanente escuchando dicho puerto.
He visto los programas de ejemplo de FWH\SAMPLES pero no lo tengo muy claro, así que algún programa de ejemplo me facilitaría bastante las cosas.
Gracias por adelantado.
Un saludo,
Fernando
Las Palmas de Gran Canaria
fernandomoralesdr
 
Posts: 139
Joined: Sun Apr 23, 2006 9:00 am

Re: Consulta: bucle de lectura puerto COM

Postby JmGarcia » Mon Mar 25, 2013 10:00 pm

Code: Select all  Expand view
lOkSalir:=.F.
nComm:=OpenComm("COM1:9600,N,8,1",2048,512)
**************************************************************
do while .not. lOkSalir
   nBytes :=2048
   cBuffer:=space(nBytes)
   nBytes:=ReadComm(nComm,@cBuffer)
   cDatosRecibidos:=left(cBuffer,nBytes)
enddo
**************************************************************
CloseHandle(nComm)


La variable lOkSalir puedes usarla para salir del bucle.

Por ejemplo con un boton de "Parar":
REDEFINE BUTTON oBoton ID 100 OF oDlg ACTION {lOkSalir:=.T.}
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Re: Consulta: bucle de lectura puerto COM

Postby benjiben143 » Mon Mar 25, 2013 10:06 pm

hola

yo tengo asi instalado en una bascula
1.-abro el puerto con este codigo
Code: Select all  Expand view

  nComm := OpenComm( "COM4",1024,128)
   if ! BuildCommDcb( "COM4:9600,e,8,1", @cDcb )
      nError = GetCommError( nComm )
      MsgInfo( "ERROR DE BASCULA: " + Str( nError ) )
     // ? "no hay bascula se cieera"
     // quit
   ELSE
   ENDIF

 


ya estando abierto el puerto
metes un ciclo en un do while o en un meter como gustes

2.- pongo el ciclo

Code: Select all  Expand view

DO WHILE .T.
       
        pp:=space(80)
        for i:= 1 to 2000
        next i
             
        READCOMM(NCOMM,@PP)
       
        datos:=ObtenV(PP)
       
       
       
       
        IF datos>=40
           ? "tomate la foto we jiji",
           SELECT BASCU
           BASCU->(DBAPPEND())
           REPLACE BASCU->REGI WITH "PRIMER WE"
           REPLACE BASCU->PESO WITH PENDE
           BASCU->(DBUNLOCK())
           bASCU->(dbcommit())
         
        ENDIF
         
        pp:=space(60)
     
   Enddo
 


3.- la funcion obtenv lo que hace es tomar el dato leeido que queda pp y hago x conversion a como manda la informacion el readcom

4.- el dato pp lo puedes mandar a un achivo con fcreate y fwrite

5.- en este ejemplo es para un sistema que tengo que toma la lectura del camion que esta pasando por la bascula
si el pesador no toma el peso el sistema en automatica detecta que si paso algo por la bascula mas de 40 kilos ,, me toma una foto de lo que esta en la buscula ,, lo guarda en archivo dbf,,, y al final en pocas palabras con esto hemos corrido a pesadores jijiji


saludos
Benjamin Casarrubias Moreno
Cd. Obregon, Sonora, Mexico
chino72vale@hotmail.com
Fivewin 16.05, Harbour 3.2, xharbour 1.2.1, Fivelinux, visual estudio 2013
benjiben143
 
Posts: 114
Joined: Wed Mar 11, 2009 7:32 pm
Location: Obregon, Sonora, Mexico

Re: Consulta: bucle de lectura puerto COM

Postby fernandomoralesdr » Tue Mar 26, 2013 7:28 pm

Amigos, muchas gracias por el par de ejemplos que me han mandado y que me servirán de mucho para el programa.
Un saludo,
Fernando
Las Palmas de Gran Canaria
fernandomoralesdr
 
Posts: 139
Joined: Sun Apr 23, 2006 9:00 am


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 9 guests