Читаем предыдущую статью. Борьба за реализацию мечты продолжается.
Вячеслав ответил и все в мгновение ока стало ясно. Или, точнее, почти все.
А теперь подробнее...
Действительно, я дал в штангу - промазал с параметрами 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. Ну, например, разнести отдельные субблоки по проектам, а проекты собрать в пакет (так это, кажется, называется?). Но пока подобное за гранью моей мечты...
Нужно все же осилить хотя бы одну из "мечт" - намеченную.