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
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