Читаем предыдущую статью. Борьба за реализацию мечты продолжается.
Вячеслав ответил и все в мгновение ока стало ясно. Или, точнее, почти все.
А теперь подробнее…
Действительно, я дал в штангу — промазал с параметрами 2-го фазификатора. Не установил нужные значения. Мой косяк. Сбило то, что, во-первых, результаты совпадали (так уж получилось и теперь понятно почему) и, во-вторых, сравнивался код. В первую очередь на С++, как первый кандидат на ошибку. А он совпадал.
Сами же параметры скрыты — в свойствах блока и я как-то в суете забыл про них. Что тоже объяснимо (хотя и не оправдывает). Просто на С++ параметры в явном виде в тексте программы, а в SimInTech в неявном — настройках, а я фазификатор размножил копированием. Верхний работал и, вроде, верно, а потому какие могли быть вопросы к скопированному? Это я так думал. Действительно, к нему вопросов нет (пока), но были (есть?) ко мне. Но я уже покаялся…
Все это безобразие, невнимательность и далее по списку. Но это мой грех, про который я знаю, но преодолеть не в силах 🙁 И потом я не какой-нибудь ChatGPT XXX, который не ошибается. Я же поднял «хайп», народ взбаламутил!? Гнать таких программистов! Заменить на ИИ!… И это уже происходит. И кто-то даже верит, что это поправит дело. Наивный…
Но давайте серьезно. Итак, я установил нужные параметры фазификатору, и результат не заставил себя ждать (см. рис. 1). Но, чтобы он устраивал, так тоже нет. Видна перерегулировка. Опять что-то не так с параметрами? Тьфу-тьфу. Я уже прямо боюсь… 🙂 Но , вроде, с ними разобрались и не должно быть подвоха. Код? Проверено многократно. Глаз «замылился»? Может. Но, если честно, я его/их настолько «замылил», что смотреть на код уже сил просто нет… Тоже обычное дело 😉
Вопрос. К Вячеславу, само собой. А к кому же еще? Он лично создал этот проклятущий, этот ненавистный, этот… без сомнения гениальный код (я бы не создал, я по автоматам больше).
Так что еще, Вячеслав, нужно «подправить», чтобы к результату (замечу, только выдаваемому проектом/проектами в SimInTech) не было вопросов?
Кстати, рекомендуемое Вячеславом изменение свойств блока If_TriangleOut_1 (текущее имя субблока в проекте SimInTech) никак не повлияло на картинку. Ваша фраза «после этого все почти совпадает» как-то совсем не утешает. Почти, не означает точно. А должно быть, повторю, точно. То, что демонстрирует рис. 2.
Идея! А давайте добавим в диаграммы сигнал с выхода субмодели «Нечеткий регулятор»… Получили следующее. Диаграммы расположены в таком порядке — текущий проект, эталонный проект, ВКПа (рис. 3).
Поскольку я теперь «тертый калач», то предварительно привел к единому значению (0.1) параметры «Минимальный/Максимальный шаг» и дискретный такт ВКПа (было 10 мсек, стало 100). И в ВКПа сразу обращает на себя внимание график h — уровень воды в баке. Он стал походить на вид в SimInTech.
Но смотрим на оранжевый график. Это команда регулятору. Он у всех проектов разный!? «Шо — опять!» (вспомним мультик «Жил-был пес»).
Успокоимся, приведем нервы в порядок и … уменьшим шаг до 0.01. Посмотрим, что выйдет.
И, на тебе, последние две диаграммы совпали идеально! Нет, ну, просто издевательство?! Это ж надо видеть! Когда «легким движением руки … шорты превращаются… (ну, вы помните, да?).
Ладно. Пока ждем ответ от Вячеслава, поиграем с задержками. Но только уже так, как это можно только в ВКПа. Будем изменять задержку только у одного блока — «Нечеткий регулятор», а остальные сделаем максимально быстрыми — 2 мсек. Так они в сравнении с ним будут просто мгновенными. Перенесем их в отдельное автоматное пространство, которому установим минимально возможное в текущей ситуации дискретное время — указанные 2 мсек (быстрее — проблема).
Итак, старт: блок один, время 500 мсек. Смотрим…
Видно, что команда регулятору стала ступенчатой, но остальное выглядит очень даже прилично. Да и она, если сгладить, фактически мало отличается от своего идеального вида (см. рис. 4).
А если 2 сек?
Регулятор работает лениво: нечетко как-то и ступеньки стали еще больше. Но в целом что-то даже регулирует. Верхний уровень немного выше заданного, а нижний так почти хорошо держит.
А если обнаглеть и установить 5 сек? Помнится мы рассматривали на Хабре светофор (привет, Юрий Панчул!) и там была такая же длительность такта. Так что тут мы не очень даже согрешим… Бывает, думаю, и не такое.
Комментировать даже не хочется — все ясно без слов. Бак это, конечно, вам не светофор и на этом эксперименты с дискретным временем можно завершить.
А что будет в такой ситуации в SimInTech? Правда, шаг дискретизации там можно установить только для всех блоков, но все же? Устанавливаем шаг 0.5 сек.
Графики грубее, но в целом мало что изменилось. Только результат выдает много быстрее (шаг, ведь, меньше).
А теперь 2 сек?
Жутковато, конечно, выглядит. Почему-то вспомнился Хэллоуин.
А если 5 сек?
Что тут скажешь? Перебор, однако… Хотя если сравнить рис. 10 и рис. 7, то последний как-то больше походит на управление чем-то.
Что еще? А если мы в ВКПа соберем все объекты в одну кучу, как в SimInTech, и повторим эксперименты с секундами, начиная с 0.5 сек. Сложно, конечно, представить клапан или бак, изменяющий уровень, с дискретностью 5 сек, но все же… Интересно!
Итак, собираем в одно пространство все объекты и начинаем с 0.5 сек.
Хочется сказать — может, на этом и закончим? Ну, да ладно, — 2 сек.
Узбекский орнамент, однако… Все! Видимо, всему есть предел, а потому хватит издеваться на системами управления! Пусть даже и не очень четкими…
Ну, хорошо. Напоследок — 200 мсек.
Ничего не напоминает? Если нет — посмотрите на рис. 1.
Подводим итог
Что делать с кодом — не понятно. Что-то в нем такое, что портит праздник души. Или не в коде? Но все сходится на нем. Параметры-то, вроде, мы уже установили. Ждем-с вестей от Вячеслава. Но вестей конкретных. Вестей таких, которые бы объяснили возникший парадокс. Или убрали бы все «непонятки».
В рамках текущей темы мы показали влияние задержек на результат. Увлеченно и во всем их разнообразии. Причем в ситуации, которые у элементов схемы они могут сильно отличаться друг от друга. Наверное, что-то подобное можно сварганить в SimInTech. Ну, например, разнести отдельные субблоки по проектам, а проекты собрать в пакет (так это, кажется, называется?). Но пока подобное за гранью моей мечты…
Нужно все же осилить хотя бы одну из «мечт» — намеченную.
ссылка на оригинал статьи https://habr.com/ru/articles/842974/
Добавить комментарий