Puerto seriales en Harbour máximo COM9

Post Reply
Salvador
Posts: 142
Joined: Sun Dec 18, 2005 3:18 pm
Location: España

Puerto seriales en Harbour máximo COM9

Post 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.
Saludos
Salvador
Salvador
Posts: 142
Joined: Sun Dec 18, 2005 3:18 pm
Location: España

Re: Puerto seriales en Harbour máximo COM9

Post 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.
Saludos
Salvador
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Puerto seriales en Harbour máximo COM9

Post 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).
João Santos - São Paulo - Brasil
Salvador
Posts: 142
Joined: Sun Dec 18, 2005 3:18 pm
Location: España

Re: Puerto seriales en Harbour máximo COM9

Post 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.
Saludos
Salvador
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Puerto seriales en Harbour máximo COM9

Post 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
 
João Santos - São Paulo - Brasil
Salvador
Posts: 142
Joined: Sun Dec 18, 2005 3:18 pm
Location: España

Re: Puerto seriales en Harbour máximo COM9

Post by Salvador »

Saludos
Salvador
Verhoven
Posts: 435
Joined: Sun Oct 09, 2005 7:23 pm

Re: Puerto seriales en Harbour máximo COM9

Post by Verhoven »

Cómo pudiste acceder a puertos por encima del 9?
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Puerto seriales en Harbour máximo COM9

Post by Antonio Linares »

Se explica en ese enlace de Microsoft, hay que usar el nombre "\\.\COM10"
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply