none
Manejar RS232 RRS feed

  • Pregunta

  • Hola:

    Con la tecnología WPF. ¿Se puede alguna manera controlar el puerto serie RS232?

    Se que en el otro tiene el componente serialPort1, pero en WPF no lo tiene. Por eso quiero saber si en realidad se puede hacer.

    Por ahora uso el Visual C# 2010 Express en Inglés. A lo mejor se puede hacer el de pago.

    Saludo.


    sábado, 15 de mayo de 2010 2:55

Respuestas

  • Hola Metaconta

    En WPF puedes usar la clase Serialport definiendola por código de esta manera:

    Class MainWindow 
      Private WithEvents puertocom As System.IO.Ports.SerialPort
    
    End Class

    al declararla con eventos podrás acceder a ellos como si fuese un control presente en xaml en el desplegable de objetos y eventos que tienes en la parte superior de la ventana de código.

    Espero que te sea util, un gran saludo!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog
    Sigueme en Twitter
    sábado, 15 de mayo de 2010 11:19
    Moderador
  • Hola metaconta

    Debes crear una instancia de serialport para poder usarlo.

    En c# seria algo así:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    
    using System.IO.Ports;
    namespace WpfApplication1
    {
      /// <summary>
      /// Interaction logic for MainWindow.xaml
      /// </summary>
      public partial class MainWindow : Window
      {
        //Declaramos nuestra instancia a nivel de clase
        private SerialPort PuertoSerie = new SerialPort();
    
        public MainWindow()
        {
          InitializeComponent();
        }
    
        private void button1_Click(object sender, RoutedEventArgs e)
        {
          PuertoSerie.PortName = "COM1";
          PuertoSerie.Open(); // Usamos nuestra instancia para trabajar con el serialport
          byte[] mBuffer = new byte[1];
          mBuffer[0] = 0x74; // ASCII la letra "t".
          PuertoSerie.Write(mBuffer, 0, mBuffer.Length); // Usamos nuestra instancia para trabajar con el serialport
        }
      }
    }
    

     

    Espero que te sirva, un gran saludo!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog
    Sigueme en Twitter
    sábado, 15 de mayo de 2010 13:51
    Moderador

Todas las respuestas

  • Hola Metaconta

    En WPF puedes usar la clase Serialport definiendola por código de esta manera:

    Class MainWindow 
      Private WithEvents puertocom As System.IO.Ports.SerialPort
    
    End Class

    al declararla con eventos podrás acceder a ellos como si fuese un control presente en xaml en el desplegable de objetos y eventos que tienes en la parte superior de la ventana de código.

    Espero que te sea util, un gran saludo!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog
    Sigueme en Twitter
    sábado, 15 de mayo de 2010 11:19
    Moderador
  • Hola:

    Lo útil me ha servido que me confirmaras que es posible, uso el C#, deja ver si puedo hacerlo. Lo qu eno entiendo el motivo de no poner el componente hecho como ocurre con el formulario normal que si lo posee y es extremadamente cómodo.

    Voy a investigar a ver si logro funcionar el puerto serie.

    Con WPF quiero hacer un manual como he hecho con WFA sobre el puerto serie.

    Ver manual C#

    Ver manual C++ y Visual Basic .net

    Saludo.

     

    EDITO :

    Hola de nuevo.

    Haciendo pruebas me da error con WPF.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    
    using System.IO.Ports; // No olvidar.
    
    namespace Puerto_serie_WPF
    {
      /// <summary>
      /// Interaction logic for MainWindow.xaml
      /// </summary>
      public partial class MainWindow : Window
      {
        public MainWindow()
        {
          InitializeComponent();
        }
    
        private void button1_Click(object sender, RoutedEventArgs e)
        {
          SerialPort.Open(); // Error aquí.
          byte[] mBuffer = new byte[1];
          mBuffer[0] = 0x74; // ASCII la letra "t".
          SerialPort.Write(mBuffer, 0, mBuffer.Length); // Error aquí.
        }
      }
    }
    
    Error    1    An object reference is required for the non-static field, method, or property 'System.IO.Ports.SerialPort.Open()'    C:\Documents and Settings\Hunter\Mis documentos\Visual Studio 2010\Projects\Puerto_serie_WPF\Puerto_serie_WPF\MainWindow.xaml.cs    31    13    Puerto_serie_WPF

     

     

    Error    2    An object reference is required for the non-static field, method, or property 'System.IO.Ports.SerialPort.Write(byte[], int, int)'    C:\Documents and Settings\Hunter\Mis documentos\Visual Studio 2010\Projects\Puerto_serie_WPF\Puerto_serie_WPF\MainWindow.xaml.cs    34    13    Puerto_serie_WPF


    Saludo.


    • Editado Metaconta sábado, 15 de mayo de 2010 13:42 Poner códigos.
    sábado, 15 de mayo de 2010 13:00
  • Hola metaconta

    Debes crear una instancia de serialport para poder usarlo.

    En c# seria algo así:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    
    using System.IO.Ports;
    namespace WpfApplication1
    {
      /// <summary>
      /// Interaction logic for MainWindow.xaml
      /// </summary>
      public partial class MainWindow : Window
      {
        //Declaramos nuestra instancia a nivel de clase
        private SerialPort PuertoSerie = new SerialPort();
    
        public MainWindow()
        {
          InitializeComponent();
        }
    
        private void button1_Click(object sender, RoutedEventArgs e)
        {
          PuertoSerie.PortName = "COM1";
          PuertoSerie.Open(); // Usamos nuestra instancia para trabajar con el serialport
          byte[] mBuffer = new byte[1];
          mBuffer[0] = 0x74; // ASCII la letra "t".
          PuertoSerie.Write(mBuffer, 0, mBuffer.Length); // Usamos nuestra instancia para trabajar con el serialport
        }
      }
    }
    

     

    Espero que te sirva, un gran saludo!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog
    Sigueme en Twitter
    sábado, 15 de mayo de 2010 13:51
    Moderador
  • Ahora si me funciona. Lo que no hace falta poner el Private, me funciona igual ponerlo que sin  ponerlo.

     

    Muchas gracias mi muy distinguido amigo.


    sábado, 15 de mayo de 2010 14:47