УкраїнськаEnglishmRussian
Вход/Новый
В теме нет новых постов

Как преобразовать число?


Автор Сообщение
Сообщение создано: 19. 04. 2013 [12:54]
dell
Путин Краб
Создатель темы
Зарегистрирован(а) с: 09.04.2013
Сообщения: 28
Получаем данные по Modbus. Данные приходят в формате числа с плавающей запятой, 4 байта. Но при чтении с регистров, RI получаем на выходе неверные данные. Приходящие данные отслеживаем в отчетах. Например пришло число 16-ричное 43 1F D1 50, что соответствует 159,8 . Однако при выводе его без обработки элементом anShow (или же посмотрев значение атрибута параметра )число 17183. Как его преобразовать в 159,8? Можно это конечно сделать в обработке: разбить на биты, посчитать, но опять же как 17183 превратить в 16-ричное?
Пробовали с суффиксами, все равно не те данные.
Сообщение создано: 19. 04. 2013 [13:25]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"dell" wrote:

Данные приходят в формате числа с плавающей запятой, 4 байта. Но при чтении с регистров, RI получаем на выходе неверные данные. Приходящие данные отслеживаем в отчетах. Например пришло число 16-ричное 43 1F D1 50, что соответствует 159,8 .

Да, это стандартный формат IEEE. С суффиксом "_f" должно работать.

"dell" wrote:

Однако при выводе его без обработки элементом anShow (или же посмотрев значение атрибута параметра )число 17183. Как его преобразовать в 159,8? Можно это конечно сделать в обработке: разбить на биты, посчитать, но опять же как 17183 превратить в 16-ричное?

Из скрипта можно собрать функцией floatMergeWord(). У меня она для "43 1F D1 50" корректно работает.

"dell" wrote:

Пробовали с суффиксами, все равно не те данные.

Пробуйте ещё суффикс "_f" — должно работать. Например, порядок регистров поменяйте.

Learn, learn and learn better than work, work and work.
Сообщение создано: 22. 04. 2013 [06:42]
dell
Путин Краб
Создатель темы
Зарегистрирован(а) с: 09.04.2013
Сообщения: 28
Не работает. Вот взгляните, может где-то тут ошибка.
Запрос и ответ:
http://s017.radikal.ru/i437/1304/32/77acdabcd199t.jpg

Ответ пришел "41 0e b6 70", что соответствует числу 8.9195, и является правильным, т.к. манометр показывает это число.

Запрос атрибута параметра:
http://s019.radikal.ru/i603/1304/ba/431be5edcfa5t.jpg

Значение параметра:
http://s41.radikal.ru/i092/1304/cd/08e3f67e953ft.jpg

Другое значение.
Сообщение создано: 22. 04. 2013 [06:58]
almaz
Almaz Karimov
Contributor
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
RI_f:1,0:r:press:press не пробовали? Ещё может быть R_f:1,0:r:press:press и R_f:0,1:r:press:press попробовать.

[Сообщение редактировалось 1 раз(а), в последний раз 22.04.2013 в 06:58.]

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Сообщение создано: 22. 04. 2013 [07:33]
dell
Путин Краб
Создатель темы
Зарегистрирован(а) с: 09.04.2013
Сообщения: 28
Спасибо! Получилось при RI_f:1,0:r:press:press.



3110