Профиль должен быть заполнен на русском языке кириллицей. Заполнение профиля заведомо ложными или некорректными данными - причина возможного отказа в регистрации на форуме.

Числа формата Float.

Обсуждение вопросов, не относящихся ни к одному из других подразделов

Автор темы
ASUTP_PLC
частый гость
частый гость
Сообщения: 430
Зарегистрирован: 11 ноя 2012, 17:21
Ф.И.О.: Нурисламов Руслан Мисхатович
Благодарил (а): 2 раза
Поблагодарили: 7 раз

Числа формата Float.

Сообщение ASUTP_PLC » 09 фев 2015, 14:54

Всем добрый день.

Есть контроллер на который была возложена функция считать сумматор.
Имеем входной сигнал в формате вещественного числа, допустим качественно он варьируется от 50 до 200. /это положим кубометры в час/

Контроллер каждую секунду берет это число, делит на 3600 /считаем такое количество у нас секунд в часе/.
И кидаем эту часть вещественного числа в другую ячейку, которую иногда сбрасываем на ноль (как обычный ресет сумматора).

И интересная вещь начинается, когда такой процесс протекает не один день, а несколько месяцев подряд.

Получается секундная часть от расхода 50, это число порядка 0,013(8) или говоря проще - 1,3(8) *10^ -2.
К примеру счетчик досчитал до 300000 кубов, а далее эту маленькую песчинку кидаем в кучу (которая треть о миллиона).

В формате вещественного числа имеем обычную ситуацию, в этой куче песчинку мы не видим. Счетчик начнет безбожно врать. И чем больше накоплено, тем больше вранья.

ПЛК обычный и 32 битами вещественного числа мы имеем ограничение разрядов. /типичное значение, два регистра по 16 бит ПЛК/.

Вопрос1: как избежать потери точности, особенно если мы не имеем права сумматор ресетить до поры до времени. (а это может быть и годовой интервал).
Вопрос2: нет ли здесь математиков, дабы просто поделились соображениями как производить оценку точности расчетов, и сколько мы можем просто слить на округления.

Вопросы как я понимаю больше риторические. Если бы были расчеты математических моделей, то конечно есть варианты, взять разрядность побольше и рассчитать
с более длинной сеткой числа. Реально помогает и повышает точность.
А как быть на простом контроллере?


VaBo
осмотрелся
осмотрелся
Сообщения: 191
Зарегистрирован: 21 июл 2013, 18:32
Ф.И.О.: Вадим
Благодарил (а): 6 раз
Поблагодарили: 2 раза

Re: Числа формата Float.

Сообщение VaBo » 09 фев 2015, 15:22

Вы можете для сумматора создать искусственный целочисленный регистр с любой разрядностью, положим 64 бита. И складывайте на здоровье туда каждую секунду свои значения, не деля их при этом ни на что, когда нужно будет считать сумматор - тогда и разделите. Реализуется на самом простом контроллере, точность не теряется вообще.


Автор темы
ASUTP_PLC
частый гость
частый гость
Сообщения: 430
Зарегистрирован: 11 ноя 2012, 17:21
Ф.И.О.: Нурисламов Руслан Мисхатович
Благодарил (а): 2 раза
Поблагодарили: 7 раз

Re: Числа формата Float.

Сообщение ASUTP_PLC » 09 фев 2015, 15:50

Примерно так и думал сделать. Мне наоборот сказали сделать так чтоб все не доходило до годовых значений. Так даже проще...


Alexander
БАН
БАН
Сообщения: 642
Зарегистрирован: 03 июн 2010, 11:26
Ф.И.О.: Козин Александр Елисеевич
Благодарил (а): 2 раза
Поблагодарили: 5 раз
Забанен: Бессрочно

Re: Числа формата Float.

Сообщение Alexander » 09 фев 2015, 15:56

