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


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

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

АВОК в соц. сетях
ИНН: 7714824045 | erid: 2VtzqwzKQiU
 
Добавить ответ в эту темуОткрыть тему
> 64-битные числа в Carel Pco, Сложности с приемом данных от тепловодосчетчика
rainproof
сообщение 25.3.2016, 15:16
Сообщение #1





Группа: Участники форума
Сообщений: 98
Регистрация: 20.8.2008
Из: г.Николаев
Пользователь №: 21661



Доброго всем времени суток!

Суть вопроса:

Не могу придумать алгоритм преобразования 64-битного числа (последовательность из 8-ми байт) - в число с плавающей точкой.
Проблема в том, что на микропроцессорный промышленный контроллер (Carel PCO5) принимаются 8 байт данных от другого устройства по сети Modbus (каждый байт - передается как независимое число со своим индивидуальным "адресом"). Мне нужно эту последовательность байт - преобразовать в число с плавающей точкой, или просто в последовательность чисел "десятичных разрядов" для представления на экране, возможно даже с очень грубым округлением.
Ситуация усложняется тем, что передающее устройство (тепловодосчетчик) - поддерживает 64-битные числа аппаратно, а принимающее (Carel PCO5) - только 32-битные.

Основной вопрос, как реализовать такой алгоритм чисто с математической точки зрения:

- принять эту последовательность байтов как массив данных

- привести эти данные к числу с плавающей точкой, с наибольшей для 32-разрядной системы точностью.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Ashihara
сообщение 25.3.2016, 15:27
Сообщение #2


Двойных полосок злой фанат!


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



Чисто математически рассчитать мантиссу и порядок. Вики в зубы и за калькулятор wink.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
ktulu
сообщение 25.3.2016, 22:02
Сообщение #3





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



"на микропроцессорный промышленный контроллер (Carel PCO5) принимаются 8 байт данных от другого устройства по сети Modbus (каждый байт - передается как независимое число со своим индивидуальным "адресом")"

..в ModBus нет понятия BYTE, есть только WORD_16 с этого начнем

"(Carel PCO5) принимаются 8 байт данных"
..CAREL мастер?, он запрашивает или как?

"Мне нужно эту последовательность байт"
..где вы видите последовательность байт?, если что я с CAREL не очень знаком, может там и так, но..

"что передающее устройство (тепловодосчетчик) - поддерживает 64-битные числа аппаратно"
..он может поддерживать хоть 256-битные "аппаратно", вопрос какой формат числа с точкой он использует? и как этот формат проецируется на ModBus пространство?
..без ответов на эти вопросы дальше что-то сказать сложно
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
ktulu
сообщение 25.3.2016, 22:19
Сообщение #4





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



..я так понимаю вот с этим надо разбираться

https://en.wikipedia.org/wiki/Double-precis...ng-point_format
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
rainproof
сообщение 25.3.2016, 22:29
Сообщение #5





Группа: Участники форума
Сообщений: 98
Регистрация: 20.8.2008
Из: г.Николаев
Пользователь №: 21661



Ответы на вопросы:
1. Контроллер Carel - мастер
2. 64-битное число с тепловодосчетчика принимается в виде 4-х переменных типа integer
Каждая из этих переменных - word (16 bit).
Под "последовательностью" - подразумеваю эти 4-ре word, которые по отдельности я принимаю на контроллер, и могу отобразить на экране, по отдельности.
Задача, которую не получается решить, следующая,
как обработать эти 4 переменных , чтобы "на выходе" получить переменные типа integer в таком виде:
int_0 = 1 * 10^0 (с диапазоном 0 - 999)
int_1 = 1 * 10^3 (с диапазоном 0 - 999)
int_2 = 1 * 10^6 (с диапазоном 0 - 999)
int_3 = 1 * 10^9 (с диапазоном 0 - 999)
чтобы можно было их расположить на экране для отображения 64-битного числа.
Вся сложность в том, что среда разработки 1Tool - не поддерживает 64-битные числа. только 32-бит.

Сообщение отредактировал rainproof - 25.3.2016, 22:34
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
LordN
сообщение 26.3.2016, 8:07
Сообщение #6


МОДЕРАТОР


Группа: Модераторы
Сообщений: 10887
Регистрация: 3.7.2004
Пользователь №: 32



вам надо не распологать их на экране, а выполнить преобразование 64 -> 32, и уже потом выводить
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
svintus
сообщение 27.3.2016, 10:44
Сообщение #7





Группа: Участники форума
Сообщений: 385
Регистрация: 29.1.2010
Из: Днiпро
Пользователь №: 45399



В 1Tool оперировать с 32-bit можно только в ST code, для вывода на экран потом все равно придется переводить в INT. Правильнее , наверное, будет упростить постановку задачи - из набора 4-х INT получить осмысленную комбинацию на выходе в виде другого набора INT. А использовать для этого ST или FBD, тут уж как удобнее.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
LordN
сообщение 29.3.2016, 9:59
Сообщение #8


МОДЕРАТОР


Группа: Модераторы
Сообщений: 10887
Регистрация: 3.7.2004
Пользователь №: 32



https://ru.wikipedia.org/wiki/%D0%A7%D0%B8%...%81%D1%82%D0%B8

судя по всему вам нужна эта формула

собрать по словам полученные восемь байт, разобрать на знак, порядок и мантиссу и собрать заново флоат 32

осталось понять каким байтом вперед выдвигается х64 и вперед.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
=AS=
сообщение 29.3.2016, 11:17
Сообщение #9





Группа: New
Сообщений: 11
Регистрация: 7.2.2011
Из: Минск
Пользователь №: 93063



http://www.h-schmidt.net/FloatConverter/IEEE754.html
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

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

 

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



ООО "Русич" ИНН 9721068883 / ЕРИД 2Vtzqx9HerZ


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

ООО "АйДи-Электро" ИНН:6670013662 erid:2Vtzqwtpv5j

Последние сообщения Форума






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