Foros del Web » Programación para mayores de 30 ;) » .NET »

C# SerialPort- Duda Evento SerialDataReceivedEventHandler

Estas en el tema de C# SerialPort- Duda Evento SerialDataReceivedEventHandler en el foro de .NET en Foros del Web. Saludos, soy un tanto nuevo en programación, estoy trabajando con puertos seriales y tengo la siguiente duda: ¿ Como podría hacer uso del método SerialDataReceivedEventHandler(DataReceivedHandler ...
  #1 (permalink)  
Antiguo 02/05/2015, 14:30
 
Fecha de Ingreso: mayo-2015
Mensajes: 1
Antigüedad: 9 años
Puntos: 0
C# SerialPort- Duda Evento SerialDataReceivedEventHandler

Saludos, soy un tanto nuevo en programación, estoy trabajando con puertos seriales y tengo la siguiente duda:

¿ Como podría hacer uso del método SerialDataReceivedEventHandler(DataReceivedHandler ) desde otra clase ? ya que lo he estado intentando y al parecer este evento no se ejecuta, me explico: creé un clase que funciona como controlador del puerto serial (ControladorSerial), ésta es utilizada por una clase principal (Program)cuya utilidad es mostrar los datos capturados en consola, he verificado y el evento SerialDataReceivedEventHandler no es disparado cuando la clase ControladorSerial es utilazada (referenciada) por mi clase principal.

Sin embargo cree una aplicación de consola y utilicé este método en la clase principal de la consola (program.cs) y funciona perfecto, lee los datos del puerto serial.

Si alguien ayudarme a solucionar este problema se lo agradecería enormemente.

Clase controlador puerto serial

Código:
namespace ConsoleApplication1
{
    class ControladorSerial
    {
        /*
         * Declaración de variables
         * */

        //Interfaz Serial
        private static SerialPort puertoSerial;

        //Variables de velocidad y nivel de giro
        private static int DIR_VERTICAL;
        private static int DIR_HORIZONTAL;
        public  static bool estate;


        public static int GET_DIR_VERTICAL
        {
            get { return ControladorSerial.DIR_VERTICAL; }
            set { ControladorSerial.DIR_VERTICAL = value; }
        }

        public static int GET_DIR_HORIZONTAL
        {
            get { return ControladorSerial.DIR_HORIZONTAL; }
            set { ControladorSerial.DIR_HORIZONTAL = value; }
        }

        /*
         * Método que inicializa el purto COM 
         * */
        public static void InitSerialInterface(string puerto, int baudios)
        {
            puertoSerial = new SerialPort(puerto,baudios);
            puertoSerial.DtrEnable = true;
            try
            {
                puertoSerial.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
                puertoSerial.Open();
                puertoSerial.ReadTimeout = 5;
            }
            
            catch(Exception e)
            {
                throw new Exception("Se ha producido el siguiente error:"+e.Message);
            }
        }

        public static string cerrarpuerto()
        {
            try
            {
                puertoSerial.Close();
                return "Puerto cerrado correctmente";
            }
            catch(Exception ex)
            {

                return "ADVERTENCIA: "+ex.Message.ToString();
            }
        }

        /*
         * Método DataReceivedHandler
         * Representa el método que controlará los datos recibidos del objeto SerialPort
         * */

        private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {
            estate = true;
            SerialPort puertoSerial = (SerialPort)sender;
            string indata = puertoSerial.ReadExisting();
            string CadenaFormateada = indata.ToString().Trim();

            if (CadenaFormateada.Length == 7)
            {
                //Asigna los valores capturados del puerto COM
                DIR_VERTICAL = int.Parse(CadenaFormateada.Substring(0, 3));
                DIR_HORIZONTAL = int.Parse(CadenaFormateada.Substring(4, 3));
            }
        }

    }
}
Clase Principal

Código:
namespace ConsoleApplication1
{
    class Program
    {

        private static int DIR_VERTICAL;
        private static int DIR_HORIZONTAL;

        static void Main(string[] args)
        {
            Console.WriteLine("************* ACCESO A DATOS SERIALES *****************");
            Console.WriteLine("\n");
            Console.WriteLine("*****PRESIONE CUALQUIER TECLA PARA CONTINUAR*****");
            Console.WriteLine("\n");

            //Utilizamos la clase que controla nuestro puerto com
            ControladorSerial.InitSerialInterface("COM7",9600);
            DIR_VERTICAL = ControladorSerial.GET_DIR_VERTICAL;
            DIR_HORIZONTAL = ControladorSerial.GET_DIR_HORIZONTAL;

            Console.WriteLine("DIRECCION VERTCAL: "+ DIR_VERTICAL);
            Console.WriteLine("DIRECCION VERTCAL: " + DIR_HORIZONTAL);

            Console.ReadLine();
        }

       
    }
}

Última edición por patricioaljndro; 02/05/2015 a las 14:32 Razón: Error titulo

Etiquetas: evento, programa
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 16:21.