Обработка данных из com порта - C#
Формулировка задачи:
Неправильно читаются данные из массива (в одном байте игнорируется 0 спереди)
Настройки порта не привожу, чтобы не захламлять код Кусок кода
Листинг программы
- const int DataSize = 344;
- byte[] rez = new byte[DataSize]; // массив для хранения данных длинной 344 байта
- SerialPort ComPort = new SerialPort();
- public void readcomport()
- {
- listBox1.Items.Clear();
- ComPort.DiscardInBuffer();
- ComPort.DiscardOutBuffer();
- // цикл считывания побайтно из порта и преобразование в 16-ую систему счисления.
- for (int i = 0; i< DataSize; i++)
- {
- rez[i]= Convert.ToByte(ComPort.ReadByte());
- listBox1.Items.Add(i + ". " + Convert.ToString(rez[i], 16)); //выводим данные ListBox
- }
- display(); // вызов функции отображение данных из прибора на экран
- }
- // Сцепление младшего и старшего байта
- public string szepka (byte low, byte hi)
- {
- prizep = String.Concat(Convert.ToString(low, 16), Convert.ToString(hi, 16));
- return prizep;
- }
- // Раскидываю данные по ячейкам
- void display()
- {
- ...
- szepka(rez[225], rez[224]); // 1-1
- textBox1.Text = Convert.ToInt32(prizep, 16).ToString();
- szepka(rez[227], rez[226]); // 1-2
- textBox2.Text = Convert.ToInt32(prizep, 16).ToString();
- ...
- }
Листинг программы
- listBox1.Items.Add(i + ". " + Convert.ToString(rez[i], 16).PadLeft(2,'0'));
Второй вопрос.
Как правильно округлить десятичное число, например до 4 знаков, но чтобы не пропадали нули, например, число 1.9600. Пробовал так,
Листинг программы
- textBox91.Text = Math.Round(float.Parse(textBox61.Text) / float.Parse(textBox65.Text), 4).ToString();
Решение задачи: «Обработка данных из com порта»
textual
Листинг программы
- textBox1.Text = (rez[225] << 8 | rez[224]).ToString();
- textBox1.Text = (rez[227] << 8 | rez[226]).ToString();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д