¿ 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:
Clase Principalnamespace 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)); } } } }
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(); } } }