[C con Clase] Puerto Serie

Steven R. Davidson vze266ft en verizon.net
Jue Mar 13 21:21:48 CET 2008


Hola Sebastián,

Sebastian Oldani wrote:
> Aclaro, si hago una cadena de byte me anda bien.
> estoy haciendo asi
> byte cadena[16]={0x32,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34};
> y envio cadena y me llega al otro lado.
> ComPort->Write(cadena,16);
> El tema es que si mando un 0x00 me lo envia cortado, como si ese cero 
> estaria indicando que se termino la cadena. mientras que si mando 0x01 
> en lugar de los ceros me lo envia bien, el problema es que necesito si o 
> si enviar esos ceros.
> Alguna sugerencia??
> 

En primer lugar, siempre es aconsejable mandarnos algo de código en 
estas situaciones. En segundo lugar, espero que no estés intentando 
mostrar la "cadena" en pantalla haciendo algo así:

ComPort->Read( cadena, 16 );
cout << cadena;  // O cualquier función equivalente

Esto no representa los valores contenidos en 'cadena', porque 'cout <<' 
manipula 'cadena' como si fuese una cadena de caracteres y como no un 
array de bytes.

Por otra parte, comprueba que realmente se ha enviado los 16 bytes 
guardando el valor retornado por 'Write()'. Por ejemplo,

unsigned int nCant = ComPort->Write( cadena, 16 );

if( nCant != 16 )
   cerr << "ERROR" << endl;

Asimismo, aplicamos la lógica a la lectura:

unsigned int nCant = ComPort->Read( cadena, 16 );

if( nCant != 16 )
   cerr << "ERROR" << endl;

También deberías comprobar que ambas comunicaciones usan la misma 
velocidad de transmisión. Consulta la propiedad 'BaudRate'. Otro matiz a 
tener en cuenta es el tiempo de desconexión de la propiedad 'Timeouts'. 
Si es demasiada baja, quizá no dé tiempo a una lectura completa.


Espero que esto te oriente.

Steven






Más información sobre la lista de distribución Cconclase