Дважды уже написал
10 знаков до и 6 -7 после запятой 1 Вывод 2 переменных.jpg
Последний раз редактировалось kondor3000; 23.11.2025 в 17:19.
Если задача только выводить на дисплей ПР205, то можно вывести целое, затем ".", затем float умножить на 1_000_000, преобразовать в целое и вывести с лидирующими нолями.
Обычный флоат, максимум 7-8 знаков или до или после запятой, для большего кол-ва знаков нужен LFloat ( 4 регистра), чего в ПР и в ПЛК110 нет.
больше 8 знаков будут нулями (что в расходе не допустимо)
Поэтому и делают целым до запятой и Float после запятой, итого 17 знаков.
Здесь пытались вывести DOUBLE ( LFloat ) как REAL (Float ) , получилось всего 8 знаков.
https://owen.ru/forum/showthread.php...l=1#post472259
Последний раз редактировалось kondor3000; 23.11.2025 в 18:44.
Как понимаю, этот "объём прямого направления потока" - не текущее значение расхода, а накопленное с момента включения прибора в работу.
Для такого параметра, скорее всего, применение - или оплата израсходованного ресурса по тарифу, или какая-то статистика в конце смены. Т.е. реально используется разность с предыдущим зафиксированным значением. Тогда можно и после всех вычитаний и учёта заёма из "целых" при вычитании "дробных" - приводить результат к единому float, т.к. разность будет уже не столь значительна по числу точных знаков.
Смотрите, что получается Расход в целых 123456789- 123456784= 5 кубов 1 Разница в кубах.jpg
Расход с плав. точкой, ввожу 123456789 округляется до 123456790
ввожу 123456784 округляется до 123456780,
123456790-123456780= 10 кубов, а показывает 8.
Офигенно считает, 5 по факту, насчитал 8, а должно быть 10.
Это 9 знаков.
При 10 знаках, разницы уже нет совсем, расход 0 1 10 знаков.jpg в целых те же 5 кубов
И это всего 10 знаков, что будет если знаков 15, +/- 1000 кубов влёт
Последний раз редактировалось kondor3000; 23.11.2025 в 20:57.
IVM куда вам дальше? Поступите так же, как во взлете, даже 1 регистр можете сэкономить, представив дробную часть целым числом.
Мне показалось, что целая часть объёма меняется в полном 31-разрядном диапазоне 0...2*10^9.
А дробная - в диапазоне от 0.000000000 до 0.9999999999.
Поэтому пример будет несколько иным:
- предыдущее 999999123 и 0,123
- текущее 999999234 и 0,023
= разность 999999234-999999123=111 и 0,023-0,123=-0,100
выполняем заём из разряда целых 111-1=110 и прибавляем этот заём к дробным -0,100+1,000=+0,900
итого 110 и 0,900 т.е. 110,900 - такое число почти без погрешности поместится в float с его 24 битами мантиссы (2^24=16777215 - 7-8 точных цифр).