Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

19/04/2011 #1


Leer datos puerto serie Linux. RS2323. PID temperatura.
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
13/05/2011 #2


Gracias, majos...
13/05/2011 #3
Moderador

Avatar de Chico3001

llinxtronic dijo: Ver Mensaje
Gracias, majos...
No esperes que todo el mundo sepa de linux...
12/07/2012 #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.
12/07/2012 #5


Ya se resolvió hace más de un año, gracias, jeje
12/07/2012 #6


Vi la fecha, pero como yo estaba buscando funciones para operar con los puertos ttyS0, preferí responderte jeje.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.