Puerto Serial Mono C# Sharp
Creación de un Software que sea capaz de escuchar por el Puerto Serial utilizando C# con Mono, la aplicación debe tener varias utilidades la idea principal es que sea multi-plataforma y que sea capaz de comunicarse con una base de datos.
En la creación de esta herramienta me he ido encontrando con varios inconvenientes por la poca documentación que existe sobre C# Mono, tratare de ir explicando los pasos y proceso tan claro como pueda, este proyecto es bastante ambicioso ya que va a ser mi primer programa utilizando este lenguaje y fusionando tanto en Windows como en Linux con Mono.
Esta aplicación se esta haciendo bajo plataforma Linux Ubuntu 10.04, para la programación de la aplicación se instaló Monodevelop 2.4 y sus respectivos plugin y librerías.
En el Archivo Main.cs escribiremos el siguiente Código
using System; using System.IO.Ports; using System.IO; using System.Collections.Generic; namespace kenport { class MainClass { public static void Main (string[] args) { Console.WriteLine ("Ken-Port!"); // Detecta y muestra los puertos seriales del computador dispositivo listport; listport=new dispositivo(); // Detectar Sistema Operativo os_detec my_os = new os_detec (); my_os.os (); // Se Conecta al Puerto y muestra la tama en pantalla // a su vez lo guarda en un txt serial_port myTest = new serial_port (); myTest.Test (); } } }
Ahora vamos a agregar una clase dispositivos.cs , en ella vamos a crear varias clases que nos van a servir para detectar que dispositivos seriales existen en la maquina en la que vamos hacer correr el programa.
using System; using System.IO; using System.IO.Ports; namespace kenport { public class os_detec { // Constructor public os_detec () { } public void os () { //Declarar los mensajes y su contenido string msg1 = "Windows."; string msg2 = "Unix."; string msg3 = "ERROR: Plataforma no Identificada."; //Declarar los mensajes y su contenido OperatingSystem os = Environment.OSVersion; PlatformID pid = os.Platform; switch (pid) { case PlatformID.Win32NT: case PlatformID.Win32S: case PlatformID.Win32Windows: case PlatformID.WinCE: Console.WriteLine (msg1); break; case PlatformID.Unix: Console.WriteLine (msg2); break; default: Console.WriteLine (msg3); break; } } } public class dispositivo { public dispositivo () { } public void list_com () { // crear lista con los nombre de los puertos seriales. string[] ports = SerialPort.GetPortNames (); Console.WriteLine ("The following serial ports were found:"); // Display each port name to the console. foreach (string port in ports) { Console.WriteLine (port); } Console.ReadLine (); } } }
Ahora vamos a crear la otra Liberia que es serial_port.cs , esta es la base de nuestro software es quien escuchara en el puerto determinado, previamente configurado antes de compilar software, la idea es que mas adelante el software detecte los puertos eriales habilitados y los muestre y así podamos escoger el puerto y su configuración.El puerto esta configurado para estas prueba con la siguiente configuración:
Descripción Valor
Nombre puerto /dev/ttyUSB0
Velocidad 9600
Parity Parity.None
Data Bits 8
Stop Bit StopBits.Two
Aplicando lo anteriormente explicado nuestro código que manejara el puerto serial quedaría así:
using System; using System.IO.Ports; using System.IO; using System.Collections.Generic; namespace kenport { public class serial_port { private SerialPort mySerial; // Constructor public serial_port () { } public void Test () { if (mySerial != null) if (mySerial.IsOpen) mySerial.Close (); mySerial = new SerialPort ("/dev/ttyUSB0", 9600, Parity.None, 8, StopBits.Two ); mySerial.Open (); mySerial.ReadTimeout = 400; while (true) { Console.WriteLine (ReadData ()); // Hook a write to the text file. StreamWriter writer = new StreamWriter ("/home/luiswisp/archivo.txt", true); // Rewrite the entire value of s to the file string a = ReadData (); writer.WriteLine (a); // Close the writer writer.Close (); } } public string ReadData () { byte tmpByte; string rxString = ""; try { tmpByte = (byte)mySerial.ReadByte (); while (true) { //Console.WriteLine("Data Received"); try { rxString += ((char)tmpByte); tmpByte = (byte)mySerial.ReadByte (); } catch { rxString += "!2"; break; } } } catch { rxString += "!1"; } return rxString; } public bool SendData (string Data) { mySerial.Write (Data); return true; } } }
Ahora que tenemos los tres archivos necesarios para implementar nuestro primer modulo en Mono C# en linux. ahora debes compilar y ejecutar la aplicación.
Comentarios
Publicar un comentario