none
PROBLEMAS CONEXIÓN BÁSCULA POR PUERTO SERIAL WINDOWS FORM RRS feed

  • Pregunta

  • Estimados, les cuento que me encuentro haciendo un visor para una báscula marca Mettler Toledo, el cuál no he podido recibir los datos ni conectar directamente con el puerto.

    Si alguno pudiera ayudarme se los agradecería. Dejo el código para que puedan ver qué problemas son los que tengo.

    using System.IO.Ports;

    namespace Romana
    {
        public partial class Form1 : Form
        {


            public Form1()
            {
                InitializeComponent();
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                bt_conectar.Enabled = false;

            }

            private void bt_buscar_Click(object sender, EventArgs e)
            {
                string[] PuertosDisponibles = SerialPort.GetPortNames();

                cb_puertos.Items.Clear();

                foreach (string puertos in PuertosDisponibles)
                {
                    cb_puertos.Items.Add(puertos);
                }
                if (cb_puertos.Items.Count>0)
                {
                    cb_puertos.SelectedIndex = 0;
                    MessageBox.Show("Elige un puerto");
                    bt_conectar.Enabled = true;
                }
                else
                {
                    MessageBox.Show("No hay puertos encontrados");
                    cb_puertos.Items.Clear();
                    cb_puertos.Text = "                      ";
                    bt_conectar.Enabled = false;

                }
            }

            private void bt_conectar_Click(object sender, EventArgs e)
            {

                try
                {
                    if (bt_conectar.Text=="CONECTAR")
                    {
                        sp_valores.BaudRate = 9600;
                        sp_valores.DataBits = 8;
                        sp_valores.Parity = Parity.None;
                        sp_valores.StopBits = StopBits.One;
                        sp_valores.Handshake = Handshake.None;
                        sp_valores.PortName = cb_puertos.Text;

                        try
                        {
                            sp_valores.Open();
                            bt_conectar.Text = "DESCONECTAR";
                            lbl_conexion.ForeColor = Color.ForestGreen;
                            lbl_conexion.Text = "CONECTADO";
                        }
                        catch (Exception exc)
                        {

                            MessageBox.Show(exc.Message.ToString());
                        }
                    }
                    else if (bt_conectar.Text == "DESCONECTAR")
                    {
                        sp_valores.Close();
                        bt_conectar.Text = "CONECTAR";
                        lbl_conexion.ForeColor = Color.Red;
                        lbl_conexion.Text = "SIN CONEXION";
                        
                    }
                }
                catch (Exception exc)
                {

                    MessageBox.Show(exc.Message.ToString());
                }
            }

            private void DatoRecibido(object sender, SerialDataReceivedEventArgs e)
            {
                string Data_in = sp_valores.ReadExisting();
                MessageBox.Show(Data_in);
                tb_muestraNumeros.Text = Data_in;
            }
        }
    }

    lunes, 3 de febrero de 2020 20:47

