none
STRING PORTA SERIAL RRS feed

  • Pergunta

  • Bom dia.

    Estou fazendo uma plicação para envio de informaçãoes ao um display de balança pela porta serial.

    Preciso que quando enviar o valor para o painel inclua "ST e SG" no inicio e no fim a instrução de fechamento CR e LF.

    Como e inclui este instrução no código abaixo?

    namespace SerialCOMThreading
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();

            }

            private static string RxString="";

            private void openPort_Click(object sender, EventArgs e)
            {

                    try
                    {
                        // make sure port isn't open
                        if (!serialPort.IsOpen && !serialPortRead.IsOpen)
                        {
             
                           // set status
                            readTextBox.Text = serialPort.PortName+" Ready!";
                            readTextBox.AppendText(serialPortRead.PortName + " Ready!");
                            //open serial port 
                            serialPort.Open();
                            serialPortRead.Open();
                            // prevent reinitiation 
                            openPort.Enabled = false;
                         }
                        else
                            readTextBox.Text= "Port isn't openned";
                    }
                    catch (UnauthorizedAccessException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                
            }
            // close ports
            private void Form1_FormClosed(object sender, FormClosedEventArgs e)
            {
                serialPort.Close();
                serialPortRead.Close();
            }
            
            //datareceived handler
            private void serialPortRead_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            {
                try
                {
                    RxString = serialPortRead.ReadExisting();
                    this.Invoke(new EventHandler(DisplayText));
                }
                catch (System.TimeoutException) { }
            }
            // Read/Update to textbox
            private void DisplayText(object s, EventArgs e)
            {
                readTextBox.AppendText(RxString);
           
            }

            // send message over serial COM
            private void sendButton_Click(object sender, EventArgs e)
            {
                serialPort.Write(writeTextBox.Text);
            }

            private void writeTextBox_MouseDoubleClick(object sender, MouseEventArgs e)
            {
                serialPort.Write(writeTextBox.Text);
            }

            private void writeTextBox_KeyPress(object sender, KeyPressEventArgs e)
            {
                // If the port is closed, don't try to send a character.
                // or not in instance MS mode
                if (!serialPort.IsOpen || !instanceMS.Checked) return;

                // If the port is Open, declare a char[] array with one element.

                char[] buff = new char[1];

                // Load element 0 with the key character.
                buff[0] = e.KeyChar;

                // Send the one character buffer.
                serialPort.Write(buff, 0, 1);

                // Set the KeyPress event as handled so the character won't
                // display locally. If you want it to display, omit the next line.

               // e.Handled = true;
            }

            private void clearButton_Click(object sender, EventArgs e)
            {
                readTextBox.Text = "";
                writeTextBox.Text = "";
            }







        }
    }

    sexta-feira, 20 de janeiro de 2017 10:36

Respostas

  • Olá,

    Pelo que dá para ver inicialmente, seria nesses dois método aqui:

            // send message over serial COM
            private void sendButton_Click(object sender, EventArgs e)
            {
                serialPort.Write("STSG" + writeTextBox.Text + "CRLF");
            }
    
            private void writeTextBox_MouseDoubleClick(object sender, MouseEventArgs e)
            {
                serialPort.Write("STSG" + writeTextBox.Text + "CRLF");
            }


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    sexta-feira, 20 de janeiro de 2017 10:46
  • Pelo que entendi, o formato tem que ser em ASCII para que o display possa compreender.

    eu encontrei essa citação na internet mas é para o final e eu não sei onde inserir no código.

    string command = "myCommand";
    
    port.write(string.format("{0}\r\n", command));

    \r\n = CR + LF → É usado como caractere de nova linha no Windows

    sexta-feira, 20 de janeiro de 2017 11:16

Todas as Respostas

  • Olá,

    Pelo que dá para ver inicialmente, seria nesses dois método aqui:

            // send message over serial COM
            private void sendButton_Click(object sender, EventArgs e)
            {
                serialPort.Write("STSG" + writeTextBox.Text + "CRLF");
            }
    
            private void writeTextBox_MouseDoubleClick(object sender, MouseEventArgs e)
            {
                serialPort.Write("STSG" + writeTextBox.Text + "CRLF");
            }


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    sexta-feira, 20 de janeiro de 2017 10:46
  • Pelo que entendi, o formato tem que ser em ASCII para que o display possa compreender.

    eu encontrei essa citação na internet mas é para o final e eu não sei onde inserir no código.

    string command = "myCommand";
    
    port.write(string.format("{0}\r\n", command));

    \r\n = CR + LF → É usado como caractere de nova linha no Windows

    sexta-feira, 20 de janeiro de 2017 11:16
  • Bom dia.

    André tem que ser em ASCII, se não estaremos enviando um texto para o display.

    Não tem como fazer uma conversão destas informações?

    segunda-feira, 23 de janeiro de 2017 14:24