Page 1 of 1

Puerto seriales en Harbour máximo COM9

Posted: Fri Mar 27, 2015 9:50 am
by Salvador
Hola a todos,

Al parecer las funciones nativas de Harbour para el manejo de puertos serie, no reconocen los puertos a partir del COM10.

Este código de ejemplo extraído de los ejemplos de Harbour, no reconoce el COM10 ni superiores, que existen en el equipo.

Code: Select all

#include "hbcom.ch"

PROCEDURE Main( cPortName )

   LOCAL cString := "ATE0" + Chr( 13 ) + "ATI3" + Chr( 13 )
   LOCAL nTimeOut := 3000 // 3000 miliseconds = 3 sec.
   LOCAL nResult
   LOCAL nPort := 1
        
        cPortName := "COM10"

   IF ! Empty( cPortName )
      hb_comSetDevice( nPort, cPortName )
   ENDIF
   IF ! hb_comOpen( nPort )
      ? "Cannot open port:", nPort, hb_comGetDevice( nPort ), ;
        "error: " + hb_ntos( hb_comGetError( nPort ) )
   ELSE
      ? "port:", hb_comGetDevice( nPort ), "opened"
      IF ! hb_comInit( nPort, 9600, "N", 8, 1 )
         ? "Cannot initialize port to: 9600:N:8:1", ;
           "error: " + hb_ntos( hb_comGetError( nPort ) )
      ELSE
         nResult := hb_comSend( nPort, cString, hb_BLen( cString ), nTimeOut )
         IF nResult != hb_BLen( cString )
            ? "SEND() failed,", nResult, "bytes sent in", nTimeOut / 1000, ;
              "sec., expected:", hb_BLen( cString ), "bytes."
            ? "error: " + hb_ntos( hb_comGetError( nPort ) )
         ELSE
            ? "SEND() succeeded."
         ENDIF

         WAIT "Press any key to begin reading..."
         cString := Space( 32 )
         nTimeOut := 500 // 500 milliseconds = 0.5 sec.
         nResult := hb_comRecv( nPort, @cString, hb_BLen( cString ), nTimeOut )
         IF nResult == -1
            ? "RECV() failed,", ;
              "error: " + hb_ntos( hb_comGetError( nPort ) )
         ELSE
            ? nResult, "bytes read in", nTimeOut / 1000, "sec."
         ENDIF
      ENDIF
      ? "CLOSE:", hb_comClose( nPort )
   ENDIF

   RETURN
Sabe alguien a que es debido y como saltarse esta limitación ?

Gracias de antemano.

Re: Puerto seriales en Harbour máximo COM9

Posted: Fri Mar 27, 2015 10:10 am
by Salvador
Por lo que he podido comprobar las funciones para puertos serie de FWH tienen la misma limitación.

Alguien sabe como acceder a puerto serie superior al COM9?

Gracias.

Re: Puerto seriales en Harbour máximo COM9

Posted: Fri Mar 27, 2015 3:16 pm
by karinha
http://support.microsoft.com/pt-br/kb/819036

PUERTO SERIAL

Se utiliza para conectar diversos dispositivos, como ratones, escáneres y mucho más. Cayó en desuso debido a la aparición de mejores alternativas (como USB).

Re: Puerto seriales en Harbour máximo COM9

Posted: Fri Mar 27, 2015 6:26 pm
by Salvador
Siento discrepar, todavía se fabrican multitud de dispositivos en el ambito industrial que incluyen puertos RS232 como modems o dispositivos para comunicación M2M.
En mi trabajo los tengo que utilizar con frecuencia.

Mi duda es como acceder a los COM apartir del 10 desde Harbour.

Re: Puerto seriales en Harbour máximo COM9

Posted: Fri Mar 27, 2015 6:41 pm
by karinha

Code: Select all

#include "FiveWin.ch"

function Main()

   local oDlg, nComm := InitComm()

   DEFINE DIALOG oDlg TITLE "Testing Comm functions"

   oDlg:bCommNotify = { | nComm, nStatus | BytesAtPort( nComm, nStatus ) }

   ACTIVATE DIALOG oDlg ;
      ON INIT EnableCommNotification( nComm, oDlg:hWnd, 20, 20 )

   CloseComm( nComm )

return nil

function InitCOMM()

   local cDcb, nError, nBytes
   local nComm := OpenComm( "COM2", 1024, 128 )

   if ! BuildCommDcb( "COM2:9600,n,8,1", @cDcb )
      MsgStop( "Error BUILD!" )
      return .f.
   endif

   #ifdef __CLIPPER__
      if ! SetCommState( cDcb )
   #else   
      if ! SetCommState( nComm, cDcb )
   #endif   
      MsgStop( "Error SETCOMM!" )
      return .f.
   endif

   ? nComm

return nComm

function BytesAtPort( nComm, nStatus )

   local cBuffer := Space(20 )

   Msginfo( nSTATUS)
   ReadComm( nComm, @cBuffer )  // <<<<---- program will lock here
   Msginfo( AllTrim( cBuffer ))

return nil
 

Re: Puerto seriales en Harbour máximo COM9

Posted: Sat Mar 28, 2015 11:24 pm
by Salvador

Re: Puerto seriales en Harbour máximo COM9

Posted: Sun Aug 16, 2015 11:03 am
by Verhoven
Cómo pudiste acceder a puertos por encima del 9?

Re: Puerto seriales en Harbour máximo COM9

Posted: Mon Aug 17, 2015 6:03 pm
by Antonio Linares
Se explica en ese enlace de Microsoft, hay que usar el nombre "\\.\COM10"