|
Вопросы о программировании Вопросы, касающиеся программирования на FBD |
|
Опции темы | Поиск в этой теме |
15.03.2015, 02:20 | #1 |
Новичок
Регистрация: Apr 2007
Сообщения: 4
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
64-разрядное число
Добрый день.
По ModBus от внешнего устройства на контроллер приходит информация в виде 64-разрядного целого числа. Размер 4 байта. Тип: Int64. Необходимо это число вывести на дисплей контроллера. Возможна ли в лоджике реализация такого процесса? |
15.03.2015, 07:32 | #2 | |
Senior Member
Регистрация: Dec 2011
Сообщения: 756
Благодарил(а): 1 раз(а)
Поблагодарили:
11 раз(а) в 11 сообщениях
|
Ответ: 64-разрядное число
Цитата:
__________________ Нет абсолютно бездарных людей. Каждый бездарен в своей области. Последний раз редактировалось tvf, 15.03.2015 в 07:48 |
|
15.03.2015, 10:48 | #3 |
НЕ сотрудник Segnetics
Регистрация: Feb 2006
Сообщения: 540
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: 64-разрядное число
Што-што?
__________________ BANNED |
15.03.2015, 11:54 | #4 | |
Senior Member
Регистрация: Dec 2011
Сообщения: 756
Благодарил(а): 1 раз(а)
Поблагодарили:
11 раз(а) в 11 сообщениях
|
Ответ: 64-разрядное число
Цитата:
Что до сути вопроса. Более внимательное осмысливание вопроса привело к следующему алгоритму: 1. 64-битное число выводится на экран как несколько 16-битных чисел. 2. Каждое 16-битное число имеет диапазон от 0 до 9999 - 4 десятичных разряда 3. Средствами двоичной арифметики 64-битное число делится на 10000. 4. Остаток от деления записывается в младшее число. 5. Частное опять делится на 1000. Остаток записывается в следующее число и так далее. Во вложении пример такого алгоритма. Для простоты ограничился 16-битным числом и размерностью 3 десятичных разряда. Работает только для положительных чисел. Отрицательные требуют изменения формата записи к прямому виду. __________________ Нет абсолютно бездарных людей. Каждый бездарен в своей области. |
|
15.03.2015, 12:05 | #5 |
Senior Member
Регистрация: Apr 2012
Сообщения: 111
Благодарил(а): 2 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: 64-разрядное число
Просто ради интереса, скажите, количество ЧЕГО описывается 64-битным числом?
|
15.03.2015, 17:03 | #6 |
Senior Member
Регистрация: Jan 2012
Адрес: Саратов
Сообщения: 179
Благодарил(а): 1 раз(а)
Поблагодарили:
3 раз(а) в 3 сообщениях
|
Ответ: 64-разрядное число
Всё-таки какое число? 64 разряда - это 8 байт. А 4 байта - это 32 разряда.
|
15.03.2015, 21:46 | #7 |
Senior Member
Регистрация: Mar 2008
Адрес: Екатеринбург
Сообщения: 493
Благодарил(а): 50 раз(а)
Поблагодарили:
14 раз(а) в 13 сообщениях
|
Ответ: 64-разрядное число
Интересно еще что за модбас устройство изрыгает 64 разряда?
|
15.03.2015, 22:59 | #8 |
Новичок
Регистрация: Apr 2007
Сообщения: 4
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: 64-разрядное число
Это устройство: электросчетчик SE iEM3155.
В нем все данные, как то:напряжение, ток, частота передаются в нормальном для контроллера виде float32 с размером данных в int16=2. И только значение полной энергии выдается в int64 c размером =4. Мне посоветовали разбить данное число на четыре 16 битных числа. Но в конечном результате у меня никак не получилось совпадения показаний на экране счетчика и экране контроллера. Время обновления информации на дисплее контроллера принципиального значения не имеет. Хоть один раз в несколько минут. Контроллер используемый для этих целей: SMH2gi. Последний раз редактировалось smakoveev, 15.03.2015 в 23:15 |
16.03.2015, 06:30 | #9 | |
Senior Member
Регистрация: Dec 2011
Сообщения: 756
Благодарил(а): 1 раз(а)
Поблагодарили:
11 раз(а) в 11 сообщениях
|
Ответ: 64-разрядное число
Цитата:
__________________ Нет абсолютно бездарных людей. Каждый бездарен в своей области. |
|
16.03.2015, 12:42 | #10 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 131
Благодарил(а): 15 раз(а)
Поблагодарили:
663 раз(а) в 606 сообщениях
|
Ответ: 64-разрядное число
Цитата:
Ну например: 1) Приходит абракадабра в виде четырёх int16 2) Шмемами отправляем эту абраобразную кадабру в С++ 3) Там двоично сшиваем кадабру в нормальный int64 4) Максимальное значение беззнакового int64: 18446744073709551615, т.е. 20 разрядов. Организуем цикл 0..19, в котором делением на 10 откусываем по одному младшему разряду и отправляем этот разряд в свой шмем. Всего 20 шмемов в формате int16 5) На экран эти шмемы выводим в линеечку, получив исходное int64 в десятичном виде 2Gi это переварит в реальном времени даже не поперхнувшись. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
16.03.2015, 13:23 | #11 |
Новичок
Регистрация: Apr 2007
Сообщения: 4
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: 64-разрядное число
попробуйте все 4 int16 отправить в часть программы, написанную на С++.
Арсений, конечно большое спасибо за совет, но к своему стыду я только знаю что есть такой язык программирования как С++ и все... По большому счету мне совершенно не нужен результат с 20-разрядным числом. Я на пенсию уже уйду, а счетчик до этого результата не досчитает. Получиться считать первую десятку и то за глаза. |
16.03.2015, 13:39 | #12 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 131
Благодарил(а): 15 раз(а)
Поблагодарили:
663 раз(а) в 606 сообщениях
|
Ответ: 64-разрядное число
Цитата:
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
16.03.2015, 13:53 | #13 | |
Senior Member
Регистрация: Dec 2011
Сообщения: 756
Благодарил(а): 1 раз(а)
Поблагодарили:
11 раз(а) в 11 сообщениях
|
Ответ: 64-разрядное число
Цитата:
Ну и еще 1 нюанс. В счетчике беззнаковое число. В контроллере - знаковое число. Так что старший разряд надо принудительно выставить в 0. __________________ Нет абсолютно бездарных людей. Каждый бездарен в своей области. |
|
16.03.2015, 15:37 | #14 | |
Senior Member
Регистрация: Aug 2013
Сообщения: 3 785
Благодарил(а): 12 раз(а)
Поблагодарили:
194 раз(а) в 190 сообщениях
|
Ответ: 64-разрядное число
Цитата:
Общий вариант упаковки беззнакового INT64 в Real (float32) получится примерно так. int64-real.msl Но на больших числах будем перевирать младшие разряды... И для этой задачи можно поделить все получаемые long перед переводом в real на 100 и окончательный результат поделить на 10 чтобы получить результат в kWh. Кстати и число исходных обрабатываемых разрядов можно уменьшить до 37 исходя из максимума прибора 99999999999 Wh. Пересобрать можно по аналогии и из трех младших int16 Последний раз редактировалось ATS, 16.03.2015 в 15:51 |
|
16.03.2015, 16:13 | #15 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 131
Благодарил(а): 15 раз(а)
Поблагодарили:
663 раз(а) в 606 сообщениях
|
Ответ: 64-разрядное число
Да, блин. Промахнулся со знаками. Забыл совсем о них.
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
16.03.2015, 18:18 | #16 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 131
Благодарил(а): 15 раз(а)
Поблагодарили:
663 раз(а) в 606 сообщениях
|
Ответ: 64-разрядное число
Вот это нативный способ.
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. Последний раз редактировалось Arsie, 17.03.2015 в 12:12 |
16.03.2015, 20:35 | #17 |
Senior Member
Регистрация: Apr 2012
Сообщения: 111
Благодарил(а): 2 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: 64-разрядное число
|
16.03.2015, 22:28 | #18 |
Senior Member
Регистрация: Aug 2013
Сообщения: 3 785
Благодарил(а): 12 раз(а)
Поблагодарили:
194 раз(а) в 190 сообщениях
|
Ответ: 64-разрядное число
|
16.03.2015, 23:29 | #19 |
Senior Member
Регистрация: Aug 2013
Сообщения: 3 785
Благодарил(а): 12 раз(а)
Поблагодарили:
194 раз(а) в 190 сообщениях
|
Ответ: 64-разрядное число
|
17.03.2015, 07:57 | #20 | |
Senior Member
Регистрация: Dec 2011
Сообщения: 756
Благодарил(а): 1 раз(а)
Поблагодарили:
11 раз(а) в 11 сообщениях
|
Ответ: 64-разрядное число
Цитата:
__________________ Нет абсолютно бездарных людей. Каждый бездарен в своей области. Последний раз редактировалось Arsie, 17.03.2015 в 12:12 |
|
17.03.2015, 09:22 | #21 |
Senior Member
Регистрация: Aug 2013
Сообщения: 3 785
Благодарил(а): 12 раз(а)
Поблагодарили:
194 раз(а) в 190 сообщениях
|
Ответ: 64-разрядное число
Последний раз редактировалось Arsie, 17.03.2015 в 12:13 |
17.03.2015, 13:56 | #22 |
Senior Member
Регистрация: Aug 2013
Сообщения: 3 785
Благодарил(а): 12 раз(а)
Поблагодарили:
194 раз(а) в 190 сообщениях
|
Ответ: 64-разрядное число
Как ни странно тоже потребовалось с прибора (теплосчетчик МКТС) итоги в виде FLOAT64 получить.
Получилось примерно так float64-real.msl Естественно с понижением... |