Закоулками мечты. Часть 2

от автора

Читаем предыдущую статью. Борьба за реализацию мечты продолжается.

Вячеслав ответил и все в мгновение ока стало ясно. Или, точнее, почти все.

А теперь подробнее…

Действительно, я дал в штангу — промазал с параметрами 2-го фазификатора. Не установил нужные значения. Мой косяк. Сбило то, что, во-первых, результаты совпадали (так уж получилось и теперь понятно почему) и, во-вторых,  сравнивался код. В первую очередь на С++, как первый кандидат на ошибку. А он совпадал.

Сами же параметры скрыты — в свойствах блока и я как-то в суете забыл про них. Что тоже объяснимо (хотя и не оправдывает). Просто на С++ параметры в явном виде в тексте программы, а в SimInTech в неявном — настройках, а я фазификатор размножил копированием. Верхний работал и, вроде, верно, а потому какие могли быть вопросы к скопированному? Это я так  думал. Действительно, к нему вопросов нет (пока), но были (есть?) ко мне. Но я уже покаялся…

Все это безобразие, невнимательность и далее по списку. Но это мой грех, про который я знаю, но преодолеть не в силах 🙁 И потом я не какой-нибудь ChatGPT XXX, который не ошибается. Я же поднял «хайп», народ взбаламутил!? Гнать таких программистов! Заменить на ИИ!… И это уже происходит. И кто-то даже верит, что это поправит дело. Наивный…

Но давайте серьезно. Итак, я установил нужные параметры фазификатору, и результат не заставил себя ждать (см. рис. 1). Но, чтобы он устраивал, так тоже нет. Видна перерегулировка. Опять что-то не так с параметрами? Тьфу-тьфу. Я уже прямо боюсь… 🙂 Но , вроде, с ними разобрались и не должно быть подвоха. Код? Проверено многократно. Глаз «замылился»? Может. Но, если честно, я его/их настолько «замылил», что смотреть на код уже сил просто нет… Тоже обычное дело 😉

Вопрос. К Вячеславу, само собой. А к кому же еще? Он лично создал этот проклятущий, этот ненавистный, этот… без сомнения гениальный код (я бы не создал, я по автоматам больше).

Так что еще, Вячеслав, нужно «подправить», чтобы к результату (замечу, только выдаваемому проектом/проектами в SimInTech) не было вопросов?         

Рис. 1. Текущий проект после правки параметров.

Рис. 1. Текущий проект после правки параметров.

Кстати, рекомендуемое Вячеславом изменение свойств блока If_TriangleOut_1 (текущее имя субблока в  проекте SimInTech) никак не повлияло на картинку. Ваша фраза «после этого все почти совпадает» как-то совсем не утешает. Почти, не означает точно. А должно быть, повторю, точно.  То, что демонстрирует рис. 2.

Рис. 2. Эталон. SimInTech.

Рис. 2. Эталон. SimInTech.

Идея! А давайте добавим в диаграммы сигнал с выхода субмодели «Нечеткий регулятор»… Получили следующее. Диаграммы расположены в таком порядке — текущий проект, эталонный проект, ВКПа (рис. 3).

Рис. 3. Все проекты. Шаг - 0.1 сек

Рис. 3. Все проекты. Шаг — 0.1 сек

Поскольку я теперь «тертый калач», то предварительно привел к единому значению (0.1) параметры «Минимальный/Максимальный шаг» и дискретный такт ВКПа (было 10 мсек, стало 100). И в ВКПа сразу обращает на себя внимание график h — уровень воды в баке. Он стал походить на вид в SimInTech.

Но смотрим на оранжевый график. Это команда регулятору. Он у всех проектов разный!? «Шо — опять!» (вспомним мультик «Жил-был пес»).

Успокоимся, приведем нервы в порядок и … уменьшим шаг до 0.01. Посмотрим, что выйдет.

Рис. 4. Все проекты. Шаг - 0.01 сек

Рис. 4. Все проекты. Шаг — 0.01 сек

И, на тебе, последние две диаграммы совпали идеально! Нет, ну, просто издевательство?! Это ж надо видеть! Когда «легким движением руки … шорты превращаются… (ну, вы помните, да?).

Ладно. Пока ждем ответ от Вячеслава, поиграем с задержками. Но только уже так, как это можно только в ВКПа. Будем изменять задержку только у одного блока — «Нечеткий регулятор», а остальные сделаем максимально быстрыми — 2 мсек. Так они в сравнении с ним будут просто мгновенными. Перенесем их в отдельное автоматное пространство, которому установим минимально возможное в текущей ситуации дискретное время — указанные 2 мсек (быстрее — проблема).