А чего вы собственно ожидали? Максимальная точность обычного числа формата float - 6.5 разрядов, если у вас уже это значение достигнуто - прибавляйте сколь угодно - результата не будет. Здесь нужени или формат double, или, как вам правильно подсказывают выше - переводите в целочисленный формат с любой точностью, и суммируйте на здоровье. Еще лучше - анализировать превышение числом float определенного порога, например 1, или 10, и по результатам сравнения использовать уже целочисленный счетчик с 16 (если устороит), или 32 разрядами.


Автор темы
ASUTP_PLC
частый гость
частый гость
Сообщения: 430
Зарегистрирован: 11 ноя 2012, 17:21
Ф.И.О.: Нурисламов Руслан Мисхатович
Благодарил (а): 2 раза
Поблагодарили: 7 раз

Re: Числа формата Float.

Сообщение ASUTP_PLC » 10 фев 2015, 07:55

Я могу сделать как угодно. Наоборот я пытаюсь порядок привнести в систему. Написать просто это один вариант (уже и так было до меня), а написать правильно - сами понимаете, надо немного все подкорректировать. Народ хочет чтоб все просто примитивно и чтоб работало. А это так как оно работает и сейчас. По сути это моя инициатива сделать все как надо.
Время конечно же тоже мое. Просто считают поверхностно, не вдаваясь в детали. Обратная связь хромает. Пока что я чувствую что это как бы и надо и не надо...
Количество контроллеров больше 50 штук, соответственно работа не пяти минут.


Михайло
почётный участник форума
почётный участник форума
Сообщения: 2225
Зарегистрирован: 10 ноя 2009, 04:58
Ф.И.О.: Толмачев Михаил Алексеевич
Благодарил (а): 1 раз
Поблагодарили: 23 раза
Контактная информация:

Re: Числа формата Float.

Сообщение Михайло » 10 фев 2015, 16:20

ASUTP_PLC писал(а):Вопрос1: как избежать потери точности, особенно если мы не имеем права сумматор ресетить до поры до времени. (а это может быть и годовой интервал).

Нужно перейти на целочисленный подсчет с разрядностью 32 или даже 64 бита.
Если этого недостаточно, то использовать комбинацию из двух и более регистров для получения 128, 256-битного регистра....

ASUTP_PLC писал(а):Вопрос2: нет ли здесь математиков, дабы просто поделились соображениями как производить оценку точности расчетов, и сколько мы можем просто слить на округления.

Если перейти на целочисленный подсчет, то потерь не будет. Главное чтобы разрядности хватало.


Автор темы
ASUTP_PLC
частый гость
частый гость
Сообщения: 430
Зарегистрирован: 11 ноя 2012, 17:21
Ф.И.О.: Нурисламов Руслан Мисхатович
Благодарил (а): 2 раза
Поблагодарили: 7 раз

Re: Числа формата Float.

Сообщение ASUTP_PLC » 10 фев 2015, 16:33

Я написал програмку, правда количество округлений уменьшил ровно в двадцать раз. Подсчет в реал формате. Деления веду в двадцать раз реже.
Сумматор работает также как и работал, формате real.
Запустил на контрольный прогон. Два сумматора считают одно и тоже, разными методами. Еще заставил контроллер считать разницу в отдельный регистр.
Уже есть осязаемая разница. Завтра количественно будет ясно. А разница есть.


Автор темы
ASUTP_PLC
частый гость
частый гость
Сообщения: 430
Зарегистрирован: 11 ноя 2012, 17:21
Ф.И.О.: Нурисламов Руслан Мисхатович
Благодарил (а): 2 раза
Поблагодарили: 7 раз

Re: Числа формата Float.

Сообщение ASUTP_PLC » 10 фев 2015, 16:35

По сути поменялся размер ошибки в абсолютном значении. Даже в 10 раз выше точность меня устроит. А где-то так навскидку и выходит.

Аватара пользователя

