Puerto seriales en Harbour máximo COM9

Puerto seriales en Harbour máximo COM9

Postby Salvador » Fri Mar 27, 2015 9:50 am

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  Expand view
#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: 144
Joined: Sun Dec 18, 2005 3:18 pm
Location: España

Re: Puerto seriales en Harbour máximo COM9

Postby Salvador » Fri Mar 27, 2015 10:10 am

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

Re: Puerto seriales en Harbour máximo COM9

Postby karinha » Fri Mar 27, 2015 3:16 pm

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 - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7804
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Puerto seriales en Harbour máximo COM9

Postby Salvador » Fri Mar 27, 2015 6:26 pm

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

Re: Puerto seriales en Harbour máximo COM9

Postby karinha » Fri Mar 27, 2015 6:41 pm

Code: Select all  Expand view

#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 - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7804
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Puerto seriales en Harbour máximo COM9

Postby Salvador » Sat Mar 28, 2015 11:24 pm

Saludos
Salvador
Salvador
 
Posts: 144
Joined: Sun Dec 18, 2005 3:18 pm
Location: España

Re: Puerto seriales en Harbour máximo COM9

Postby Verhoven » Sun Aug 16, 2015 11:03 am

Cómo pudiste acceder a puertos por encima del 9?
Verhoven
 
Posts: 520
Joined: Sun Oct 09, 2005 7:23 pm

Re: Puerto seriales en Harbour máximo COM9

Postby Antonio Linares » Mon Aug 17, 2015 6:03 pm

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42077
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 23 guests