serialPort1.Write(CMD) записывает предыдущую строку в textBox. в C#

У меня действительно странная проблема. Вот краткое объяснение того, что я пытаюсь. Я пишу графический интерфейс для управления PIC MCU, который подключен к двум двигателям.

У меня есть несколько кнопок на форме, и одна из них - кнопка сброса двигателя. В дополнение к этому, у меня также есть текстовое поле, в котором будет отображаться журнал предыдущих действий. Например, к предыдущему действию добавлена ​​строка "Открытие порта Com4... ВЫПОЛНЕНО" в текстовом поле. Если я отправляю Reset Motor Code с использованием serialPort1.Write(CMD), программа не будет ждать, пока не получит ответ от MCU, и поместит последнюю строку в конце новой строки. так что в этом случае, если последней строкой было ВЫПОЛНЕНО, программа поместит это в конец новой строки без того, чтобы я что-либо записывал в текстовое поле.

Я надеюсь, что это имеет смысл, и надеюсь, что вы, ребята, можете мне помочь, потому что это сводит меня с ума. веселит,

        private void connectUWGP_Click(object sender, EventArgs e)
    {
        if (string.IsNullOrEmpty(comboBox1.Text))
        {
            textBox1.AppendText("Please select a COM Port." + Environment.NewLine);
            return;
        }
        else
        {
            if(Con_DisCon)
            {
                random_no = random.Next(0, 9);
                Serial_Init();
                textBox1.AppendText("Identifying Device on " + comboBox1.Text + "...");
                if(Serial_Send_CMD("(" + random_no.ToString() + ",7,x,x,x)"))          //Send IDENTIFY Command
                {

                }else
                {
                    textBox1.AppendText("Failed" + Environment.NewLine);
                }
            }else
            {
                textBox1.AppendText("Stopping UWGP...");
                if(Serial_Send_CMD("(" + tb_UWGP_ID_NO.Text + ",6,x,x,x)"))       //Send STOP Command
                {

                } else
                {
                    textBox1.AppendText("Failed" + Environment.NewLine);
                }
            }
        }
    }
   private bool Serial_Send_CMD(string CMD)
    {
        try
        {
            if (serialPort1.BytesToRead != 0) serialPort1.DiscardInBuffer();
            serialPort1.WriteLine(CMD);
            serialPort1.DiscardOutBuffer();
            return true;
        }
        catch
        {
            serialPort1.DiscardOutBuffer();
            return false;
        }
    }

    private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)//Function that handles Serial port receive events
    {
        if (e.EventType == System.IO.Ports.SerialData.Eof)
        {
            return;
        }
        Thread.Sleep(100);
        int i = 0;

        while(serialPort1.BytesToRead!=0 && serialPort1.IsOpen)
        {
            try
            {
                RX_DATA[i] = (char)serialPort1.ReadChar();

                Thread.Sleep(2);
            }
            catch(Exception)
            {

            }
            i++;
        }

        serialPort1.DiscardInBuffer();
        Data_Read_DONE = true;
        this.BeginInvoke(new EventHandler(Check_RX_DATA));//.Invoke(new EventHandler(Check_RX_DATA));

    }
    private void Check_RX_DATA(object sender, EventArgs e)
    {
        Thread.Sleep(100);

        if (RX_DATA[1].ToString() == random_no.ToString())
        {
            if ((RX_DATA[3] == '0'))
            {
                if(RX_DATA[5] == '1')
                {
                    textBox1.AppendText("Done" + Environment.NewLine);
                }else if(RX_DATA[7] == '1')
                {
                    textBox1.AppendText("LightBox Reset" + Environment.NewLine);
                }

                //for(int i = 0; i< 16; i++)
                //{
                //    RX_DATA[i] = '\0';
                //}
            }
            else if (RX_DATA[3] == '1')
            {
                //textBox1.AppendText("Done" + Environment.NewLine);
            }
            else if (RX_DATA[3] == '2')
            {
                //textBox1.AppendText("Done" + Environment.NewLine);
            }
            else if (RX_DATA[3] == '3')
            {
                //textBox1.AppendText("Done" + Environment.NewLine);
            }
            else if (RX_DATA[3] == '4')
            {
                //textBox1.AppendText("Done" + Environment.NewLine);
            }
            else if (RX_DATA[3] == '5')
            {
               // textBox1.AppendText("Done" + Environment.NewLine);
            }
            else if (RX_DATA[3] == '6')
            {
                textBox1.AppendText("Done" + Environment.NewLine);
                if(serialPort1.IsOpen)
                {
                    textBox1.AppendText("Closing ComPort...");
                    try
                    {
                        serialPort1.Close();
                    }
                    catch (IOException)
                    {
                        textBox1.AppendText("Failed" + Environment.NewLine);
                        return;
                    }
                }

                connectUWGP.Text = "Connect";
                tb_UWFP_FW.Clear();
                tb_UWGP_ID_NO.Clear();
                Automate_Scan_grp.Enabled = false;
                fullScan.Enabled = false;
                halfScan.Enabled = false;
                Man_Scan_grp.Enabled = false;
                resetPosition.Enabled = false;
                Con_DisCon = true;
                textBox1.AppendText("Done" + Environment.NewLine);
            }
            else if (RX_DATA[3] == '7')
            {
                string str_firmware = "";
                float flt_firmware = 0;
                tb_UWGP_ID_NO.Text = RX_DATA[1].ToString();
                str_firmware = RX_DATA[5].ToString() + RX_DATA[6].ToString() + RX_DATA[7].ToString();
                int x = Convert.ToInt32(str_firmware);
                flt_firmware = (float)x / 1000;
                tb_UWFP_FW.Text = flt_firmware.ToString();
                connectUWGP.Text = "Disconnect";
                Automate_Scan_grp.Enabled = true;
                fullScan.Enabled = true;
                halfScan.Enabled = true;
                Man_Scan_grp.Enabled = true;
                resetPosition.Enabled = true;
                Con_DisCon = false;
                textBox1.AppendText("Done" + Environment.NewLine);
            }
            else
            {
                textBox1.AppendText("Failed - Response ID or Response Mode does not match" + Environment.NewLine);
                return;
            }
        }

    }

Labmat.

0 ответов

Другие вопросы по тегам