[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