Todas las respuestas

  • Hola Marcharr

     

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma,  te  sugiero realizar lo siguiente:

     

    •  Si la báscula cuenta con una biblioteca de desarrollo, ,te recomiendo utilizarla. 
    • ¿Qué mensaje de error te marca al momento de conectar tu aplicación con la misma?

     

     

    Gracias por usar los foros de MSDN.

     

    Pablo Rubio

     

     ____

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

     

    jueves, 6 de febrero de 2020 16:29
    Moderador
  • Hola,

    ¿Tienes el manual de la báscula?

    Muchas veces antes de recibir un dato por el puerto serie, hay que pedírselo, en los manuales tiene que venir si necesita comando y cuál o de lo contrario es envío automático.


    Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcándola como útil.
    Blog

    jueves, 6 de febrero de 2020 18:31

  • Es el visor, la idea es que muestre en el textbox de el centro de la aplicación, sólo el peso entregado por la báscula.

    Al presionar el borón buscar, busca sin problemas el puerto com que esté disponible para trabajar o recibir los datos (COM 4), y al presionar conectar, no funciona el botón, ya que al conectarse, las líneas punteadas deben cambiarse de color a verde (si es que está conectado al puerto y marcar "Conectado" o a rojo y marcar "Sin conexión") y además, comenzar a recibir los datos y mostrar el peso que muestre la báscula.

    Dejaré una actualización del código de más arriba:

    namespace Romana
    {
        public partial class Form1 : Form
        {
            private string strBufferIn;
            //private string strBufferOut;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void AccesoForm(string accion)
            {
                strBufferIn = accion;
                //------------------------------------
                tb_muestraNumeros.Text = strBufferIn;
                //------------------------------------
            }
            private void Form1_Load(object sender, EventArgs e)
            {
    
                strBufferIn = "";
                bt_conectar.Enabled = false;
            }
    
            private void bt_buscar_Click(object sender, EventArgs e)
            {
                string[] PuertosDisponibles = SerialPort.GetPortNames();
    
                cb_puertos.Items.Clear();
    
                foreach (string puertos in PuertosDisponibles)
                {
                    cb_puertos.Items.Add(puertos);
                }
                if (cb_puertos.Items.Count>0)
                {
                    cb_puertos.SelectedIndex = 0;
                    MessageBox.Show("Elige un puerto");
                    bt_conectar.Enabled = true;
                }
                else
                {
                    MessageBox.Show("No hay puertos encontrados");
                    cb_puertos.Items.Clear();
                    cb_puertos.Text = "                      ";
                    strBufferIn = "";
                    bt_conectar.Enabled = false;
    
                }
            }
    
            private void bt_conectar_Click(object sender, EventArgs e)
            {
    
                try
                {
                    if (bt_conectar.Text=="CONECTAR")
                    {
                        sp_valores.BaudRate = 9600;
                        sp_valores.DataBits = 8;
                        sp_valores.Parity = Parity.None;
                        sp_valores.StopBits = StopBits.One;
                        sp_valores.Handshake = Handshake.None;
                        sp_valores.PortName = cb_puertos.Text;
    
                        try
                        {
                            sp_valores.Open();
                            bt_conectar.Text = "DESCONECTAR";
                            lbl_conexion.ForeColor = Color.ForestGreen;
                            lbl_conexion.Text = "CONECTADO";
                        }
                        catch (Exception exc)
                        {
    
                            MessageBox.Show(exc.Message.ToString());
                        }
                    }
                    else if (bt_conectar.Text == "DESCONECTAR")
                    {
                        sp_valores.Close();
                        bt_conectar.Text = "CONECTAR";
                        lbl_conexion.ForeColor = Color.Red;
                        lbl_conexion.Text = "SIN CONEXION";
                        
                    }
                }
                catch (Exception exc)
                {
    
                    MessageBox.Show(exc.Message.ToString());
                }
            }
    
            private void DatoRecibido(object sender, SerialDataReceivedEventArgs e)
            {
                //AccesoForm(sp_valores.ReadExisting());
    
    
                string Data_in = sp_valores.ReadExisting();
                MessageBox.Show(Data_in);
                tb_muestraNumeros.Text = Data_in;
            }
        }
    }
    



    jueves, 6 de febrero de 2020 20:42
  • Hola,

    ¿Tienes el manual de la báscula?

    Muchas veces antes de recibir un dato por el puerto serie, hay que pedírselo, en los manuales tiene que venir si necesita comando y cuál o de lo contrario es envío automático.

    Hola, 

    Si, tengo el manual, e igualmente instalé el programa puTTy, para verificar si la báscula entrega los datos o no, si con el programa puedo visualizar sin problemas el peso que entrega la báscula ( que es el único dato que encesito mostrar en pantalla.

    Respecto al manual, si lo tengo, lo encontré dentro de la mísma página del fabricante de la básculam y no aparece si hay que solicitarle los datos o no, tampoco aparece que éstos se entreguen automáticamente, pero por la prueba que realicé, si lo realiza automáticamente, ya que como te comenté, pude visualizar sin problemas el peso de la báscula con el puTTy.

    jueves, 6 de febrero de 2020 20:46
  • Hola,

    Así a simple vista no parece que tengas nada mal.

    He visto que tienes dos try, no es necesario con el externo es suficiente, pero ese no es el error 

    ¿ Has puesto puntos de interrupción para ver el desarrollo del código? Yo pondría uno en el evento de recepción de datos para ver si se ejecuta y otro en el evento conectar para ver cómo evalúa los if. No sea que no entra en el primero y ni siquiera abres el puerto.


    Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcándola como útil.
    Blog

    sábado, 8 de febrero de 2020 10:43
  • Mira, he estado probando,

    En el código, dentro del botón conectar, al parecer noe stoy haciendo la inicialización con el puerto COM. Tal y como está, mi botón "conectar" no funciona pero al mover por ejemplo el código "sp_valores.Open(); " fuera del try, el botón recién comienza a reconocer el puerto COM, y me arroja un error que dice "System.IO.IOException: 'El puerto 'COM1' no existe.' " teniendo configurado el puerto COM configurado en mi PC con la misma configuración de más arriba.

    Ahí es donde viene mi dilema, en elcódigo del botón conectar.

    lunes, 10 de febrero de 2020 12:09
  • Fuera de que try sacas sp_valores.Open().

    ¿Seguro que com1 existe?

    ¿Pasa por el if?


    Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcándola como útil.
    Blog

    lunes, 10 de febrero de 2020 15:43