Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Establecer comunicacion usb serial

Estas en el tema de Establecer comunicacion usb serial en el foro de C/C++ en Foros del Web. Buenas he realizado multiples intentos en tratar de establecer comunicación entre un puerto serial y mi lapto (puerto usb); sin embargo no he conseguido ningún ...
  #1 (permalink)  
Antiguo 23/11/2015, 21:14
 
Fecha de Ingreso: noviembre-2015
Ubicación: Caracas
Mensajes: 7
Antigüedad: 8 años, 7 meses
Puntos: 0
Establecer comunicacion usb serial

Buenas he realizado multiples intentos en tratar de establecer comunicación entre un puerto serial y mi lapto (puerto usb); sin embargo no he conseguido ningún resultado, realmente a esta altura no se que hacer, se que lo que me he propuesto, no es tan sencillo, no obstante considero que no es imposible. El sistema operativo que estoy utilizando es windows 7, de verdad para mi es muy importante cumplir con este criterio generar un envío y recepción de datos entre ambor puertos, agradecido de antemano por su valiosa ayuda.
  #2 (permalink)  
Antiguo 23/11/2015, 23:56
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 9 meses
Puntos: 204
Respuesta: Establecer comunicacion usb serial

Estas intentando conectar dos líneas de datos con protocolos y velocidades de transmisión completamente diferentes. Necesitas comprar un adaptador que sea capaz de realizar la conversión entre ambas líneas. Usando únicamente software no tienes nada que hacer... No vas a conseguir el el puerto USB funcione como un serial por mucho que lo intentes

Un saludo
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.
  #3 (permalink)  
Antiguo 24/11/2015, 15:17
 
Fecha de Ingreso: noviembre-2015
Ubicación: Caracas
Mensajes: 7
Antigüedad: 8 años, 7 meses
Puntos: 0
Respuesta: Establecer comunicacion usb serial

Si amigo tal vez me falto especificar ese detalle tan importante, de hecho ya lo hice compre el adaptador (Cable Usb A Rs232 Db9 Serial Adaptador: Te refieres a ese?), ahora quiero es saber que librerias pudiera utilizar para establecer la comunicación entre estos dos puertos y me orienten como puedo hacer para desarrollar el software, saludos
  #4 (permalink)  
Antiguo 27/11/2015, 11:13
 
Fecha de Ingreso: abril-2015
Mensajes: 3
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Establecer comunicacion usb serial

Hola soy nuevo en el foro este es mi primer mensaje .Estoy con lo mismo lo unico que encontre es
esto es google http://www.iearobotics.com/wiki/index.php?title=Tutorial:_Puerto_serie_en_Linux_en _C%2B%2B no se si podría servir de ayuda. Estoy con linux pero creo que con windows debe ser lo mismo pero en vez de ser /dev/ttyUSB1 debe ser COM1,COM2,COM3 etc.


Alguien sabe como se puede instalar la libreria esa en Fedora ?
  #5 (permalink)  
Antiguo 27/11/2015, 11:40
 
Fecha de Ingreso: abril-2015
Mensajes: 3
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Establecer comunicacion usb serial

encontre este ejemplo en github y la verdad me funciono y me fue de mucha utilidad https://github.com/xmementoit/SerialPortExample
  #6 (permalink)  
Antiguo 27/11/2015, 14:15
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 9 meses
Puntos: 204
Respuesta: Establecer comunicacion usb serial

Lo que tienes que hacer es conocer la interfaz del dispositivo que va a hacer de enlace entre el USB y el serial. Lo que tienes que hacer es, incialmente, enviarle al dispositivo la configuración que permita establecer la comunicación por el serial. ¿Cómo se hace eso? Tienes que mirar la API del dispositivo... ahí te indicará como enviarle comandos para configurarlo... posiblemente hasta la propia API se encargue de la parte de la comunicación vía USB.