Barsik
освоился
освоился
Сообщения: 294
Зарегистрирован: 02 фев 2010, 22:28
Ф.И.О.: Корнеев Дмитрий
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Re: Числа формата Float.

Сообщение Barsik » 10 фев 2015, 17:10

Как я понял, задача ставится интегрировать мгновенные значения расхода и по ним вычислять объем? Если так, то это классический пример из серии "в акваланге, в гамаке и стоя".. Для этого обычно импульсный выход используется.
Запуск и модернизация оборудования без проекта и документации. Дорого.


Автор темы
ASUTP_PLC
частый гость
частый гость
Сообщения: 430
Зарегистрирован: 11 ноя 2012, 17:21
Ф.И.О.: Нурисламов Руслан Мисхатович
Благодарил (а): 2 раза
Поблагодарили: 7 раз

Re: Числа формата Float.

Сообщение ASUTP_PLC » 11 фев 2015, 07:29

Barsik писал(а):Как я понял, задача ставится интегрировать мгновенные значения расхода и по ним вычислять объем? Если так, то это классический пример из серии "в акваланге, в гамаке и стоя".. Для этого обычно импульсный выход используется.


На данном объекте был факт экономии абсолютно на всем. Классический пример приводящий к повторяющимся проблемам.
Запустить это одно, обеспечить надежное функционирование - немного другое.
Когда к общему количеству больше чем из 50 контроллеров дал заявку на еще пару (целью было разгрузить на связи критичные точки), мне показали просто дулю.
Был даже разговор с главным инженером предприятия. Так и так, говорю - будет система затыкаться. А каждый контроллер на своем месте. Лишних нет.
Решение - дополнить оборудованием/и суть моего решения/. Что самое интересное и денег не просил. Человек я пришлый, свою работу сделать должен и свободен.
Их социалку не напрягаю.

Все что говорил абсолютно никак не восприняли. И разговор в таком русле: я не могу контроллер для тебя дать. Я же говорю, что не мне контроллер нужен,
я его не домой к себе тащу. Он нужен ВАМ. Просто чтоб было все в порядке.

Когда так все на тормозах спускается, весь проект уже не проект, а так, большая шабашка. Со своего карамана оборудование ставить, - нет уж увольте...


Alexander
БАН
БАН
Сообщения: 642
Зарегистрирован: 03 июн 2010, 11:26
Ф.И.О.: Козин Александр Елисеевич
Благодарил (а): 2 раза
Поблагодарили: 5 раз
Забанен: Бессрочно

Re: Числа формата Float.

Сообщение Alexander » 11 фев 2015, 09:36

Странный вы товарищ, ASUTP_PLC Я же вам написал и причину, причем абсолютно точно, и что и как нужно сделать, чтобы с гарантией иметь нужный результат. Не у вас одного эта проблема с обработкой счетчиков в плавающем формате. Однако нет пророка в своем отечестве... Осталось только написать это за вас?


Михайло
почётный участник форума
почётный участник форума
Сообщения: 2225
Зарегистрирован: 10 ноя 2009, 04:58
Ф.И.О.: Толмачев Михаил Алексеевич
Благодарил (а): 1 раз
Поблагодарили: 23 раза
Контактная информация:

Re: Числа формата Float.

Сообщение Михайло » 11 фев 2015, 16:05

Ага, забудьте тип Real/Float при работе со счетчиками. Этот тип хранит очень большие и очень маленькие числа, но имеет погрешность при арифметических операциях.


Alexander
БАН
БАН
Сообщения: 642
Зарегистрирован: 03 июн 2010, 11:26
Ф.И.О.: Козин Александр Елисеевич
Благодарил (а): 2 раза
Поблагодарили: 5 раз
Забанен: Бессрочно

Re: Числа формата Float.

Сообщение Alexander » 11 фев 2015, 16:33

