Запрос ответ 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];