Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 17.02.2013
Сообщений: 52

Преобразовать байты в число с плавающей точкой

11.09.2020, 07:00. Показов 2063. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, появилось желание написать программку для работы с ПИД-регулятором ОВЕН ТРМ251 (по сути программа должна только вкл/выкл и отображать температуру).
Из программ "Конфигуратор ТРМ251" запрашивал температуру и с помощью сниффера смотрел ответы. При запросе температуры приходят такие ответы (справа это реальная температура, которая отображается в "Конфигуратор ТРМ251"):

Code
1
2
3
4
5
6
7
8
9
10
11
12
23 48 47 47 4D 4F 4E 4F 4B 4B 48 52 47 50 50 51 56 54 4E 4E 4D 50 49 4C 51 0D     22.075
 
23 48 47 47 4D 4F 4E 4F 4B 4B 48 52 47 51 4C 52 4A 50 4D 55 47 53 48 4C 4B 0D     22.081
23 48 47 47 4D 4F 4E 4F 4B 4B 48 52 47 51 4C 52 4A 51 50 4D 55 50 47 4E 54 0D     22.081
23 48 47 47 4D 4F 4E 4F 4B 4B 48 52 47 51 4C 52 4A 52 56 52 51 56 56 48 49 0D     22.081
 
23 48 47 47 4D 4F 4E 4F 4B 4B 48 52 48 47 4B 54 4A 56 4C 4F 49 4B 54 51 54 0D     22.127
23 48 47 47 4D 4F 4E 4F 4B 4B 48 51 53 50 4B 52 55 4A 4C 55 4D 47 54 4A 48 0D     21.573
23 48 47 47 4D 4F 4E 4F 4B 4B 48 51 4A 48 4E 4F 56 4D 48 4C 53 56 4B 4F 48 0D     20.387
23 48 47 47 4D 4F 4E 4F 4B 4B 48 50 54 4B 48 54 53 4F 49 4C 4D 53 49 54 4F 0D     19.657
23 48 47 47 4D 4F 4E 4F 4B 4B 48 50 4E 4B 4C 52 4A 51 53 50 51 48 56 55 4D 0D     18.909
23 48 47 47 4D 4F 4E 4F 4B 4B 48 50 49 56 4F 48 4D 54 47 4A 47 4B 47 51 56 0D     18.371
Судя по:

Code
1
2
3
23 48 47 47 4D 4F 4E 4F 4B 4B 48 52 47 51 4C 52 4A 50 4D 55 47 53 48 4C 4B 0D     22.081
23 48 47 47 4D 4F 4E 4F 4B 4B 48 52 47 51 4C 52 4A 51 50 4D 55 50 47 4E 54 0D     22.081
23 48 47 47 4D 4F 4E 4F 4B 4B 48 52 47 51 4C 52 4A 52 56 52 51 56 56 48 49 0D     22.081
Я так понял что нужно работать с этими бйтами:

Code
1
52 47 51 4C 52 4A
Ну и собственно вопрос правильно я определил и как их преобразовать на C# в число 22.081?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.09.2020, 07:00
Ответы с готовыми решениями:

Преобразовать число с плавающей точкой в строку
Здравствуйте! Как преобразовать число с плавающей точкой в строку(чтобы в строке присутствовала точка). Например: 33.4="33.4"...

В текстовом файле записаны вещественные числа с плавающей точкой. Преобразовать файл, заменив каждое число, округленным
Задача: В текстовом файле записаны вещественные числа с плавающей точкой. Преобразовать файл, заменив каждое число, округленным до десятых...

Преобразовать числа в форме с фиксированной точкой в форму с плавающей
Помогите пожалуйста с задачей, в текстовом файле записаны вещественные числа в форме с фиксированной точкой. Преобразовать файл, представив...

7
76 / 54 / 22
Регистрация: 26.02.2017
Сообщений: 206
11.09.2020, 07:25
Sanekkk1, для преобразования чисел в массив байт и обратно используется класс BitConverter Класс. По поводу правильности Ваших рассуждений не могу ничего сказать. Однако, отмечу, что массив
Code
1
52 47 51 4C 52 4A
однозначно не будет числом с плавающей запятой. Тип double имеет размерность 8 байт, float - 4 байта
1
 Аватар для ashsvis
