Запрос ответ com port - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. По очереди отправляю на порт 4 запроса, получаю ответ типа "13". Пытаюсь сделать онлайн опрос датчика(что бы постоянно отправлялись запросы и обновлялись текстбоксы). Проблема : если отправляю и получаю 1 запрос - все работает и обновляется. Если отправляю 2 - обновляется только по 1 запросу. Если больше 2 - ничего не происходит, отправляю и получаю, но боксы не обновляются. Мб у меня алгоритм не правильный?
byte[] n1 = new byte[] { 0x10, 0x04, 0x01, 0x80, 0x00, 0x03, 0xB3, 0x5E };
        byte[] n2 = new byte[] { 0x10, 0x04, 0x01, 0x81, 0x00, 0x04, 0xA3, 0x5C };
        byte[] n3 = new byte[] { 0x10, 0x04, 0x01, 0x82, 0x00, 0x05, 0x92, 0x9C };
        byte[] n4 = new byte[] { 0x10, 0x04, 0x01, 0x81, 0x00, 0x06, 0x22, 0x9D };
 
        byte[] send = new byte[8];
 
        char[] rec = new char[18];
 
        int i = 1; int k = 0;

        public void timer1_Tick(object sender, EventArgs e)
        {
            for (k = 0; k < 1; k++)
            {
 
                if (i == 1)
                {
                    i = 2;
                    send = n1;
                  
                }
 
                else if (i == 2)
                {
                    i = 3;
                    send = n3;
                }
                else if (i == 3)
                {
                    i = 1;
                    send = n4;
                }
 
            }

        }
 
        private void timer2_Tick(object sender, EventArgs e)
        //n1:      
        {
            port.Write(send, 0, send.Length);
 
            if (port.BytesToRead > 0)
            {
                port.Read(rec, 0, rec.Length);

                int x5 = rec[4];
//n1:
                if (send == n1)
                {
                   if (x5 == 1)
                    {
                        textBox1.Text = 0.ToString();
                        textBox2.Text = 0.ToString();
                        textBox3.Text = 1.ToString();
                    } 

                    else if (x5 == 2)
                    {
                        textBox1.Text = 0.ToString();
                        textBox2.Text = 1.ToString();
                        textBox3.Text = 0.ToString();
                    }
                    else if (x5 == 3)
                    {
                        textBox1.Text = 1.ToString();
                        textBox2.Text = 1.ToString();
                        textBox3.Text = 0.ToString();
                    }
                    else if (x5 == 4)
                    {
                        textBox1.Text = 0.ToString();
                        textBox2.Text = 0.ToString();
                        textBox3.Text = 1.ToString();
                    }
                    else if (x5 == 5)
                    {
                        textBox1.Text = 1.ToString();
                        textBox2.Text = 0.ToString();
                        textBox3.Text = 1.ToString();
                    }
                    else if (x5 == 6)
                    {
                        textBox1.Text = 0.ToString();
                        textBox2.Text = 1.ToString();
                        textBox3.Text = 1.ToString();
                    }
                    else if (x5 == 7)
                    {
                        textBox1.Text = 1.ToString();
                        textBox2.Text = 1.ToString();
                        textBox3.Text = 1.ToString();
                    }

                    if (textBox3.Text == 1.ToString())
                        textBox3.BackColor = Color.Red;
                    else
                        textBox3.BackColor = Color.White;
                }
.........//остальные 3 не буду кидать, т.к. там больше 3 регистров - больше писанины
И еще вопрос: можно ли как то сократить проверку в конце кода? А то код на 1000+ символов получается. Интервал таймеров менял. Что посоветуете? Если нужно могу скинуть весь код

Решение задачи: «Запрос ответ com port»

textual
Листинг программы
string s1 = "00";
            s1 += Convert.ToString(x5, 2);
            
            textBox1.Text = " " + s1[s1.Length - 3];
            textBox2.Text = " " + s1[s1.Length - 2];
            textBox3.Text = " " + s1[s1.Length - 1];

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.333 из 5