none
Puerto Serie RRS feed

  • Pregunta

  • Hola a todos. 

    Mi duda es la siguiente: 

    Lo que quiero hacer mediante el puerto serie es la programacion del protocolo DEX. Es un protocolo simple que usa 9800 bps, no parity y no stop bit. Eso lo he realizado con éxito.

    En lo que estoy atorado es en que no sé como recibir correctamente la información. A lo que me refiero es a que cómo puedo saber cuándo he leido el buffer, para de esta manera borrarlo y esperar el siguiente dato. Yo he estado jugando con esto y lo he hecho de esta manera...

      
    public MainForm()
        {      
          InitializeComponent();
          
          serPort.DataReceived += new SerialDataReceivedEventHandler(Recibido);
          
        }
        private void Recibido(object sender, SerialDataReceivedEventArgs e)
        {
          int recibido = 0;
          SerialPort sp = (SerialPort)sender;
          recibido = sp.ReadByte();  
        }
    
     public void Sensit3Test()
        { 
       
          while (recibido != 0x10) ;
          while (recibido != 0x30) ;
    
    //Esto lo hago perfecto de aqui lo que sigue es leer una cadena de caracteres. 
    
    }

    Entonces como podran ver tengo mi evento que controla cuando llega algun dato por el Serial, y tengo la Variable Global "recibido", la cual la tengo global para que mi método "pruebaDex()" pueda usarla y leer los datos. El problema es que no sé la manera correcta de en mi método pruebaDex(), esperar por el esperar por un dato, procesarlo, y borrar la variable "recibe", ya que como ven estoy usando ciclos while, entonces si lo q voy a recibir es una cadena de caracteres digase un String para esperar los datos no me sirve un while(algo != algo)...

    Espero me haya dado a entender y que me puedan brindar su opinion.

     

    Gracias y saludos 


    Isaac
    viernes, 14 de enero de 2011 20:12

Respuestas

Todas las respuestas

  • no se si entendí muy bien tu pregunta. creo que lo que necesitas es agregar un control timer que te escanee el puerto y si es 0x10 o 0x30 que creo que son tus codigos de paradas ejecutas tu evento o tu funcion y borrar la variable
    sábado, 15 de enero de 2011 4:04
  • Lo que debes hacer es lo siguente asi se crea el controlador de eventos para la recepcion de datos en un puerto serie:

    Primero en el contructor debes agregar lo siguiente:

    RS232.DataReceived += new SerialDataReceivedEventHandler(recepcion_RS232);
    
    
    
    Despues para leer los datos y manipularlos tendriamos las siguientes funciones:
    
     //Recepcion de datos por el puerto CON
    
    
    
    
     private void recepcion_RS232(object sender, SerialDataReceivedEventArgs e){
    
     this.Invoke(new EventHandler(DoUpdate));
     }
    
    
     // Datos recividos por el puerto.
    
     private void DoUpdate(object s, EventArgs e)
     {
      trama.Text = trama.Text + RS232.ReadExisting();
    
     }
    
    
    
    
    
    
    
    
    Para que todo esto funcione debes incluir en tu proyecto:
    
    
    
    
    
    using
    
     Microsoft.VisualBasic;
    
    
    using
    
     System.IO.Ports;
    
    
    using
    
     System.Threading;
    
    
    

    sábado, 15 de enero de 2011 6:49
  • Hola:

    Hay un buen manual con códigos fuente de ejemplos que puedes ver aquí.

    Ver manual puerto serie.

    Este tema debe ir en la sección de dispsitivos que puedes ver aquí. Para que los moderadores se den cuenta.

    http://social.msdn.microsoft.com/Forums/es-ES/devcommes/threads

    Un cordial saludo.


    domingo, 16 de enero de 2011 8:23
  • aah ok no habia notado esa seccion. 

     


    Isaac
    lunes, 17 de enero de 2011 16:00