Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - txenfsm

#1
Hola de nuevo, he cambiado la forma de abrir el puerto por :
hSerial = CreateFile(puerto, GENERIC_READ | GENERIC_WRITE,0, NULL, OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);

y al escribir el comando at me da el error 87 con la funcion GetLastError (),y sin modificar nada es decir:
hSerial = CreateFile(puerto, GENERIC_READ | GENERIC_WRITE,0, NULL, OPEN_EXISTING,0,NULL);
el programa se queda esperando respuesta del comando at, ni idea de que es alguna ayuda.

Un saludo
#2
Hola gracias por contestar, no es que me de ningun error porque la aplicacion se conecta al puerto y añade la configuracion lo que pasa es que cuando escribe el comando at se queda esperando respuesta es decir la parte:

int abrir_puerto(){   
    int bandera=0;
    char lineabaudio[30];
     hSerial = CreateFile(puerto, GENERIC_READ | GENERIC_WRITE,0, NULL, OPEN_EXISTING, 0,NULL);
    if(hSerial!=INVALID_HANDLE_VALUE)
    {
       DCB dcbSerialParams;
       if (!GetCommState(hSerial, &dcbSerialParams))
          printf("\nGetCommState error!");
       else
            printf("\nGetCommState ok.");
        dcbSerialParams.BaudRate=CBR_9600;
        dcbSerialParams.ByteSize=8;
        dcbSerialParams.StopBits=ONESTOPBIT;
        dcbSerialParams.Parity=NOPARITY;
       

       if(!SetCommState(hSerial, &dcbSerialParams))
          printf("\nSetCommState error!");
       else{
          printf("\nSetCommState ok.");
        }
       

    }
    else
         bandera=1;
    return bandera;
}

funciona se queda esperando cuando se escribe el comando at en:

void comandos_inicio(){   //funcion que ejecuta los primeros comando necesarios para configurar el dispositivo
     char  *comando[4]={"AT \r","AT+CPIN? \r","AT+CMGF=1 \r","AT+CSCS=\"GSM\" \r"};
     char szBuff[2024];
     int i=0;
      while(i<4){
     
                     strcpy(szBuff,comando);
     
           
            if(!WriteFile(hSerial, szBuff,strlen(szBuff), &dwBytesRead, NULL))    //Escribe cada comando
                 printf("\nWriteFile error!");
             else{
                Sleep(waitsms);
                 dwBytesRead = 0;
                 
                 if(!ReadFile(hSerial, szBuff, sizeof(szBuff), &dwBytesRead, NULL))   //lee la respuesta de cada comando
                     printf("\nReadFile error!");
                 else{
                      szBuff[dwBytesRead] = '\0';
                     
                    printf(" ReadFile: %s\n", szBuff);
                 }
                if(i==1)
                 if( strstr(szBuff,"READY")==NULL)
                       i=5;
                   
                i++;
           }       
     }
     }
Y si configuro el puerto desde hyperterminal todo funciona bien, escribe y recibe respuesta de los comandos.
El dispositivo es un modem normal marca huawei no se si tiene que ver.
Un saludo
#3
Hola, estoy realizando una aplicacion en c que se comunica con un puerto com al cual esta conectado un moden, lo que intento es enviar mensajes mediante comandos at, todo funciona pero tengo una duda o un problema porque no se si esto debe ser asi siempre. Resulta que la aplicacion no guarda la configuracion del puerto es decir:
       

       dcbSerialParams.BaudRate=CBR_9600;
        dcbSerialParams.ByteSize=8;
        dcbSerialParams.StopBits=ONESTOPBIT;
        dcbSerialParams.Parity=NOPARITY;
      

      if(!SetCommState(hSerial, &dcbSerialParams))
         printf("\nSetCommState error!");
      else{
         printf("\nSetCommState ok.");
             }


No lo realiza bien no se porque pero si configuro el puerto por hyperterminal y le doy estos mismos valores luego todo funciona a la perfeccion, no encuentro manera de solucionarlo creo que esta todo bien pero aun asi os dejo el codigo para que podais verlo mejor:

