Autor Tema: Ejemplo - Puerto serie y C# 2008  (Leído 60800 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Tisco

  • PIC16
  • ***
  • Mensajes: 108
Re: Ejemplo - Puerto serie y C# 2008
« Respuesta #30 en: 06 de Diciembre de 2009, 17:34:45 »
jeje

A ver si cuando quede nos ayudas con el asunto de los threads porque quiero aprender a usarlos.

Pues aqui te presento una forma de hacerlo  ;-)

Código: C#
  1.  
  2. /* EN EL PROGRAMA PRINCIPAL */
  3.  
  4.  
  5. private void Form1_Load(object sender, EventArgs e)
  6.         {
  7.             Thread_RS232 hilo1 = new Thread_RS232(serialPort1);
  8.         }
  9.  
  10. private void Form1_FormClosed(object sender, FormClosedEventArgs e)
  11.         {
  12.             if (hilo1 != null) hilo1._idTh.Interrupt();
  13.         }
  14.  
  15.  
  16. /* EN LA CLASE DEL THREAD  */
  17.  
  18.  
  19. class Thread_RS232
  20. {
  21.     public Thread _idTh;
  22.     SerialPort _canalserie;
  23.     bool Terminated = false;
  24.  
  25.     public Thread_RS232(SerialPort canalserie)
  26.     {
  27.         _canalserie = canalserie;
  28.         _idTh = new Thread(new ThreadStart(Execute));
  29.         _idTh.Name = "TH_RS232";
  30.         _idTh.Start();
  31.     }
  32.    
  33.  
  34.     void Execute()
  35.     {
  36.  
  37.         if (!_canalserie.IsOpen)
  38.         {
  39.             _canalserie.Open(); // Abrimos canal de comunicaciones
  40.         }
  41.        
  42.         while (!Terminated)
  43.         {
  44.             try
  45.             {
  46.                 // Tratado del RS232
  47.             }
  48.             catch (ThreadInterruptedException)
  49.             {
  50.                 Terminated = true;
  51.             }
  52.         } // while (!Terminated)
  53.         _canalserie.Close();    // Cerramos canal de comunicaciones
  54.     } // Execute
  55. } // CLASS

Espero que te sirva  ;-)

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Ejemplo - Puerto serie y C# 2008
« Respuesta #31 en: 06 de Diciembre de 2009, 20:18:30 »
jeje

A ver si cuando quede nos ayudas con el asunto de los threads porque quiero aprender a usarlos.

Pues aqui te presento una forma de hacerlo  ;-)



Gracias, lo leo y aún tego mucho que estudiar.  :mrgreen:

Desconectado Tisco

  • PIC16
  • ***
  • Mensajes: 108
Re: Ejemplo - Puerto serie y C# 2008
« Respuesta #32 en: 06 de Diciembre de 2009, 20:37:54 »
jejeje. pues si, es una de las de cosas de C#, por mucho que crees que sabes siempre te queda por aprender, yo cada dia me percato mas de ello (por lo menos ese es mi caso :mrgreen: :mrgreen:).
;-)
« Última modificación: 06 de Diciembre de 2009, 20:42:53 por Caghetas »

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Ejemplo - Puerto serie y C# 2008
« Respuesta #33 en: 07 de Diciembre de 2009, 00:38:32 »
jejeje. pues si, es una de las de cosas de C#, por mucho que crees que sabes siempre te queda por aprender, yo cada dia me percato mas de ello (por lo menos ese es mi caso :mrgreen: :mrgreen:).
;-)

También el mío jeje

Desconectado sauron

  • PIC12
  • **
  • Mensajes: 78
Re: Ejemplo - Puerto serie y C# 2008
« Respuesta #34 en: 22 de Febrero de 2010, 03:28:26 »
Hola compañeros.

Este post ya tiene un par de meses inactivo, pero quiero seguir con el tema.

Ya me instruí al menos en lo básico de C# y ya se identificar (de nuevo en lo básico) los códigos.

Tengo un par de dudas:

1) Compa migsantiago, en el código de tu ejemplo, usas un List<byte>, pero el compilador no lo reconoce, ¿hay que declarar un namespace específico o donde está el detalle?, he buscado en la web pero no aparece información al respecto. Claro está, es un modo entre otros de guardar el byte en el array, pero para que no me quede la duda.

2) Quiero exponerles el siguiente caso: Supongan dos PC, de la PC1 se envía un dato al PC2, se necesita verificar que el dato que llegó al PC2, es el mismo (sin algún tipo de error) que se envió del PC1, ahora, de que forma creen ustedes compañeros, que se puede hacer esto?

He pensado en convertir todos los caracteres ASCII en decimal y realizar una suma de esos valores, entonces este valor se transmite en la trama junto con el dato y el PC receptor hace la misma conversión ASCII a decimal y compara su valor con el enviado y si es igual, la transmisión fue correcta.....no se si se puede hacer ésto, pero qué otra manera puede haber?

Gracias por sus respuestas.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Ejemplo - Puerto serie y C# 2008
« Respuesta #35 en: 22 de Febrero de 2010, 13:18:20 »
Hola, usé VS 2008 Express Edition. Talvez estés usando una versión anterior o no sé. Danos más datos sobre el error dado.

Desconectado Franc749

  • PIC10
  • *
  • Mensajes: 22
Re: Ejemplo - Puerto serie y C# 2008
« Respuesta #36 en: 22 de Febrero de 2010, 14:00:15 »
Muy bueno el post. me re-interesa.

Disculpen mi total ingnoracia en  C#.  PEro es posible hacer un programa que se ejecute solo sin tener intalado el VS 2008 Express?

Tengo que hacer una muy pequeña aplicacion de recepcion de datos por puerto serie. Y quiero que el usuario final lo ejecute simplemente haciendo click con el mouse.
"Prenden fuego y no queman nada"

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Ejemplo - Puerto serie y C# 2008
« Respuesta #37 en: 22 de Febrero de 2010, 14:10:17 »
Muy bueno el post. me re-interesa.

Disculpen mi total ingnoracia en  C#.  PEro es posible hacer un programa que se ejecute solo sin tener intalado el VS 2008 Express?

Tengo que hacer una muy pequeña aplicacion de recepcion de datos por puerto serie. Y quiero que el usuario final lo ejecute simplemente haciendo click con el mouse.

No, debes instalar el net framework 3.5 para que la aplicación corra en la máquina del cliente.

http://www.microsoft.com/downloads/details.aspx?FamilyId=AB99342F-5D1A-413D-8319-81DA479AB0D7&displaylang=en

O debes crear un instalador para que se descargue el framewrok.

http://electrolinks.blogspot.com/2009/06/auto-instalador-de-proyectos-visual.html

Desconectado sauron

  • PIC12
  • **
  • Mensajes: 78
Re: Ejemplo - Puerto serie y C# 2008
« Respuesta #38 en: 22 de Febrero de 2010, 14:17:09 »
Disculpen mi total ingnoracia en  C#.  PEro es posible hacer un programa que se ejecute solo sin tener intalado el VS 2008 Express?

Al compilar el código te da el .EXE que es el que interesa y puedes ejecutar en cualquier computadora, PERO, tienes que instalar las librerías .NET Framework, por ejemplo si compilas con el C# 2008, en la máquina dónde quieres ejecutar el programa, instalas la versión 3.5 de .NET Framework.

Hola, usé VS 2008 Express Edition. Talvez estés usando una versión anterior o no sé. Danos más datos sobre el error dado.

Compañero migsantiago, estoy usando la versión 2008 express también y voy a usar la versión pro para usar unas características que la express no tiene y allí probaré, y que opinan sobre la lógica que comenté al final?.....


2) Quiero exponerles el siguiente caso: Supongan dos PC, de la PC1 se envía un dato al PC2, se necesita verificar que el dato que llegó al PC2, es el mismo (sin algún tipo de error) que se envió del PC1, ahora, de que forma creen ustedes compañeros, que se puede hacer esto?

He pensado en convertir todos los caracteres ASCII en decimal y realizar una suma de esos valores, entonces este valor se transmite en la trama junto con el dato y el PC receptor hace la misma conversión ASCII a decimal y compara su valor con el enviado y si es igual, la transmisión fue correcta.....no se si se puede hacer ésto, pero qué otra manera puede haber?


Desconectado alexysar

  • PIC16
  • ***
  • Mensajes: 206
    • e-Kit
Re: Ejemplo - Puerto serie y C# 2008
« Respuesta #39 en: 22 de Febrero de 2010, 14:27:19 »
No estoy completamente seguro de lo que voy a decir, pero creo que el protocolo RS232 ya tiene incluido el chequeo de errores mediante un checksum.-

Desconectado sauron

  • PIC12
  • **
  • Mensajes: 78
