FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Ayuda con puertos COM
Posts: 51
Joined: Fri Jun 30, 2006 06:56 PM
Ayuda con puertos COM
Posted: Sun Sep 07, 2008 12:51 AM

Hola amigos.

Mi problema es el siguiente.

Tengo un SCANNER Metrologic IS 1650 2D

He bajado la rutina de lectura de puertos la puse abajo , donde la implemente y me funciona bien creo al menos con esta configuracion , pero segun me he dado cuenta el tamaño de la lectura debe de ser 700 bytes, cuando leo el codigo 2d me graba un archivo de 660 bytes .

MI pregunta debo de cambiar alguna parametrizacion de esta rutina, de ser asi donde.

LA configuracion de "COM4:9600,N,8,1" trabaja pero algo falta o sobra

Agradezco ayuda cualquiera.

include "Fivewin.ch"

//* Tomado del foro Fivetechsoft

FUNCTION MAIN()

LOCAL oDlg

LOCAL oGet, cTxt := ""

LOCAL nCom

DEFINE DIALOG oDlg;
       SIZE 800, 200;
       TITLE "Terminale"

@ 0, 0 GET oGet VAR cTxt  MEMO

oGet:bKeyDown = { | nKey | Tasti( nCom, nKey ) }

ACTIVATE DIALOG oDlg;
         ON INIT ( oGet:AdjClient(),;
                   nCom := APRICOM( oDlg, oGet ),;
                   IF( nCom < 0, oDlg:End(), ) );
         CENTER

 IF nCom >= 0; CLOSECOMM( nCom ); ENDIF
 MemoWrit(  "cd.txt", cTxt )
 Lector()
RETURN NIL

STATIC FUNCTION TASTI( nCom, nKey )

  • SENDSTR( nCom, CHR( nKey ) )

    RETURN NIL

STATIC FUNCTION APRICOM( oDlg, oGet )

LOCAL nCom, cDcb

BEGIN SEQUENCE
    nCom = OPENCOMM( "COM4", 1,1 )
    IF nCom < 0
        ? "Error de Apertura de Puerto de Comunicaciones."
        BREAK
    ENDIF

    BUILDCOMMDCB( "COM4:9600,N,8,1", @cDcb )

    IF !SETCOMMSTATE( nCom, cDcb )
        ? "Errore di impostazione della porta di comunicazione."
        BREAK
    ENDIF

    oDlg:bCommNotify = { | nCom | Connect( nCom, oGet ),;
                                  EnableCommNotification( nCom, oDlg:hWnd, 1, -1 ) }

    IF !ENABLECOMMNOTIFICATION( nCom, oDlg:hWnd, 1, -1 )
        ? "Errore di abilitazione della notifica."
        BREAK
    ENDIF
RECOVER
    nCom = -1
END SEQUENCE

RETURN nCom

STATIC FUNCTION CONNECT( nCom, oGet )

LOCAL cStr

ENABLECOMMNOTIFICATION( nCom,0, 1, -1 ) && 0,1,-1

cStr = RECEIVESTR( nCom )

cStr = STRTRAN( cStr, CHR( 13 ), "" )

cStr = STRTRAN( cStr, CHR( 10 ), CRLF )

oGet:Append( cStr )

RETURN NIL

STATIC FUNCTION SENDSTR( nCom, cString )

  • LOCAL nBytes := WRITECOMM( nCom, cString )

  • RETURN nBytes = LEN( cString )
    return

STATIC FUNCTION RECEIVESTR( nCom )

LOCAL cBuf := SPACE(701)

RETURN LEFT( cBuf, READCOMM( nCom, @cBuf ) )

Gracias.
Busmatic de CR

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Ayuda con puertos COM
Posted: Mon Sep 08, 2008 10:16 AM

Prueba a comentar estas dos llamadas, ya que te estan quitando y modificando bytes!

// cStr = STRTRAN( cStr, CHR( 13 ), "" )
// cStr = STRTRAN( cStr, CHR( 10 ), CRLF )

regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion