Обработка данных из 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();
         ...
        }
Вот в чем проблема, допустим в textBox23, должно находиться десятичное число 22796 (или в шестнадцатиричной системе счисления - 59 0с), а в textBox23 по факту находиться число 1436 ( в 16-ой СС - 59 с), во втором байте спереди игнорируется нуль 0. Как выйти из этого положения? Если в listBox сделать так,
         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();
Такой способ дает число 1.96, а мне нужно 1.9600

Решение задачи: «Обработка данных из com порта»

textual
Листинг программы
textBox1.Text = (rez[225] << 8 | rez[224]).ToString();
textBox1.Text = (rez[227] << 8 | rez[226]).ToString();

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


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

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

13   голосов , оценка 3.692 из 5
Похожие ответы