Итак, старт: блок один, время 500 мсек. Смотрим…

Рис. 5. ВКПа. 0.5 сек. Нечеткий регулятор.

Рис. 5. ВКПа. 0.5 сек. Нечеткий регулятор.

Видно, что команда регулятору стала ступенчатой, но остальное выглядит очень даже прилично. Да и она, если сгладить, фактически мало отличается от своего идеального вида (см. рис. 4).

А если 2 сек?

Рис. 6. ВКПа. 2 сек. Нечеткий регулятор.

Рис. 6. ВКПа. 2 сек. Нечеткий регулятор.

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

А если обнаглеть и установить 5 сек? Помнится мы рассматривали на Хабре светофор (привет, Юрий Панчул!) и там была такая же длительность такта. Так что тут мы не очень даже согрешим… Бывает, думаю, и не такое.

Рис. 7. ВКПа. 5 сек. Нечеткий регулятор.

Рис. 7. ВКПа. 5 сек. Нечеткий регулятор.

Комментировать даже не хочется — все ясно без слов. Бак это, конечно, вам не светофор и на этом эксперименты с дискретным временем можно завершить.

А что будет в такой ситуации в SimInTech? Правда, шаг дискретизации там можно установить только для всех блоков, но все же? Устанавливаем шаг 0.5 сек.

Рис. 8. SimInTech. Шаг - 0.5 сек

Рис. 8. SimInTech. Шаг — 0.5 сек

Графики грубее, но в целом мало что изменилось. Только результат выдает много быстрее (шаг, ведь, меньше).

А теперь 2 сек?

Рис. 9. SimInTech. Шаг - 2 сек

Рис. 9. SimInTech. Шаг — 2 сек

Жутковато, конечно, выглядит. Почему-то вспомнился Хэллоуин.

А если 5 сек?

Рис. 10. SimInTech. Шаг - 5 сек

Рис. 10. SimInTech. Шаг — 5 сек

Что тут скажешь? Перебор, однако… Хотя если сравнить рис. 10 и рис. 7, то последний  как-то больше походит на управление чем-то.

Что еще? А если мы в ВКПа соберем все объекты в одну кучу, как в SimInTech, и повторим эксперименты с секундами, начиная с 0.5 сек. Сложно, конечно, представить клапан или бак, изменяющий уровень, с дискретностью 5 сек, но все же… Интересно!

Итак, собираем в одно пространство все объекты и начинаем с 0.5 сек.

Рис. 11. ВКПа. 0.5 сек. Все объекты в одном пространстве.

Рис. 11. ВКПа. 0.5 сек. Все объекты в одном пространстве.

Хочется сказать — может, на этом и закончим? Ну, да ладно, — 2 сек.

Рис. 12. ВКПа. 2 сек. Все объекты в одном пространстве.

Рис. 12. ВКПа. 2 сек. Все объекты в одном пространстве.

Узбекский орнамент, однако… Все! Видимо, всему есть предел, а потому хватит издеваться на системами управления! Пусть даже и не очень четкими…

Ну, хорошо. Напоследок — 200 мсек.

Рис. 13. ВКПа. 0.2 сек. Все объекты в одном пространстве.

Рис. 13. ВКПа. 0.2 сек. Все объекты в одном пространстве.

Ничего не напоминает? Если нет — посмотрите на рис. 1.

Подводим итог

Что делать с кодом — не понятно. Что-то в нем такое, что портит праздник души. Или не в коде? Но все сходится на нем. Параметры-то, вроде, мы уже установили. Ждем-с вестей от Вячеслава. Но вестей конкретных. Вестей таких, которые бы объяснили возникший парадокс. Или убрали бы все «непонятки».

В рамках текущей темы мы показали влияние задержек на результат. Увлеченно и во всем их разнообразии. Причем в ситуации, которые у элементов схемы они могут сильно отличаться друг от друга. Наверное, что-то подобное можно сварганить в SimInTech. Ну, например,  разнести отдельные субблоки по проектам, а проекты собрать в пакет (так это, кажется, называется?). Но пока подобное за гранью моей мечты…

Нужно все же осилить хотя бы одну из «мечт» — намеченную.


ссылка на оригинал статьи https://habr.com/ru/articles/842974/