Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Реализация протокола обмена с теплосчетчиком ВКТ-7
Диалог специалистов АВОК > ОБЩИЙ ФОРУМ > Автоматизация систем
nicamx
Всем доброго времени суток. Буду очень признателен за помощь. Разрабатываю программу связи с ВКТ -7. Счетчик отвечает. Передает свойства, единицы измерения, количество знаков и размер данных, но вот при получении данных возникла проблема.
С 2-х байтными данными разобрался (little endian) ,а вот с 4-х байтными (например G при текущих изменениях) не могу понять как.

В vktEasy получается:
приходит: 3B A8 83 3F
vktEasy интерпретируют как значение 1.02857
в свойствах, пришедших после запроса, про кол-во знаков G ничего не значится (в документации от 0-9999999 без каких либо точек)

Как я не крутил эти байты, ничего похожего на полученное ими число я не получил.

Если кто сталкивался, подскажите, пожалуйста.
Tigr
Разверните байты
3F 83 A8 3B = 1,028 это тип float
А тут готовое решение
nicamx
Спасибо за ответ и совет.

Tigr, eще раз большое спасибо!!! Действительно все получилось!!
nicamx
String myString = "3F83A83B";
float f = Float.intBitsToFloat(Integer.valueOf(myString,16).intValue());


Есть еще вопрос по недокументированным запросам

3F F7 00 02
и
3F F8 00 80

В тех поддержке мне не захотели раскрывать эту тайну. Но программа vktEasy очень активно пользуется этой связкой команд на этапе инициализации связи
Может быть кто то знает что это за команды
nicamx
Снова нужна помощь..
приходит строка FD FF FF FF
должно как то получиться -0.03

Подскажите, пожалуйста как выкрутиться. Предыдущее решение дает ошибку
Tigr
знаковое четырехбайтовое целое в обратном порядке (например integer в Паскале) деленое на 100
nicamx
Большое спасибо за ответ. Очень помогло. Бьюсь с реализацией.

String str = "FFFFFFFD";
int num = Integer.parseInt(str, 16);
System.out.println("num="+num);

дает ошибку, но в то же время
(Integer.valueOf((0xFFFFFFFD)).intValue())
дает заветное -3
nicamx
Разобрался.

Чтобы правильно работать со строкой и получать значение нужно использовать

Integer.parseUnsignedInt("fffffffd", 16)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.