Segnetics

Вернуться   Segnetics > Форум Segnetics > Вопросы о программировании

Вопросы о программировании Вопросы, касающиеся программирования на FBD

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.01.2018, 22:34   #1
SSG
Новичок
 
Регистрация: Dec 2016
Адрес: СПб
Сообщения: 6
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Post Int48. Преобразование в real

Столкнулся с проблемой.
Нужно считывать Int48 по Modbus и выводить на экран.
Прибор - эл.счетчик Elster Метроника A1800.
По мануалу максимальное хранимое значение - 99 999 999 999
В таком формате он хранит потребленную энергию Ватты, ВАРы, ВА с точностью до сотых.
Если пожертвовать точностью и выводить значения в формате Кило (Ватты, ВАРы, ВА), разделив на 100000 - то real'a должно хватить на максимальное значение в 999999,9 кВт
Написал макрос преобразования Int48 в real, может кому пригодится:
Conv Int48.msl
Нажмите на картинку для увеличения

Название:  Макрос преобразования Int48 в real.png
Просмотров: 86
Размер:  85.5 КбайтНажмите на картинку для увеличения

Название:  Макрос преобразования Int48 в real общий вид.png
Просмотров: 52
Размер:  121.7 Кбайт
Вот только вопрос. Какое максимальное значение мантиссы для real? Думал, что 2^24 = 16777216, но SMLogix показывал и большие числа, например 10952167. Где я неправ?
Нажмите на картинку для увеличения

Название:  Макрос преобразования Int48 в real общий вид2.png
Просмотров: 49
Размер:  122.4 Кбайт
SSG вне форума   Ответить с цитированием
Старый 26.01.2018, 11:03   #2
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 019
Благодарил(а): 15 раз(а)
Поблагодарили: 655 раз(а) в 599 сообщениях
По умолчанию Ответ: Int48. Преобразование в real

Цитата
Сообщение от SSG Посмотреть сообщение
Столкнулся с проблемой.
Нужно считывать Int48 по Modbus и выводить на экран.
Прибор - эл.счетчик Elster Метроника A1800.
По мануалу максимальное хранимое значение - 99 999 999 999
В таком формате он хранит потребленную энергию Ватты, ВАРы, ВА с точностью до сотых.
Если пожертвовать точностью и выводить значения в формате Кило (Ватты, ВАРы, ВА), разделив на 100000 - то real'a должно хватить на максимальное значение в 999999,9 кВт
А зачем вы вообще переводите в real? Ведь можно выводить на экран и в исходном формате. Разложить на два long или long+int (в лонге целая часть, в инте дробная) и вывести их на экран, разделив точкой.


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 29.01.2018, 19:17   #3
SSG
Новичок
 
Регистрация: Dec 2016
Адрес: СПб
Сообщения: 6
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Int48. Преобразование в real

Цитата:
Сообщение от Arsie Посмотреть сообщение
А зачем вы вообще переводите в real? Ведь можно выводить на экран и в исходном формате. Разложить на два long или long+int (в лонге целая часть, в инте дробная) и вывести их на экран, разделив точкой.
В макросе я раскладываю на два long, но это совсем другие числа, если их вывести будет "абракадабра" - это видно на скрине
SSG вне форума   Ответить с цитированием
Старый 29.01.2018, 19:55   #4
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 019
Благодарил(а): 15 раз(а)
Поблагодарили: 655 раз(а) в 599 сообщениях
По умолчанию Ответ: Int48. Преобразование в real

Цитата
Сообщение от SSG Посмотреть сообщение
В макросе я раскладываю на два long, но это совсем другие числа, если их вывести будет "абракадабра" - это видно на скрине
Я не об этих лонгах.

Вот пример вывода на экран числа от 0 до 9 223 372 036 854 775 807, закодированного в двух лонгах.

Так и в вашем случае. выделить целую часть кВт в один лонг, а дробную - во второй. И выводить.

Можно даже МВт выводить, разложив в float64 на две части.
Вложения
Тип файла: msl q.msl (7.2 Кбайт, 50 просмотров)


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 05.02.2018, 21:22   #5
SSG
Новичок
 
Регистрация: Dec 2016
Адрес: СПб
Сообщения: 6
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Int48. Преобразование в real

Цитата:
Сообщение от Arsie Посмотреть сообщение
выделить целую часть кВт в один лонг, а дробную - во второй. И выводить
выделил Int48 в 2 long, Можно вывести числа вплоть до 2^47, но количество преобразований достаточно велико - в основном из-за контроля переполнения long при умножении на 65536.
Может есть более рациональные решения по выделению целой и дробной части?
Conv Int48 в 2Long.msl
SSG вне форума   Ответить с цитированием
Старый 06.02.2018, 10:19   #6
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 019
Благодарил(а): 15 раз(а)
Поблагодарили: 655 раз(а) в 599 сообщениях
По умолчанию Ответ: Int48. Преобразование в real

Цитата
Сообщение от SSG Посмотреть сообщение
выделил Int48 в 2 long, Можно вывести числа вплоть до 2^47, но количество преобразований достаточно велико - в основном из-за контроля переполнения long при умножении на 65536.
Может есть более рациональные решения по выделению целой и дробной части?
Вложение 4851
Может быть и есть более рациональные решения, но это думать надо)) Я пока не могу себе эту роскошь позволить.


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать свои сообщения

BB code is Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Форматирование числа real andre SMArt 9 18.09.2023 06:24
Некорректное отображение real вида X.XXXe-YYY на экране настроек SSG Вопросы о SMH-2G(i) 6 06.12.2017 11:37
Получение нестандартного REAL по MODBUS Arsie Примеры работы по Modbus 3 01.02.2015 12:53
Точность вычислений real WhiteM SMLogix 2 03.07.2013 16:18
ГАММА-8 чтение REAL с обратным порядком байт... Dron Связь с внешним миром 3 17.02.2010 15:58


Часовой пояс GMT +4, время: 15:13.


Версия vBulletin: 3.8.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Segnetics 2005 - 2023