|
Вопросы о программировании Вопросы, касающиеся программирования на FBD |
|
Опции темы | Поиск в этой теме |
25.01.2018, 22:34 | #1 |
Новичок
Регистрация: Dec 2016
Адрес: СПб
Сообщения: 6
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Int48. Преобразование в real
Столкнулся с проблемой.
Нужно считывать Int48 по Modbus и выводить на экран. Прибор - эл.счетчик Elster Метроника A1800. По мануалу максимальное хранимое значение - 99 999 999 999 В таком формате он хранит потребленную энергию Ватты, ВАРы, ВА с точностью до сотых. Если пожертвовать точностью и выводить значения в формате Кило (Ватты, ВАРы, ВА), разделив на 100000 - то real'a должно хватить на максимальное значение в 999999,9 кВт Написал макрос преобразования Int48 в real, может кому пригодится: Conv Int48.msl Макрос преобразования Int48 в real.pngМакрос преобразования Int48 в real общий вид.png Вот только вопрос. Какое максимальное значение мантиссы для real? Думал, что 2^24 = 16777216, но SMLogix показывал и большие числа, например 10952167. Где я неправ? Макрос преобразования Int48 в real общий вид2.png |
26.01.2018, 11:03 | #2 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Int48. Преобразование в real
Цитата:
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
29.01.2018, 19:17 | #3 |
Новичок
Регистрация: Dec 2016
Адрес: СПб
Сообщения: 6
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Int48. Преобразование в real
В макросе я раскладываю на два long, но это совсем другие числа, если их вывести будет "абракадабра" - это видно на скрине
|
29.01.2018, 19:55 | #4 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Int48. Преобразование в real
Цитата:
Вот пример вывода на экран числа от 0 до 9 223 372 036 854 775 807, закодированного в двух лонгах. Так и в вашем случае. выделить целую часть кВт в один лонг, а дробную - во второй. И выводить. Можно даже МВт выводить, разложив в float64 на две части. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
05.02.2018, 21:22 | #5 |
Новичок
Регистрация: Dec 2016
Адрес: СПб
Сообщения: 6
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Int48. Преобразование в real
выделил Int48 в 2 long, Можно вывести числа вплоть до 2^47, но количество преобразований достаточно велико - в основном из-за контроля переполнения long при умножении на 65536.
Может есть более рациональные решения по выделению целой и дробной части? Conv Int48 в 2Long.msl |
06.02.2018, 10:19 | #6 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Int48. Преобразование в real
Цитата:
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|