none
Envio de datos en RED puerto COM C# RRS feed

  • Pregunta

  • Buen día,

    Tengo dos aplicaciones con windows forms en c# en dos maquinas independientes, y necesito mandar datos a través de un puerto COM. habrá alguna forma de que al mandar un código del cpu1 lo pueda cachar en el cpu2

    martes, 31 de julio de 2018 23:02

Respuestas

Todas las respuestas

  • Hola:

    Si te refieres que si puedes enviar datos por el puerto COM desde un ordenador o PC a otro ordenador, claro que si.

    No haz comentado con qué tecnología lo quieres hacer, modo Consola, Windows Form o WPF, en cualquier caso, aquí hay ejemplos de como lo hice pero desde Arduino, que es lo mismo.

    Ejemplo código C# en modo consola:

    using System;
    using System.IO;
    using System.IO.Ports;
    using System.Text;
    using System.Speech.Recognition; // No olvidar. Micro.
    using System.Speech.Synthesis; // No olvidar. Altavoz.
    
    namespace Arduino_Consola_Color_Voz_cs
    {
        class Program
        {
            static void Main(string[] args)
            {
                string COM = "";
    
                // Título de la ventana.
                Console.Title = "Arduino Consola color y voz C#";
    
                // Tamaño ventana consola.
                Console.WindowWidth = 55; // X. Ancho.
                Console.WindowHeight = 18; // Y. Alto.
    
                SerialPort Puerto_serie;
    
                // Crear un nuevo objeto SerialPort con la configuración predeterminada.
                Puerto_serie = new SerialPort();
    
                // Configuración.
                Console.Write(@"
    Introduzca un número para seleccionar puerto COM.
    Por ejemplo el 4, sería COM4.
    
    Puerto: ");
                COM = Console.ReadLine(); // Escribir el número del puerto.
                Console.Clear();
    
                Puerto_serie.PortName = "COM" + COM; // Número del puerto serie.
    
    
                Puerto_serie.BaudRate = 115200; // Baudios.
                Puerto_serie.Parity = Parity.None; // Paridad.
                Puerto_serie.DataBits = 8; // Bits de datos.
                Puerto_serie.StopBits = StopBits.Two; // Bits de parada.
                Puerto_serie.Handshake = Handshake.None; // Control de flujo.
    
                // Establecer la lectura / escritura de los tiempos de espera.
                Puerto_serie.ReadTimeout = 500;
                Puerto_serie.WriteTimeout = 500;
    
                try
                {
                    Puerto_serie.Open(); // Abrir el puerto serie.
                }
    
                catch (IOException)
                {
                    Console.ForegroundColor = ConsoleColor.Red; // Texto en rojo.
                    Console.CursorVisible = false;
                    Console.SetCursorPosition(16, 6);
                    Console.WriteLine(@"El puerto " + Puerto_serie.PortName + @" no existe
                    o no lo encuentra.");
                    Console.ReadKey();   // Pulse cualquier tecla.
                    Environment.Exit(1); // Salir de la aplicación.
                }
    
    
    
                // Detecta cualquier dato recibido.
                Puerto_serie.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
    
                ConsoleKey tecla;
                Console.WriteLine("Pulse tecla 1 para encender, 2 para apagar y \n" +
                    "Escape para salir. \n" +
                    "--------------------------------------------------------------\n");
    
                do
                {
                    tecla = Console.ReadKey(true).Key; // Espera pulsación de teclas.
                                                       // Inicializar una nueva instancia de SpeechSynthesizer.
                    using (SpeechSynthesizer altavoz = new SpeechSynthesizer())
                    {
                        // Configure la salida de audio.
                        altavoz.SetOutputToDefaultAudioDevice();
    
                        // Velocidad de la voz.
                        altavoz.Rate = -2; // Valores entre -10 a 10.
    
                        // Volumen de la voz.
                        altavoz.Volume = 100; // Valores entre 0 y 100.
    
                        switch (tecla)
                        {
                            case ConsoleKey.D1: // Tecla 1 del teclado estandar.
                            case ConsoleKey.NumPad1: // Tecla 1 del número del pad.
                                byte[] miBuffer1 = Encoding.ASCII.GetBytes("Luz_ON"); // Codificación ASCII y guarda en la variable array tipo byte.
                                Puerto_serie.Write(miBuffer1, 0, miBuffer1.Length); // Envía los datos del buffer todo su contenido.
                                Console.ForegroundColor = ConsoleColor.Gray;
                                Console.Write("Comando"); // Muestra en pantalla comandos enviado.
                                Console.ForegroundColor = ConsoleColor.Green;
                                Console.Write(" \"Luz_ON\" ");
                                Console.ForegroundColor = ConsoleColor.Gray;
                                Console.WriteLine("enviado.");
                                Console.ForegroundColor = ConsoleColor.Gray;
                                altavoz.Speak("Luz encendida.");
                                break;
    
                            case ConsoleKey.D2:
                            case ConsoleKey.NumPad2:
                                byte[] miBuffer2 = Encoding.ASCII.GetBytes("Luz_OFF");
                                Puerto_serie.Write(miBuffer2, 0, miBuffer2.Length);
                                Console.ForegroundColor = ConsoleColor.Gray;
                                Console.Write("Comando"); // Muestra en pantalla comandos enviado.
                                Console.ForegroundColor = ConsoleColor.Green;
                                Console.Write(" \"Luz_OFF\" ");
                                Console.ForegroundColor = ConsoleColor.Gray;
                                Console.WriteLine("enviado.");
                                Console.ForegroundColor = ConsoleColor.Gray;
                                altavoz.Speak("Luz apagada.");
                                break;
    
                            case ConsoleKey.Escape:
                                Console.WriteLine("Saliendo...");
                                altavoz.Speak("Saliendo.");
                                break;
    
                            default:
                                Console.WriteLine("Tecla el 1, el 2 y Escape para salir.");                          
                                break;
                        }
                    }
                } while (tecla != ConsoleKey.Escape); // Pulsa Escape para salir del menú.
    
                Console.ForegroundColor = ConsoleColor.Yellow;
    
                Console.WriteLine();
                Console.WriteLine("╔═════════════════════════════════════════════════════╗");
                Console.WriteLine("║ Electrónica PIC                 metaconta@gmail.com ║");
                Console.WriteLine("║                                                     ║");
                Console.WriteLine("║               Ángel Acaymo M. G.                    ║");
                Console.WriteLine("╚═════════════════════════════════════════════════════╝");
                Console.WriteLine();
    
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.WriteLine("Pulse cualquier tecla para salir...");
                Console.WriteLine();
                Console.ReadKey(); // Espera pulsar una tecla cualquiera.
                Puerto_serie.Close(); // Cierra el puerto serie.
            }
    
            // Detecta cualquier dato entrante.
            private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
            {
                SerialPort sp = (SerialPort)sender;
                string entradaDatos = sp.ReadExisting(); // Almacena los datos recibidos en la variable tipo string.
                Console.ForegroundColor = ConsoleColor.Gray;
                Console.Write("Dato recibido desde Arduino: "); // Muestra en pantalla los datos recibidos.
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(entradaDatos + "\n");
                Console.ForegroundColor = ConsoleColor.Gray;
            }
    
            // Maneje el evento SpeechRecognized.
            static void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
            {
                Console.WriteLine("Texto reconocido: " + e.Result.Text);
    
                string palabras = e.Result.Text;
            }
        }
    }
    Fuente:
    https://www.slideshare.net/Metaconta/arduino-consola-y-puerto-serie

    Código C# con Windows Form:

    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    using System.IO.Ports; // No olvidar.
    
    namespace Arduino_Led
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
    
                // Abrir puerto mientras se ejecuta esta aplicación.
                if(!serialPort1.IsOpen)
                {
                    try
                    {
                        serialPort1.Open();
                    }
                    catch (System.Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }
                }
            }
    
            private void button_Encender_Click(object sender, EventArgs e)
            {
                byte[] mBuffer = Encoding.ASCII.GetBytes("Led_ON");
                serialPort1.Write(mBuffer, 0, mBuffer.Length);
            }
    
            private void button_Apagar_Click(object sender, EventArgs e)
            {
                byte[] mBuffer = Encoding.ASCII.GetBytes("Led_OFF");
                serialPort1.Write(mBuffer, 0, mBuffer.Length);
            }
        }
    }

    Fuente:
    https://es.slideshare.net/Metaconta2/apagar-y-encender-led-con-arduino-y-visual-studio-2015

    Otra cosa. Todo lo que sea comunicaciones del puerto COM o serie o USB, va en la sección del foro indicado aquí.

    https://social.msdn.microsoft.com/Forums/es-ES/home?forum=devcommes&filter=alltypes&sort=lastpostdesc

    Saludos.


    http://electronica-pic.blogspot.com


    • Editado Metaconta miércoles, 1 de agosto de 2018 6:29
    • Propuesto como respuesta Jorge TurradoMVP miércoles, 1 de agosto de 2018 11:01
    miércoles, 1 de agosto de 2018 6:27
  • Estoy trabajando con windows forms; Y lo que necesito es que mediante la red obtener los puertos com disponibles del otro pc y enviar datos.

    miércoles, 1 de agosto de 2018 14:12
  • Entonces estás hablando de UDP.

    http://electronica-pic.blogspot.com

    miércoles, 1 de agosto de 2018 21:04