Весь и вопрос в том, что часть работает и читается (16 и 32 разрядные), а часть проблема с чтением (64 разрядные) с 0х2200 по 0х2203,
не считая остального, умножение, сложение 20 разрядных чисел и деление 20 разрядного на 10^5, а потом и вывод на экран,
которое возможно решить, как оказалось.
Последний раз редактировалось kondor3000; 12.03.2024 в 21:35.
Дополнил сложением длинных чисел.
Искренне сомневаюсь в необходимости умножения длинных чисел - физический смысл величины [куб.м*куб.м] не понятен.
Довольно просто сделать вычитание длинных чисел, умножение длинного на короткое, деление длинного на короткое, чуть сложнее сделать умножение длинных чисел. Деление длинных чисел - сложновато, но возможно.
Всё требует времени - и отладка длинных вычислений. Мне не хочется реализовывать ради реализации.
Думаю, что лучшим вариантом будет, если Nsft сможет принять эти 4 регистра и пояснит, какие вычисления требуются. И попробует их реализовать. Если не сможет - завтра вечером после работы попробую.
Идея вычислений - имеем массив, в котором каждый элемент использует половину разрядов. При операциях проверяется старшая половина и, если она не нулевая, то делается перенос в следующий элемент. Все операции (сложение, вычитание, умножение, деление) выполняются по алгоритму "на бумаге в столбик". Единственно, при делении приходится следить, чтобы перенос не вызвал переполнения разрядной сетки (так не получилось сразу делить на 10^5).
Еще раз, что надо посчитать, вот скрин 1 Счётчик WB-MAP3E.png
0x2200
младшая часть — значение оставляем «как есть» : 0хb4df hex = 46303 dec (может быть до 65535)
0x2201
значение умножаем на 2^16 : 0x0dff hex = 3583 dec, 3583 * 65536 = 234815488 (может быть до 4294901760)
0x2202
значение умножаем на 2^32 : 0 * 4294967296 = 0 (сейчас 0, а будет число до 5 знаков, например 65535 * 4294967296=281470681743360 )
0x2203
значение умножаем на 2^48 : 0 * 281474976710656 = 0 (сейчас 0, а будет число до 5 знаков, например 65535 * 281474976710656=18446462598732840960 )
Суммируем результаты : 46303 + 234815488 + 0 + 0 = 234861791. Сумму умножаем на 0.00001 (переносим запятую на 5 знаков влево).
В итоге получаем 2348.61791 КВт /час
65535+4294901760+281470681743360+18446462598732840 960=18446744073709551615 - максимально возможное 20-значное число
умноженное на 0.00001=184467440737095.51615
Последний раз редактировалось kondor3000; 17.03.2024 в 16:53.
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Последний раз редактировалось kondor3000; 13.03.2024 в 09:03.
Добрый день.
Подскажите, макросы работают в общем цикле (как вызов Fb в обычном ПЛК) или как-то отдельно?