Да не имеет он никакой погрешности в пределах до 6.5 знаков (значащих цифр мантиссы). Если соблюдается это условие - никакой погрешности не будет. Отсюда и мои рекомендации. Если складывать числа в пределах до 10-Е6, например, и анализировать переход через 1, прибавляя ее к целочисленному счетчику с коррекцией суммы на -1, то гарантируется абсолютно точная работа.


Автор темы
ASUTP_PLC
частый гость
частый гость
Сообщения: 430
Зарегистрирован: 11 ноя 2012, 17:21
Ф.И.О.: Нурисламов Руслан Мисхатович
Благодарил (а): 2 раза
Поблагодарили: 7 раз

Re: Числа формата Float.

Сообщение ASUTP_PLC » 11 фев 2015, 19:36

Я поделился своими измышлениями. Пока изливал проблему, разобрался в ней сам. Решил ее тем способом который меня устроил.

Уж не для этого ли существует этот форум?
Что самое интересное, стоило чуть поглубже поразбираться, так сразу столько негатива... И такая позиция не только здесь.
До того просто тупой код от сих до сих был написан, ни у кого никаких сомнений и мыслей не приходило.
Выяснил особенности и сразу словил на себя негатив.
Да тот кому надо сам придет и возьмет свое. Нет надобности - не возьмет.


Михайло
почётный участник форума
почётный участник форума
Сообщения: 2225
Зарегистрирован: 10 ноя 2009, 04:58
Ф.И.О.: Толмачев Михаил Алексеевич
Благодарил (а): 1 раз
Поблагодарили: 23 раза
Контактная информация:

Re: Числа формата Float.

Сообщение Михайло » 12 фев 2015, 18:06

Alexander писал(а):Да не имеет он никакой погрешности в пределах до 6.5 знаков (значащих цифр мантиссы).

Даже если условие 6,5 знаков соблюсти, а потом прибавить очень маленькое число к очень большому, то происходит потеря маленького числа. Независимо от предусмотренного числа знаков после запятой. Важна разница между большим и маленьким числом при сложении, отношение складываемых чисел не должно превышать порядка миллиона.
Это уточнение к Вашим словам, вдруг непонятно.

Аватара пользователя

Barsik
освоился
освоился
Сообщения: 294
Зарегистрирован: 02 фев 2010, 22:28
Ф.И.О.: Корнеев Дмитрий
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Re: Числа формата Float.

Сообщение Barsik » 13 фев 2015, 14:50

так сразу столько негатива...


Если это про меня, то о отношении к вопросу вообще не думалось. Но видел, причем не у каких то там колхозников, в в проекте весьма известной швейцарской фирмы описанный тут метод измерения объема. Чем был немало поражен, потому что там использовались расходомеры Е+Н, импульсный выход которых никак не использовался. На вопрос типа "что за фигня?" мне было отвечено что "мы всегда так делаем", но расхождения с показаниями на дисплее расходомера и в SCADе составляли процентов 20, тогда было заявлено, что суммарный расход - это справочное значение, и точность там ненужна.
Запуск и модернизация оборудования без проекта и документации. Дорого.


Автор темы
ASUTP_PLC
частый гость
частый гость
Сообщения: 430
Зарегистрирован: 11 ноя 2012, 17:21
Ф.И.О.: Нурисламов Руслан Мисхатович
Благодарил (а): 2 раза
Поблагодарили: 7 раз

Re: Числа формата Float.

Сообщение ASUTP_PLC » 03 мар 2015, 12:53

Я в универе численные методами увлекался. Поэтому "мы всегда так делаем" именно в моем случае не совсем ко мне относится.

Конечно же сплошь и рядом наблюдаю, можно сделать лучше, но время на ревизию не дают. Дается чисто прикладная задача... время посчитано, вперед.
Решение же технологических задач часто не предусматривает большой точности... Так что все верно. Каждый прав по своему. Со своей правдой.


Вернуться в «Общие вопросы»



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей