• Sábado 14 de Diciembre de 2024, 17:38

Autor Tema:  Error 7f De Rs232  (Leído 1776 veces)

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Error 7f De Rs232
« en: Martes 3 de Octubre de 2006, 16:48 »
0
Buenas:

Ultimamente me ha aparacido un fallo muy curioso, tengo una aplicacion en  visual c++ para windows xp que lee del puerto rs232 o usb con conversor usando el CreateFile("//.////COM1",...);

siempre me ha funcionado bien sin ningun problema, sin embargo, en un par de ordenadores en concreto (de la misma organización) siempre que leen , leen 7F (127, caracter DEL) independientemente del byte que se transmita.


Antes de leer, (que leo con ReadFile) me aseguro de asignar buffer de lectura, configuracion de Bits, parada y etc , y de establecer los timeouts. Todos ellos parece que pasan sin problemas, puesto que si no mostrarian mensaje de error.

Esto ocurre tanto con cable como con adaptador usb , asi pues tengo la sospecha de que quizas sea un problema de la configuracion de permisos del ordenador, es esto posible??

Si el administrador impide la lectura de puerto serie, recibe siempre 7f?    :blink:

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Error 7f De Rs232
« Respuesta #1 en: Martes 3 de Octubre de 2006, 18:48 »
0
No creo que se pueda hacer eso de bloquear el puerto serie asi, pero si alguien te impide el acceso el S.O. te devuelve ACCESS_DENIED y no te permite leer. Comproba los valores de retorno y GetLastError() por si acaso.

PD. Supongo que estaras usando \\.\COM* (que en C seria \\\\.\\COM*), esto no es necesario ya que podes usar COM* directamente.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Error 7f De Rs232
« Respuesta #2 en: Martes 3 de Octubre de 2006, 21:46 »
0
Umm la verdad es que solo comprobaba el Invalid_handle, voy a echarle un ojo.

Uso //.////COM%d por que en puertos por encima del 10 me da fallo si no pongo las barritas, lo lei por msdn o por ahi.

gracias , ya os comentare.

lo mas complicado es que aqui no consigo emular el error  :(

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Error 7f De Rs232
« Respuesta #3 en: Miércoles 4 de Octubre de 2006, 12:40 »
0
buenas de nuevo.

No se produce el ERROR_ACCESS_DENIED, pero he descubierto cuando se produce, se produce cuando se reinicia el sistema.
La aplicacion esta situada en el Menu de Inicio para lanzarse automaticamente cuando se reinicia.
En ese momento, sin razon aparente, deja de leer correctamente y solo lee 7F o 7B independientemente del caracter a enviar.

El fallo se genera por iniciar la aplicacion en el startup.
como puedo evitarlo?
que puede ser el causante?
tenia que tomar alguna precaucion especial al abrir el puerto?

muchas gracias por la ayuda, pero estoy perdido con esto  :o

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Error 7f De Rs232
« Respuesta #4 en: Miércoles 4 de Octubre de 2006, 12:58 »
0
Cita de: "diego.martinez"
El fallo se genera por iniciar la aplicacion en el startup.
Supongo que comprobaste cerrar el programa, volverlo a abrir y entonces funciona correctamente ... de ser asi comproba (depurando el programa) si todo el codigo previo (la inicializacion) logra ejecutarse correctamente.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Error 7f De Rs232
« Respuesta #5 en: Miércoles 4 de Octubre de 2006, 16:26 »
0
buenas de nuevo.
muchas gracias por las respuestas.

Ya lo encontré y a sido de lo mas curioso , (ademas de una verguenza de error) :unsure:
resulta que no hacia bien el:

SetCommState(com,&dcb)
//no configuraba bien el dcb por que lo pisaba en una linea superios :S

en el que se asignan los baudios,stopbit etc...  y no se llegaba a configurar.

En el momento que se lanzaba con normalidad ya se habian configurado por otra aplicacion como el hiperterminal.

Pero al reiniciar el sistema tiene sin configurar el puerto y no lee a 9600 sino en vete a saber, por eso en mi pc funcionaba pero en otros  no.

El fallo esta localizado y corregido, gracias por la ayuda.

PD: aun asi no habia comprobado lo del ACCESS_DENIED asi que ahora es mas robusto .  :)



PDD: Por si a alguien pasa por aqui con algun error parecido, asi es el codigo tras la corrección:

Código: Text
  1.  
  2. GetCommState(com,&dcb); //recibimos la config
  3.  
  4. dcb.BaudRate          = 9600;  //baudios
  5. dcb.ByteSize           = 8;     //tamaño byte
  6. dcb.Parity             = NOPARITY; //paridad
  7. dcb.StopBits            = ONESTOPBIT; //bit de parada
  8. dcb.fAbortOnError             = TRUE;
  9.  
  10. SetupComm(com,128,128); //ponemos el tamaño de buffer
  11. SetCommState(com,&dcb)
  12.  
  13. tout.ReadIntervalTimeout    =32;
  14. tout.ReadTotalTimeoutConstant  =512;
  15. tout.ReadTotalTimeoutMultiplier  =12;
  16.  
  17. SetCommTimeouts(com,&tout);
  18.  
  19.  

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Error 7f De Rs232
« Respuesta #6 en: Miércoles 4 de Octubre de 2006, 16:40 »
0
Cita de: "diego.martinez"
buenas de nuevo.
muchas gracias por las respuestas.
De nadas, me alegro de que lo hayas podido solucionar ... al final estaba en la inicializacion el problema  :devil:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.