Запрос ответ com port - C#
Формулировка задачи:
Здравствуйте. По очереди отправляю на порт 4 запроса, получаю ответ типа "13". Пытаюсь сделать онлайн опрос датчика(что бы постоянно отправлялись запросы и обновлялись текстбоксы). Проблема : если отправляю и получаю 1 запрос - все работает и обновляется. Если отправляю 2 - обновляется только по 1 запросу. Если больше 2 - ничего не происходит, отправляю и получаю, но боксы не обновляются. Мб у меня алгоритм не правильный?
И еще вопрос: можно ли как то сократить проверку в конце кода? А то код на 1000+ символов получается. Интервал таймеров менял. Что посоветуете? Если нужно могу скинуть весь код
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 регистров - больше писанины
Решение задачи: «Запрос ответ 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];
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д