Re: Ejemplo - Puerto serie y C# 2008
« Respuesta #40 en: 22 de Febrero de 2010, 14:35:39 »
No estoy completamente seguro de lo que voy a decir, pero creo que el protocolo RS232 ya tiene incluido el chequeo de errores mediante un checksum.-


¿El checksum no es para los archivos?, aunque si es así, podría guardar el dato a enviar en un archivo temporal y en el receptor que lea el archivo y haga el checksum.....hablo en teoría, si alguien sabe algo sobre checksum...?

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Ejemplo - Puerto serie y C# 2008
« Respuesta #41 en: 22 de Febrero de 2010, 14:37:17 »
2) Quiero exponerles el siguiente caso: Supongan dos PC, de la PC1 se envía un dato al PC2, se necesita verificar que el dato que llegó al PC2, es el mismo (sin algún tipo de error) que se envió del PC1, ahora, de que forma creen ustedes compañeros, que se puede hacer esto?

He pensado en convertir todos los caracteres ASCII en decimal y realizar una suma de esos valores, entonces este valor se transmite en la trama junto con el dato y el PC receptor hace la misma conversión ASCII a decimal y compara su valor con el enviado y si es igual, la transmisión fue correcta.....no se si se puede hacer ésto, pero qué otra manera puede haber?

Gracias por sus respuestas.

Es la manera más fácil. Está bien.

No estoy completamente seguro de lo que voy a decir, pero creo que el protocolo RS232 ya tiene incluido el chequeo de errores mediante un checksum.-


Sí, es seguro que desde el hardware se hagan revisiones físicas de las señales recibidas. Hay un evento vinculado al objeto SerialPort llamado ErrorReceived. Seguro que ahí puedes meter mano y revisar exactamente qué pasó, pero talvez sea más complicado que el checksum que propone Sauron.

El checksum es un simple algoritmo matemático en donde se meten los datos recibidos y se obtiene uno de salida. Si el dato de salida es idéntico al esperado entonces la cadena de datos llegó bien.

Desconectado sauron

  • PIC12
  • **
  • Mensajes: 78
Re: Ejemplo - Puerto serie y C# 2008
« Respuesta #42 en: 22 de Febrero de 2010, 14:47:35 »
Es la manera más fácil. Está bien.

Ok gracias por tu respuesta, puedo intentar ese método.

Ya que comentas sobre el evento ErrorReceived del puerto, encontré éste método vinculado a ese evento, con los siguientes casos:

Código: C#
  1. void Método_ErrorReceived(object sender, SerialErrorReceivedEventArgs e)
  2.         {
  3.            
  4.             switch (e.EventType)
  5.             {
  6.                 case SerialError.Frame:
  7.                     MessageBox.Show("Error de trama...");
  8.                     break;
  9.                 case SerialError.Overrun:
  10.                     MessageBox.Show("Saturación de buffer...");
  11.                     break;
  12.                 case SerialError.RXOver:
  13.                     MessageBox.Show("Desbordamiento de buffer de entrada");
  14.                     break;
  15.                 case SerialError.RXParity:
  16.                     MessageBox.Show("Error de paridad...");
  17.                     break;
  18.                 case SerialError.TXFull:
  19.                     MessageBox.Show("Buffer lleno...");
  20.                     break;
  21.  
  22.             }
  23.  

Creo que se podría agregar al programa para darle mayor seguridad a la transmisión.

Desconectado sauron

  • PIC12
  • **
  • Mensajes: 78
Re: Ejemplo - Puerto serie y C# 2008
« Respuesta #43 en: 23 de Febrero de 2010, 00:35:59 »
Siguiendo con el tema.....

Estoy intentando convertir el texto que el usuario ingresa por un TextBox a un entero, pero me tira una excepción, pongo el código a ver que estoy haciendo mal.

Código: C#
  1. private void BtnEnviar_Click(object sender, EventArgs e)
  2.         {
  3.             string ParaEnviar;
  4.             ParaEnviar = StringEnviar.Text;
  5.  
  6.             //Convierte el string ParaEnviar en entero
  7.             int Check;
  8.             Check = Convert.ToInt32(StringEnviar.Text);
  9.           //Check = int.Parse(StringEnviar.Text);
  10.  

He intentado varias formas, cambiar el tipo de dato, usar el int.Parse, etc....y siempre me da la excepción en esa línea, ¿en dónde me estaré equivocando?

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 902
    • Mexchip
Re: Ejemplo - Puerto serie y C# 2008
« Respuesta #44 en: 23 de Febrero de 2010, 01:56:19 »
¿Qué excepción?
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/


 

anything