923 / 503 / 202
Регистрация: 08.10.2018
Сообщений: 1,553
Записей в блоге: 11
11.09.2020, 08:13
Цитата Сообщение от Sanekkk1 Посмотреть сообщение
для работы с ПИД-регулятором ОВЕН ТРМ251
Если хотите разобраться, изучите протокол для работы с приборами ОВЕН:
ОПИСАНИЕ протокола обмена между ПЭВМ и приборами ОВЕН
0
1 / 1 / 0
Регистрация: 17.02.2013
Сообщений: 52
11.09.2020, 10:40  [ТС]
Несколько раз читал, но так и не вкурил на какой позиции должны находится эти байти и как их потом преобразовать
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
12.09.2020, 13:24
беда
0
 Аватар для ashsvis
923 / 503 / 202
Регистрация: 08.10.2018
Сообщений: 1,553
Записей в блоге: 11
12.09.2020, 15:24
Цитата Сообщение от Sanekkk1 Посмотреть сообщение
не вкурил
Используйте для ТРМ251 протокол MODBUS RTU, который понятнее.
1
Эксперт .NET
 Аватар для Rius
13092 / 7651 / 1672
Регистрация: 25.05.2015
Сообщений: 23,297
Записей в блоге: 14
12.09.2020, 18:54
Дубликат темы Считать температуру из ТРМ251 по протоколу ОВЕН

Добавлено через 30 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using System;
using System.Linq;
 
namespace ConsoleApp1 {
    internal class Program {
        private static void Main(string[] args) {
            byte[] packet = {
                0x23, 0x48, 0x47, 0x47, 0x4D, 0x4F, 0x4E, 0x4F, 0x4B, 0x4B, 0x48, 0x52, 0x47, 0x50, 0x50, 0x51, 0x56,
                0x54, 0x4E, 0x4E, 0x4D, 0x50, 0x49, 0x4C, 0x51, 0x0D
            };
 
            GetTemperature(packet, out var f);
 
            Console.WriteLine(f);
        }
 
        private static bool GetTemperature(byte[] packet, out float value) {
            value = 0;
 
            if (packet.Length < 12) {
                return false;
            }
 
            if (packet[0] != 0x23) {
                return false;
            }
 
            var bytes = Enumerable.Range(0, packet.Length - 2)
                .Where(x => x % 2 == 0)
                .Select(x => Convert.ToByte(((packet[x + 1] - 0x47) << 4) | (packet[x + 2] - 0x47)))
                .ToArray();
 
            var dataLength = bytes[1] & 0x0f;
 
            var data = bytes
                .Skip(4)
                .Take(dataLength)
                .ToArray();
 
            value = BitConverter.ToSingle(data.Take(4).Reverse().ToArray(), 0);
 
            return true;
        }
    }
}
Code
1
22,07504
2
1 / 1 / 0
Регистрация: 17.02.2013
Сообщений: 52
13.09.2020, 05:48  [ТС]
Всем спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.09.2020, 05:48
Помогаю со студенческими работами здесь

Дана строка S, изображающая вещественное число в формате с плавающей точкой, и целое число N (N>0)
2. Дана строка S, изображающая вещественное число в формате с плавающей точкой, и целое число N (N&gt;0). Вывести набор символов,...

Число с плавающей точкой
Прошу помогите, только начинаю учиться и есть затыки в работе с си. Есть программа которая выбирает вариант решения в зависимости от...

число с плавающей точкой
подскажите как из строкого формата числа с двумя числами после запитой, например 122,00 или 32,94, перевести в числовой не теряя запитой.

Число с плавающей точкой
Есть число 10.50000011112223 нужны две цифры после запятой, применяю round 2 , и ноль пропадает, как сделать так, чтобы получить 50 ?

Число с плавающей точкой
Здравствуйте. Такая проблема: Написал однослойный персептрон. Создаю, обучаю, проверяю - все норм. но при повторном обучении вылезает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru