• Martes 30 de Abril de 2024, 23:41

Autor Tema:  Monitorizar Puerto Com1  (Leído 2756 veces)

solarin

  • Miembro activo
  • **
  • Mensajes: 36
    • Ver Perfil
Monitorizar Puerto Com1
« en: Jueves 24 de Agosto de 2006, 12:29 »
0
Tengo un programa que envia (o deberia) enviar datos a traves de uno de los puertos serie.

Qual es la mejor manera de mirar si estoy realmente enviado alguna cosa? Es decir, hay alguna manera en windows de monitorizar lo que se envia por los puertos serie (COM1, COM2)?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Monitorizar Puerto Com1
« Respuesta #1 en: Jueves 24 de Agosto de 2006, 12:44 »
0
Cita de: "solarin"
Tengo un programa que envia (o deberia) enviar datos a traves de uno de los puertos serie.

Qual es la mejor manera de mirar si estoy realmente enviado alguna cosa? Es decir, hay alguna manera en windows de monitorizar lo que se envia por los puertos serie (COM1, COM2)?
La manera mas simple seria depurarlo, poner un breakpoint en CreateFile y ver que HANDLE obtiene y despues en WriteFile para ver si logra escribir o no. La dificultad de monitorizar un puerto COM viene dada por la exclusividad del mismo: no pueden haber dos HANDLEs abiertos en todo el S.O. para un puerto COM.

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.

solarin

  • Miembro activo
  • **
  • Mensajes: 36
    • Ver Perfil
Re: Monitorizar Puerto Com1
« Respuesta #2 en: Jueves 24 de Agosto de 2006, 12:48 »
0
el problema lo tengo con los breakpoints  :(  . No consigo depurar el programa.

los problemas:

Loaded 'D:\prj\simulador HMS\Enviar Datos al sim\CMS\Release\CMS.exe', no matching symbolic information found.
Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\mfc42.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msvcrt.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\gdi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\user32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\mfc42loc.dll', no matching symbolic information found.
The program 'D:\prj\simulador HMS\Enviar Datos al sim\CMS\Release\CMS.exe' has exited with code 0 (0x0).

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Monitorizar Puerto Com1
« Respuesta #3 en: Jueves 24 de Agosto de 2006, 12:49 »
0
Usa otro depurador como el WinDbg o el OllyDbg por ejemplo.

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.

solarin

  • Miembro activo
  • **
  • Mensajes: 36
    • Ver Perfil
Re: Monitorizar Puerto Com1
« Respuesta #4 en: Jueves 24 de Agosto de 2006, 16:02 »
0
I si con la aplicacion abro el COM1, conecto un cable serie del 1 al 2. Puedo ahora mirar el dos con alguna cosilla de windows? (lo he intentado con "terminal virtual" pero no veo na..)

No he usado break points :( i al final he pasado a la marrulleria de los miss. Con esto he visto que la funcion writefile retorna lo que toca.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Monitorizar Puerto Com1
« Respuesta #5 en: Jueves 24 de Agosto de 2006, 18:01 »
0
Cita de: "solarin"
I si con la aplicacion abro el COM1, conecto un cable serie del 1 al 2. Puedo ahora mirar el dos con alguna cosilla de windows? (lo he intentado con "terminal virtual" pero no veo na..)

No he usado break points :( i al final he pasado a la marrulleria de los miss. Con esto he visto que la funcion writefile retorna lo que toca.
Si desde el COM1 logras enviar datos al COM2 podes usar la misma tecnica para abrir el COM2 y en vez de enviar recibir.

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.

solarin

  • Miembro activo
  • **
  • Mensajes: 36
    • Ver Perfil
Re: Monitorizar Puerto Com1
« Respuesta #6 en: Lunes 28 de Agosto de 2006, 16:27 »
0
No veo donde tengo el error:

Código: Text
  1.  
  2. void CSerialPort::ProcessTX()
  3. {
  4.    int r;
  5.    DWORD bytes_written = 0;
  6.    CBuffer bufferTx;
  7.      
  8.    CSingleLock LockTX(&mutex[TX]);
  9.  
  10.    while(comPort != INVALID_HANDLE_VALUE)
  11.    {
  12.  
  13.       LockTX.Lock();  
  14.     if(data[TX].ind > 0)
  15.     {
  16.       memcpy(&bufferTx,&data[TX],sizeof(CBuffer));
  17.           data[TX].ind = 0;
  18.       LockTX.Unlock();
  19.      
  20.       r = WriteFile (comPort, bufferTx.buffer, bufferTx.ind, &bytes_written, &overlapped[TX]);
  21.      
  22.       WaitForSingleObject (event[TX], INFINITE);
  23.      
  24.       if(bytes_written > 0)
  25.       {
  26.       logfromSerial = "write file ok \r\n";
  27.       logt=1;
  28.       }else
  29.       {
  30.         logfromSerial = "error writting in port \r\n";
  31.         logt=1;
  32.       }
  33.    
  34.     }
  35.     else
  36.     {  
  37.     LockTX.Unlock();
  38.     ResetEvent(event[TX]);
  39.     WaitForSingleObject (event[TX], 1);
  40.     }  
  41.    }
  42. }
  43.  

Pero al final bytes_written siempre es 0, es decir no escribe na de na. Ves alguna cosa rara?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Monitorizar Puerto Com1
« Respuesta #7 en: Lunes 28 de Agosto de 2006, 16:50 »
0
Cita de: "solarin"
Pero al final bytes_written siempre es 0, es decir no escribe na de na. Ves alguna cosa rara?
Esa afirmacion que haces me hace pensar que lo raro es que uses acceso asincrono a los archivos. Que bytes_written sea cero no quiere decir nada usando este tipo de acceso que por cierto no tiene mucho sentido que uses si inmediatamente haces un WaitForSingleObject con INFINITE ya que estas finalmente haciendo sincrona la escritura. Deberias utilizar acceso sincrono pero para obtener el resultado de un acceso asincrono se usa GetOverlappedResult. Consulta la MSDN ya que esto viene mucho mejor explicado ahi http://msdn.microsoft.com (ver WriteFile, CreateFile, etc).

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.