Реклама / ООО «ИЗОЛПРОЕКТ» / ИНН: 7725566484 | ERID: 2Vtzqx6kV7S
IPB IPB
Проектирование, монтаж, наладка, сервис


Здравствуйте, гость ( Вход | Регистрация )

- Стандарт НП «АВОК» 7.11-2024
«Рекомендации по проектированию инженерных систем
дошкольных образовательных организаций»

АВОК в соц. сетях
ИНН: 7714824045 | erid: 2VtzqwzKQiU
 
Добавить ответ в эту темуОткрыть тему
> Реализация протокола обмена с теплосчетчиком ВКТ-7
nicamx
сообщение 7.9.2017, 21:34
Сообщение #1





Группа: New
Сообщений: 15
Регистрация: 1.6.2010
Пользователь №: 59474



Всем доброго времени суток. Буду очень признателен за помощь. Разрабатываю программу связи с ВКТ -7. Счетчик отвечает. Передает свойства, единицы измерения, количество знаков и размер данных, но вот при получении данных возникла проблема.
С 2-х байтными данными разобрался (little endian) ,а вот с 4-х байтными (например G при текущих изменениях) не могу понять как.

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

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

Если кто сталкивался, подскажите, пожалуйста.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Tigr
сообщение 7.9.2017, 22:44
Сообщение #2





Группа: Участники форума
Сообщений: 54
Регистрация: 1.3.2009
Пользователь №: 29832



Разверните байты
3F 83 A8 3B = 1,028 это тип float
А тут готовое решение
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
nicamx
сообщение 7.9.2017, 23:35
Сообщение #3





Группа: New
Сообщений: 15
Регистрация: 1.6.2010
Пользователь №: 59474



Спасибо за ответ и совет.

Tigr, eще раз большое спасибо!!! Действительно все получилось!!
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
nicamx
сообщение 8.9.2017, 0:08
Сообщение #4





Группа: New
Сообщений: 15
Регистрация: 1.6.2010
Пользователь №: 59474



String myString = "3F83A83B";
float f = Float.intBitsToFloat(Integer.valueOf(myString,16).intValue());


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

3F F7 00 02
и
3F F8 00 80

В тех поддержке мне не захотели раскрывать эту тайну. Но программа vktEasy очень активно пользуется этой связкой команд на этапе инициализации связи
Может быть кто то знает что это за команды
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
nicamx
сообщение 6.10.2017, 21:24
Сообщение #5





Группа: New
Сообщений: 15
Регистрация: 1.6.2010
Пользователь №: 59474



Снова нужна помощь..
приходит строка FD FF FF FF
должно как то получиться -0.03

Подскажите, пожалуйста как выкрутиться. Предыдущее решение дает ошибку
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Tigr
сообщение 7.10.2017, 10:24
Сообщение #6





Группа: Участники форума
Сообщений: 54
Регистрация: 1.3.2009
Пользователь №: 29832



знаковое четырехбайтовое целое в обратном порядке (например integer в Паскале) деленое на 100

Сообщение отредактировал Tigr - 7.10.2017, 10:26
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
nicamx
сообщение 7.10.2017, 14:36
Сообщение #7





Группа: New
Сообщений: 15
Регистрация: 1.6.2010
Пользователь №: 59474



Большое спасибо за ответ. Очень помогло. Бьюсь с реализацией.

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

дает ошибку, но в то же время
(Integer.valueOf((0xFFFFFFFD)).intValue())
дает заветное -3
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
nicamx
сообщение 7.10.2017, 15:02
Сообщение #8





Группа: New
Сообщений: 15
Регистрация: 1.6.2010
Пользователь №: 59474



Разобрался.

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

Integer.parseUnsignedInt("fffffffd", 16)
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Добавить ответ в эту темуОткрыть тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

Реклама
ООО «Арктика групп» ИНН: 7713634274




Реклама: ООО «СибСтронг» | ИНН 6670013662 | ERID: 2VtzqvWgxEU

ООО «УНИСПЛИТ» ИНН: 6453155081 erid:2VtzqvybpdW

Реклама: ООО «СЛ-ЛАЗЕР» ИНН 7727447267 | erid: 2VtzquvhFWx
Последние сообщения Форума






RSS Текстовая версия Сейчас: 3.8.2025, 14:19
Политика ООО ИИП «АВОК-ПРЕСС» в отношении обработки персональных данных