none
leer y escribir datos del puerto serial en C# RRS feed

  • Pregunta

  • Hola

    Estoy trabajando en un proyecto de C# en VS2008, el cual es un servidor que inicialmente simulaba datos y una aplicacion cliente accedia y los visualizaba. El proyecto consta de varios archivos C# y desde uno de ellos hacia la simulacion de los datos (generaba datos aleatorios). Ahora necesito que estos datos no sean simulados sino obtenerlos del puerto serie y tambien enviar datos. Mi problema consiste en que no se como hacer para trabajar con el puerto serial desde el archivo donde generaba aleatoriamente los datos, y si necesariamente tengo que agregar el componente SerialPort a mi windows form y de que manera lo llamo y lo utilizo desde el archivo de codigo donde generaba los datos aleatorios dentro del proyecto. Segun la configuracion del dispositivo con el que voy a trabajar, para solicitar un dato de entrada debo enviar el comando #AA , y recibo >(dato) , y para escribir datos debo enviar el comando #AA(dato) y recibo > si el comando es valido.

    Muchisimas gracias por su colaboracion!!!
    martes, 27 de octubre de 2009 22:39

Respuestas

Todas las respuestas

  • hola

    para comunicarte por el puerto serial no necesitas de ningun componente en tu aplicacion, solo deberías utilizar la funcionalidad del namespace System.IO.Ports





    como habras observado con el uso de la clase SerialPort (Clase)
    seguro consigues la comunicacion

    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Propuesto como respuesta Leandro TuttiniMVP jueves, 12 de noviembre de 2009 1:35
    • Votado como útil rafaeltn jueves, 12 de noviembre de 2009 2:38
    • Marcado como respuesta rafaeltn domingo, 15 de noviembre de 2009 17:42
    miércoles, 28 de octubre de 2009 2:24
  • En vs2008 existe un componente en la barra de herramientas que te simplifica el acceso al puerto serie, me parece que es serialport o algo asi, la verdad no tengo a la mano el vs para revisar, pero esta en los controles donde se puede conectar a servicios y mensajes.

    Tambien  revisa este link.
    http://social.msdn.microsoft.com/Forums/es-ES/vcses/thread/ce07aa7e-5720-4ef1-821f-6ef419a6ac02
    miércoles, 28 de octubre de 2009 2:42
  • En vs2008 existe un componente en la barra de herramientas que te simplifica el acceso al puerto serie, me parece que es serialport o algo asi, la verdad no tengo a la mano el vs para revisar, pero esta en los controles donde se puede conectar a servicios y mensajes.
    A ese componente me refiero, pero el problema es que solo lo puedo utilizar desde el codigo del MainForm, y no desde otro archivo de codigo que tenga dentro del proyecto. Supongo que debe haber alguna forma, pero no se como hacerlo.... creo que me estoy enredando en algo facil =S

    Muchas gracias!!!

    miércoles, 28 de octubre de 2009 20:24
  • hola

    pero no necesitas utilizar el control, usa el objeto directamente es muy simple solo debes srear la instancia y asignar las propeidades

    la clase que te comentaba SerialPort (Clase)

    esa es la que debes crear la instancia y realizar la comunciacion similar a lo que harias con el control

    - pero si queres usar el control prueba de arrastarlo a la pantalla concreta donde vas a utilziarlo.

    O sea si tienes Form1 y Form2, y la comunicacion la haras en form2, visualiza este formulario y arrastra el control alli, entonces tendras acceso desde este.
    O sea el componente es por formulario, no se comparte

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 28 de octubre de 2009 22:08
  • Recuerda que los controles winforms solo los puedes usar desde un proyecto de aplicación de windows, si tienes otro proyecto como libreria de clases, tienes que adjuntar la referencia a la librería, pero desde ese punto es mas aconsejable usar la clase serialport como lo menciona leandro, e igual tienes que adjuntar la referencia.

    Suerte
    jueves, 29 de octubre de 2009 1:49
  • He creado un windows form basico para probar el puerto serial con un TextBox textBox1 y un Boton button1 , donde en el TextBox escribo el comando
    " @06DO03 " el cual debe hacer que se prendan 2 leds y mi dispositivo no responde al presionar el boton button1 . Estoy cometiendo algun error????

    El dispositivo funciona correctamente ya que lo he probado con el hyperterminal y con otro programa terminal.

    Muchas gracias por su ayuda!!!!
    using
     System;
    using
     System.Collections.Generic;
    using
     System.ComponentModel;
    using
     System.Data;
    using
     System.Drawing;
    using
     System.Linq;
    using
     System.Text;
    using
     System.Windows.Forms;
    using
     System.IO.Ports;
    
    namespace PruebaPuertoSerial { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //configura el puerto serial serialPort1.PortName = "COM1" ; serialPort1.BaudRate = 9600; serialPort1.DataBits = 8; serialPort1.Parity = Parity.None; serialPort1.StopBits = StopBits.One; serialPort1.Handshake = Handshake.None;
    serialPort1.Open();
    serialPort1.WriteLine(textBox1.Text);
    serialPort1.Close(); } } }
    • Editado rafaeltn jueves, 12 de noviembre de 2009 2:35 error de redaccion
    miércoles, 11 de noviembre de 2009 21:17
  • ya lei los links q me recomendaron y basandome en ellos cree este sencillo programa pero no funciona... no se porque pero el codigo aparece un poco desordenado, pero se entiende la idea

    P.D
    esto ya es otra pregunta y deberia abrir un nuevo post para q me respondan?

    Muchas gracias
    jueves, 12 de noviembre de 2009 15:55
  • Mira la clase serialPort incluida en el framework del .net da muchas opciones para manejar el puerto tales como escribir,leer entre otras, mi recomendacion para el problema
    que tu tienes que es no poder acceder desde el formulario solucionala instanciando el objeto dentro del formulario, o otra solucion seria crear un evento y un delegado y llamarlo desde el formulario escoje la que mejor te paresca aunque creo que mas faicl es instanciar el objeto en tu form.

    mas o menos la idea seria esta.Perdona si hay errores aca no tengo el entorno entocnes ando ahciendo el codigo de memoria jeje

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO.Ports;

    namespace PruebadeTramas
    {
        Public class Puerto
        {
          SerialPort sp = new SerialPort();// creas un objeto de tipo SerialPort llamado sp
         }
    }


    //desde tu interfaz haces algo asi.......

    puerto objPuerto = new Puerto (); // wau ha nacido un objeto puerto en tu interfaz grafica jejej;
                                                      // luego de estoo ya puedes utilizar todas las caracteristicas de tu clase base que en este caso es puerto que debe ser publica.
                                                     

    Espero haber sido un poco claro cualquier duda no dudes en hacerla.............

                                                   
    jueves, 26 de noviembre de 2009 14:40