Leer datos puerto serie Linux. RS2323. PID temperatura.

#1
Buenas tardes,

Estoy trabajando en enviar una cadena de caracteres, por ejemplo, @01201030071* por el puerto serie en linux (por /dev/ttyUSB0) . (Conecto usb al pc, este es un conversor usb -- rs232 que va a un controlador PID al que tengo q enviar ese comando para poner el controlador a 30grados, por ejemplo.

El envio me funciona y mi controlador de pone a los grados q le mando pero él me envia a mi una cadena de caracteres tipo: @01201000xxxx71* donde en xxxx me pone la temperatura, por lo tanto son los caracteres con los que me quiero quedar. Y el programa tiene q esperar a que ponga xxxx=0300 y entonces ahi es cuando sabe q esta a 30 grados.

Os pego parte del codigo fuente.

/*******************************************************************************************
READ FILE RECIEVED
*******************************************************************************************/

int Read (int fd)
{
char buffer [255]; //Input buffer
char *bufptr; //Current char in buffer
int nbytes; //Number of bytes readed
/*Read character into our string buffer until we get a CR or NL*/
bufptr = buffer;
while ((nbytes = read (fd,bufptr, buffer + sizeof(buffer) - bufptr - 1)) > 0)
{
bufptr += nbytes;
if (bufptr[-1] == '\n' || bufptr [-1] == '\r')
break;
}

/*null terminate the string and check if we got a good response*/
*bufptr = '\0';
if (strncmp (buffer, "@0120100", 8) == 0)
{
return (0);
}
}//End Read



*******************************************************************************************
FUNCTION MAIN
*******************************************************************************************/

int main (void)
{
int fd = open_port();

configure_port(fd);



/********************** 30 DEGREES ***********************/
do
{
Send30(fd);
printf("Synchronizing to 30 degrees...\n");

}
while(Read(fd)!=0);

do
{
SendMonitorize(fd);
}
while (ReadMonitorize(fd)!=0);

printf("30 degrees calibrate\n");


/********************** 50 DEGREES ***********************/
/* do
{
Send50(fd);
printf("Synchronizing to 50 degrees...\n");
}
while(Read(fd)!=0);

do
{
SendMonitorize(fd);
}
while (ReadMonitorize(fd)!=0);

printf("50 degrees calibrate\n");



Mis dudas son sobre todo en torno a la funcion Read y a los tiempos de espera, pues el programa no espera a q el dispositivo se ponga a 30grados, como le intento indicar en la funcion main.

Si alguien me puede ayudar, lo agradeceria... Y si no me he explicado bien, preguntad.

Muchisimas gracias.

Saludos
 
#4
Quizá falle la función open_port() o la configure_port, configurando una velocidad en bps no soportada por tu dispositivo o poniendo bits de paridad cuando no los necesita... Si no pones el código fuente completo es muy difícil decir qué falla.
 

Temas similares

Arriba