Vamos, que lo más normal es que únicamente tengas que preocuparte de enviarle datos al dispositivo y escuchar lo que te responde (que normalmente será lo que recibas por el serial.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.
  #7 (permalink)  
Antiguo 29/11/2015, 09:57
 
Fecha de Ingreso: noviembre-2015
Ubicación: Caracas
Mensajes: 7
Antigüedad: 8 años, 7 meses
Puntos: 0
Respuesta: Establecer comunicacion usb serial

mati89 muchas gracias por la ayuda bien el codigo (serialportexample) pero como hago si quiero que la comunicación sea por puerto usb serial y no netamente por el puerto serial?, precisamente encontre en github el siguiente ejemplo "Smoothie-master" para manejar el puerto usb por lo que he visto me parece el mas completo, inclusive puedes manejar el puerto usb-serial en la sección src\libs\USBdevice\USBSerial, pero sigo teniendo problemas, ya que el proyecto posee demasiadas librerias asociadas y al momento de compilar me esta arrojando errores que no logro corregir, si puieras ayudarme te lo agradeceria. Eferion muchas gracias por tu colaboración voy a intentarlo tambien de esa forma me parece lo mas practico; sin embargo tambien quisiera desarrollar de una forma mas autonoma la elaboracion del programa
  #8 (permalink)  
Antiguo 29/11/2015, 20:48
 
Fecha de Ingreso: noviembre-2015
Ubicación: Caracas
Mensajes: 7
Antigüedad: 8 años, 7 meses
Puntos: 0
Respuesta: Establecer comunicacion usb serial

Amigos ya resolvi una parte del problema, instale el driver de conversion usb-serial, ahora cuando conecto el cable db9 rs232 a mi lapto me lo reconoce como COM1, por lo que tengo un avance, ahora puedo manejarme con proyectos de comunicaciones seriales directamente de un equipo a otro, asi que mati89 olvida la pregunta anterior que te hice con relación al proyecto Smoothie. Ahora bien siguiendo el ejemplo que me mostraste "SerialPortExample" debo decir que no me recnoce en windows la libreria termios.h cual podria utilizar en ese caso?
  #9 (permalink)  
Antiguo 30/11/2015, 02:38
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 9 meses
Puntos: 204
Respuesta: Establecer comunicacion usb serial

Cita:
Iniciado por pedrobarreno010 Ver Mensaje
Ahora bien siguiendo el ejemplo que me mostraste "SerialPortExample" debo decir que no me recnoce en windows la libreria termios.h cual podria utilizar en ese caso?
termios.h es propia del entorno Linux y no hay un sustituto "tal cual" en Windows, que imagino será tu caso.

En cualquier caso, si ya tienes el puerto serie reconocido como COM1 la comunicación la puedes realizar (o deberías poder realizarla) de forma directa.

Lo primero es abrir el puerto. En windows el puerto serie se gestiona como un fichero... tiene sus particularidades con respecto a un fichero de verdad (las opciones de seek no tienen ningún efecto, por ejemplo) pero su uso es básicamente el mismo.

Para empezar hay que abrir el fichero:

Código C:
Ver original
  1. HANDLE hSerial;
  2. hSerial = CreateFile("COM1",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

Lo básico a saber de esas líneas es que abres el fichero "COM1" con acceso de lectura y escritura... y que el fichero ha de existir, para una documentación más precisa consulta la MSDN.

Después estaría bien verificar que hemos podido abrir el puerto:
Código C:
Ver original
  1. if ( INVALID_HANDLE_VALUE == hSerial )
  2. {
  3.   printf("No se ha podido abrir el puerto.\n");
  4.   if (GetLastError() == ERROR_FILE_NOT_FOUND)
  5.     printf("\tNo existe el puerto serie.\n");
  6. }

El siguiente paso sería configurar el puerto serie. En este caso lo mejor es leer la configuración actual y sobreescribir los parámetros que necesitemos...

Código C:
Ver original
  1. COMMCONFIG dcbSerialParams;
  2. if (!GetCommState(hSerial, &dcbSerialParams.dcb))
  3. {
  4.   printf("No ha sido posible leer la configuración del puerto\n");
  5. }
  6.  
  7. dcbSerialParams.dcb.DCBlength = sizeof(dcbSerialParams.dcb);
  8.  
  9. dcbSerialParams.dcb.BaudRate = CBR_9600; // Velocidad de conexión
  10. dcbSerialParams.dcb.ByteSize = 8; // Tamaño del byte
  11. dcbSerialParams.dcb.StopBits = ONESTOPBIT; // Bits de stop
  12. dcbSerialParams.dcb.Parity = NOPARITY; // Paridad
  13.  
  14. dcbSerialParams.dcb.fBinary = TRUE;
  15.  
  16. // Sin control de ningún tipo
  17. dcbSerialParams.dcb.fDtrControl = DTR_CONTROL_DISABLE;
  18. dcbSerialParams.dcb.fRtsControl = RTS_CONTROL_DISABLE;
  19. dcbSerialParams.dcb.fOutxCtsFlow = FALSE;
  20. dcbSerialParams.dcb.fOutxDsrFlow = FALSE;
  21. dcbSerialParams.dcb.fDsrSensitivity= FALSE;
  22. dcbSerialParams.dcb.fAbortOnError = TRUE;
  23.  
  24. if (!SetCommState(hSerial, &dcbSerialParams.dcb))
  25. {
  26.     printf("No ha sido posible configurar el puerto\n");
  27. }


Y si no se me olvida nada, ya está... ya puedes leer y escribir del puerto a placer:

Escribir:
Código C:
Ver original
  1. char* toSend = "Datos a enviar";
  2. int nToSend = strlen(toSend );
  3. DWORD bytesWritten = 0;
  4.  
  5. if (!WriteFile(hSerial, toSend, nToSend, &bytesWritten , NULL))
  6. {
  7.   printf("Error de escritura\n");
  8. }

Leer:
Código C:
Ver original
  1. char buffer[200];
  2. DWORD bytesRead = 0;
  3. int nToRead = strlen(buffer);
  4.  
  5. if (!ReadFile(hSerial, buffer, nToRead, &bytesRead, NULL))
  6. {
  7.   printf("error de lectura\n");
  8. }

Y claro, cuando terminemos sólo falta cerrar el puerto:

Código C:
Ver original
  1. CloseHandle(hSerial);

y ya está. Si no me he olvidado de nada con esto ya tendrías todo lo necesario para leer y escribir de tu flamante nuevo puerto serie.

Un saludo
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.
  #10 (permalink)  
Antiguo 01/12/2015, 09:19
 
Fecha de Ingreso: noviembre-2015
Ubicación: Caracas
Mensajes: 7
Antigüedad: 8 años, 7 meses
Puntos: 0
Respuesta: Establecer comunicacion usb serial

Muchas gracias eferion, una respuesta muy completa y detallada voy a probar las configuraciones a ver que tal, una vez mas agradecido
  #11 (permalink)  
Antiguo 10/12/2015, 19:36
 
Fecha de Ingreso: noviembre-2015
Ubicación: Caracas
Mensajes: 7
Antigüedad: 8 años, 7 meses
Puntos: 0
Respuesta: Establecer comunicacion usb serial

eferion no se porque no puedo leer en ninguno de los extremos los mensajes enviado, en efecto en cualquiera de los dos puertos se envía el sting pero al momento de recibir no logro leer nada, a que se debera? gracias de antemano por la respuesta,
  #12 (permalink)  
Antiguo 11/12/2015, 00:14
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 9 meses
Puntos: 204
Respuesta: Establecer comunicacion usb serial

Cita:
Iniciado por pedrobarreno010 Ver Mensaje
eferion no se porque no puedo leer en ninguno de los extremos los mensajes enviado, en efecto en cualquiera de los dos puertos se envía el sting pero al momento de recibir no logro leer nada, a que se debera? gracias de antemano por la respuesta,
Estas seguro que la configuración del puerto es la misma en ambos extremos?

Si la velocidad no es correcta los bits tendrán una duración distinta, luego la transmisión fallará
Si el bit de paridad es distinto la trama recibida no se entenderá como válida en el receptor.
Si el bit de stop es distinto el receptor tendrá problemas para identificar el final de la trama.
...
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.

Etiquetas: comunicacion, establecer, int, serial, usb
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:35.