# Leer datos puerto serie Linux. RS2323. PID temperatura.



## llinxtronic (Abr 19, 2011)

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


----------



## llinxtronic (May 13, 2011)

Gracias, majos...


----------



## Chico3001 (May 13, 2011)

llinxtronic dijo:


> Gracias, majos...



No esperes que todo el mundo sepa de linux...


----------



## hakkinen (Jul 12, 2012)

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.


----------



## llinxtronic (Jul 12, 2012)

Ya se resolvió hace más de un año, gracias, jeje


----------



## hakkinen (Jul 12, 2012)

Vi la fecha, pero como yo estaba buscando funciones para operar con los puertos ttyS0, preferí responderte jeje.


----------