int abrir_puerto(){   
    int bandera=0;
    char lineabaudio[30];
     hSerial = CreateFile(puerto, GENERIC_READ | GENERIC_WRITE,0, NULL, OPEN_EXISTING, 0,NULL);
    if(hSerial!=INVALID_HANDLE_VALUE)
   {
      DCB dcbSerialParams;
      if (!GetCommState(hSerial, &dcbSerialParams))
         printf("\nGetCommState error!");
      else
            printf("\nGetCommState ok.");
        dcbSerialParams.BaudRate=CBR_9600;
        dcbSerialParams.ByteSize=8;
        dcbSerialParams.StopBits=ONESTOPBIT;
        dcbSerialParams.Parity=NOPARITY;
      

      if(!SetCommState(hSerial, &dcbSerialParams))
         printf("\nSetCommState error!");
      else{
         printf("\nSetCommState ok.");
        }
       

    }
    else
         bandera=1;
    return bandera;
}
void comandos_inicio(){   //funcion que ejecuta los primeros comando necesarios para configurar el dispositivo
     char  *comando[4]={"AT \r","AT+CPIN? \r","AT+CMGF=1 \r","AT+CSCS=\"GSM\" \r"};
     char szBuff[2024];
     int i=0;
      while(i<4){
     
                     strcpy(szBuff,comando);
     
           
            if(!WriteFile(hSerial, szBuff,strlen(szBuff), &dwBytesRead, NULL))    //Escribe cada comando
                 printf("\nWriteFile error!");
             else{
                Sleep(waitsms);
                 dwBytesRead = 0;
                 
                 if(!ReadFile(hSerial, szBuff, sizeof(szBuff), &dwBytesRead, NULL))   //lee la respuesta de cada comando
                     printf("\nReadFile error!");
                 else{
                      szBuff[dwBytesRead] = '\0';
                     
                    printf(" ReadFile: %s\n", szBuff);
                 }
                if(i==1)
                 if( strstr(szBuff,"READY")==NULL)
                       i=5;
                   
                i++;
           }       
     }
     }
Espero que me podais ayudar, gracias de antemano.
#4
Hola fabianjsm , gracias por contestar.
si bueno eso fue una errata xD.
A lo que me refiero es que por ejemplo yo, la base de datos con la que trabajo tiene un campo fecha de tipo date, y en la aplicacion existe una variable fecha de tipo char, entonces al poner:
sprintf(consulta, "INSERT INTO mitabla (nombre,dni,fecha) VALUES('%s','%s','%s')",nomb, id, fecha);
y ejecutar la aplicacion me salta un error, por lo que no se si la sentenca esta bien?
De nuevo gracias de antemano. Un saludo
#5
Hola amigos, estoy relizando una aplicacion en c que debe insertar valores de una variable en c, lo que realizo para ello es :
sprintf(consulta, "INSERT INTO mitabla (campo1,campo2,campo3) VALUES('%s','%s','%s')",vble_cadena1, vble_caracter2, vble_enterolargo3);
mysql_query(conn,consulta);

bien pues al relizar estas lineas me da error y no se si es porque las variables no son del mismo tipo que lo son en la base de datos. ¿tiene algo que ver?
Lo pregunto porque si en vez esas linea pongo:

sprintf(consulta, "INSERT INTO mitabla (campo1,campo2,campo3) VALUES('hola1','hola2','hola3')");
mysql_query(conn,consulta);

si que funciona.
Espero que me podais ayudar porque no se donde tengo el fallo. gracias de antemano.
Saludos
#6
Programación C/C++ / Escuchar puerto en c
10 Enero 2012, 14:08 PM
Hola, estoy realizando una aplicacion en c que necesita estar a la escucha de un puerto y para ello utilizo socket. se que la informacion que envia el cliente es una cadena de texto pero no se si el utiliza socket.
Mi aplicacion funciona lo que pasa es que no recibe nada y creo que es por esto porque no coincide el canal de conexion.
Existe alguna otra forma de escuchar un puerto para recibir informacion sin saber como lo manda el cliente??
Les agradeceria mucho si me pudieran ayudar. Gracias un saludo