В ролике показано создание пользовательских функций (UDF) в среде LogoSoftComfort на примере ПИД-регулятора и блока ручного управления. Рассматриваются виртуальные входы и выходы, настройка параметров, диагностика ошибок, обновление версии UDF, а также перенос алгоритмов из основной программы в UDF с заменой физических выходов маркерами.
- 00:01 Назначение UDF в LogoSoftComfort
- 03:10 Виртуальные входы и выходы UDF
- 07:36 Параллельная привязка параметров коэффициента усиления и минимальной длительности импульса
- 13:46 Диагностика и устранение ошибок в UDF ПИД-регулятора
- 16:41 Настройка параметров и обновление версии UDF
- 21:24 Расчёт рассогласования через блок математики
- 25:05 Создание UDF для ручного управления
- 32:34 Замена физических выходов маркерами
- 33:54 Завершение соединений блоков в UDF
- 39:35 Разграничение прав и режимы ручной/автомат
- LogoSoftComfort
Кому полезно: Инженерам АСУ ТП, изучающим создание пользовательских функций в LogoSoftComfort.
Описание составлено автоматически по расшифровке речи в ролике.
Расшифровка видео
0:01 Как раз для решения задач компактности алгоритмов для решения задач. Реализации некоторых условных контейнеров у нас с вами есть такой удобный инструмент, который называется ЮДФ. Юзер дефанет Фанкшн, то есть функции, которые созданы пользователем, он появился у нас в. Полноценном виде только для 8 версии лога как раз ту самую, которую мы с вами используем. И еще раз повторюсь, это стандартный типовой подход, когда мы из набора каких то элементов набора каких то блоков.
0:47 Собственно, делаем свой функциональный блочок, свой алгоритм, который потом можем уже несколько раз транслировать, несколько раз масштабировать. Ну и, собственно, давайте попробуем сделать, решить эту задачку. Опять же, вне зависимости контроллера, подходы аналогичны. Здесь это все несколько искусственным образом сделано, потому что Лого опять же это простая среда маленькая. Да, а допустим, для той же самой трехсотки это все прям естественно. Вписывается среду разработки, это ее неотъемлемая часть, но опять же подходы одни и те же. То есть стоит вам освоить какой либо контроллер средний среднего сегмента? Да, то есть там семенцовая трехсотка, либо Шнайдеровский 340. Да пусть будет даже авеновский контроллер. Любой, который программируется в среде кодесис дальше. В принципе, вы легко можете переходить с контроллера на контроллер, то есть фактически менять инструменты для того, чтобы выполнять. Одни и те же задачи, это просто инструмент, подходы, одни и те же диалоги, одни и те же есть только нюансы в реализации и так далее. Итак, давайте попробуем создать какой нибудь наш блочок через меню файл Нью. Ну и, собственно, ю ди Эф.
2:20 Открывается. Окно новой диаграммки, вот она. Можно у нее поменять идентификатор, можно ее запоролить? При необходимости добавить параметры, добавить комментарии, ну давайте я. Идентификатор сделаю, ну, допустим, п Кантол. Не вазит проконтрол про регулятор, пусть будет, да? Еще раз повтори, что Юдиев это фактически тот же самый алгоритм, отличающийся только тем, что. У вас нет реальных входов выходов, они виртуальные, то есть вы не можете привязаться к периферии. Это блок, который потом будет вызываться.
3:20 То есть большая часть библиотеки, она нам доступна в полном виде. Ну и давайте, собственно, попробуем перенести то, что мы с вами тут напридумывали вот так вот. Через Контрл ц контрл в копировать, вставить. Но более того, я даже, наверное, вот эти маркеры выброшу. Так сейчас секундочку. Вот так вот. То есть просто копировал кусок алгоритма? Дальше, в принципе, что можно сделать. Каким образом реализовать взаимодействие, посмотрите, пожалуйста. Беру блочок, тащу его на границу моего блока функционального. И, как вы видите, у меня формируется 2 выхода ку 1 и ку. 2 Они виртуальные, я потом этот же блок. Сейчас мы это посмотрим, смогу привязывать к реальной периферии, вызвав его в основном алгоритме.
4:58 Точно так же могу сделать аналоговые входы, аналоговые параметры до с точки зрения моего алгоритма. У меня там было примерно так. Немножечко красоты наведем. Так что так? Ну и хотелось бы эти параметры так или иначе обозначить. То есть обратите внимание, у меня есть бочки и в принципе из каждого булочка. Я могу при необходимости вытащить параметр список настроек для того, чтобы потом снаружи иметь возможность их менять. Точно так же входы, выходы, вот они в основной вкладке. Вот его идентификатор, а е 1, а и 2 и я могу указать для него имя.
6:11 Ну, допустим, а и 1 это у нас было СП. А и 2 это у нас было ПВ. У 1 соответственно это выход, Оупэн у. У 2 это выход, Клоуз. Ну и в принципе мне бы в этой чудесной системе хотелось бы снаружи. Менять настройки, к примеру, того же самого. Чтобы не лезть сюда внутрь и менять настройки коэффициента усиления, соответственно, мой самописный блок регулятора он чуть чуть усложнится. В каком виде, ну собственно? Вот он период. Который задается, мы его в принципе снаружи можем подсунуть.
7:13 И Но только видите, у нас 2 бочка до получается. А нам с вами хотелось бы настраивать снаружи скважность или минимальное время импульса в виде 1 параметра. Но опять же тут можно по разному это реализовать том плане, что мы не можем вот так вот соединить. Причина простая, да это параметр аналоговый, а это параметр время. Ну и 2 момент это коэффициент усиления, это вот этот вот параметр п 2. И минимальная длительность импульса, вот их мы в принципе можем запараллелить. Ну и давайте попробуем их сделать параллельными, здесь опять же все просто.
8:00 Мы можем сделать следующее, можем с вами взять. 2 Дополнительных блока математики. 1 Блок математики фактически у нас будет. Раздавать значения на коэффициент усиления я просто вот так вот сделаю, так? А в чем дело?
8:47 Странно. А ну сове. Постоянно забывая отличие от 8 и 7 версии лога, собственно, вот там весь нюанс. То, что нужно разворачивать табличку. И, собственно, здесь тоже самое. Здесь ставлю Нолик и. И этот же параметр подвязываю сюда же все. Вот тем самым я теперь снаружи в блоке б 0 0 1 могу задавать коэффициент усиления и сюда, и сюда, и. Ну и точно так же еще 1 блок математики здесь уже. Небольшая каша у нас возникает это минимальное время импульса, опять же 500 или минимальная ширина импульса в процентах да умноженных на 10. Ну и привязываю его соответственно вот так.
9:48 Вот так вот, сворачиваю все лишнее. Ну и тем самым мы с вами получаем возможность настройки коэффициента усиления снаружи. Ну давайте попробуем это, а ну секундочку, да нам с вами так. Тв Почему то не сохранилось, Лоуз? И вот теперь сохранилось все шикарно. Просто окей не нажал. Далее параметры ищу мои бочки б 0 0 1 в 1 добавляю. Вот он и до, и точно так же б 0 0 2 в 1 добавляю идентификатор. Я могу поменять для б 1 у меня индикатор.
10:52 Пропорциональности, да и и здесь, ну что, ПВМ? А ну, Ну ладно, пусть будет так ПВМ, то есть он ограничивает количество знаков. Так и да, нужно поставить инверсию на бочке. Ну и здесь, в принципе, мы можем какие то комментарии указать, что, допустим, вы это. Минимальная. Длительность импульса. Процентах умноженных на 10. А но еще параметры, которые я забыл, это параметры шим, это блок б 14 и б 15. Так это это период периодик тайм, да и б? Б 15 ну вот.
12:02 Вот они 2. Так что так? ВМ 1. ПВМ т, 1 а ну уже не вазит. Здесь тоже можно дописать. ВМ 1. Период В 2. Период 2 Все. В принципе, окей. Параметры настроили, комментарии написали входы, выходы описали, пароли не ставим. Все окей сохраняем наш блочок. Так ну так же его назову веб контур! Свою же папочку! В принципе, вот он сохранился. Далее я этот блочок должен подключить, подключается он через библиотеку правой кнопочкой сконфигурировать ЮДФ и добавляя новый юдф.
13:46 Собственно, ну вот он в моих документах лежит у меня. Вот этот старый я, наверное, удален мне ни к чему. Ну и давайте посмотрим, вот он п регулятор, так п регулятор. И почему то он говорит, что у меня облачок? Что то с ним не так, давайте разберемся.
14:41 Так что так? В принципе, все окей. Так да, скорее всего, что. Б 0 1 и б 0 2 у нас с вами висят в воздухе. Хотя он в явном виде не хочет ругаться на этот момент. Ну давайте мы прикроем эту лавочку. Поставим заглушечки. Опять же для того, чтобы было бочку спокойнее. Маркер 1 Маркер 2 бы остальное мы с вами учли, кстати, версию нам сразу же говорит, что можно обновить. Так и давайте посмотрим, да все проблема решена. И как раз в окне сообщений было указано, что содержит блоки без соединений.
16:10 Следовательно, вот то, что у нас здесь с вами было, вот это вот все безобразие. Мы с вами можем взять и заменить на 1. 1 Небольшой облачок. Ну, шикарно комментарии, конечно, он показал больше, так делать не будем. И вот обратите внимание, параметры, которые нам стали доступны, мы их вытащили. Единственное, что мы здесь не указали, забыли зону нечувствительности. Все остальное, в принципе, вот оно есть, оно доступно шикарно, компактно да работает точно так же.
17:01 И при этом не занимает кучу мест, все вот он хотите коэффициент усиления поменять, пожалуйста, все. Классно единственное шим, мы с вами не настроили в плане, что нет возможности сходу настроить с 1 точки. Да и так давайте попробуем параметры добавить. Это у нас компораторы, это бочки 17 и 18 нам с вами нужны параметры, ну опять же.
17:34 Параметры он. Ну тоже, опять же, сейчас не будем тратить время. Того, чтобы добавлять дополнительные блоки математики. Да, он 1 оф, 1 он 2. Комментарий, тогда я удалю нажму окей, сохраним блочок под версией 1 2. Собственно. Версия здесь у меня соответственно более старая, так мне нужно его обновить правой кнопочкой на блоке апдейт, ну и собственно вот. Дополнительно появились параметры. Которая мне доступна. Вот сам регулятор мы можем убедиться в его работоспособности.
18:45 Сейчас, соответственно, рассогласование 50 блоков он работает. При необходимости мы точно также можем ошибку вывести раз согласование. Да, то есть прямо выход компаратора. Так что так? Давайте где нибудь. Так вот видно, что шим работает и так далее. То есть все корректно, и давайте последнее изменение. Это уже просто для красоты выведем значение ошибки, тоже список параметров. Так, параметры, ну да пусть будет параметра можем, кстати, его вывести в явном виде.
19:32 Вот этот вот сигнал, а Икс ты, а Игрек. Я его могу оторвать вывести, так? Так, а почему он не хочет конфигурироваться? Как он, главное, работает. Так не хочет. Ну хорошо, не хочешь, не хочешь, значит, тогда выведем просто как параметр, чтобы его наблюдать. 17 Так здесь он тоже нам ничего не дает. Так странно. Не хотелось бы городить отдельную кухню. Для решения данной задачки вот это то усиленное значение мы в принципе вот так вот можем вывести.
20:54 Но это уже значение с выхода. Ну, соответственно, вот так привязаться мы не можем. Так ну ладно, не будем тратить на это время. Тогда не привязывается, не привязывается, ничего страшного в. В принципе, если хотим увидеть рассогласование, ну, костыльный вариант, конечно, но он гарантированно заработает. Это опять же ненавистный блок математики. Еще 1 1000 скажете вы, да? Который у нас фактически как раз и выполняет функции. Так что так? Выполняет функции.
21:58 Расчета значений параметров, так? Ну слушайте, ладно, здесь какие то внутренние перипетии этой системы, когда он там не может на что то ссылаться. Не может и не может, ну давай, дружок, тогда вот так вот уж делать костыль настоящий, да? Ну вот, он выход. Ошибка регулирования, ну и я думаю, что хватит версия 1 3 обновляем ее. Ну и, собственно, вот она симуляция. Ну и для того, чтобы значение ошибки вывести. Мы с вами так. Ну, в этом случае вот. Можем поставить аналоговый флаг и соответственно вот значение ошибки 11.
23:30 И значение ошибки там она 22. То есть вот полноценный п регулятор с некоторыми костылями, однако он у нас. Функционирует оставшаяся часть, которая нам с вами необходимо реализовать. Это, собственно, свернуть вот этот вот кусок страшный кода для того, чтобы иметь возможность сделать вот такой вот красивый, компактный алгоритм, то есть вот значение сигнала вот. Заданием, но мы его в реальности будем делать несколько иначе. Опять же задание мы в реальности будем задавать для удобства для того, чтобы иметь возможность его. Допустим, с панели поменять или в алгоритме мы его опять же будем задавать с математики.
24:24 Но так вот вот это правильное решение, функциональное. Когда мы можем здесь, допустим, задать константу какую то, а потом к ней обратиться с панели оператора как параметру, и, соответственно, это у нас будет СП. Вот так вот корректнее. Это технологический параметр. ПВ, пока в попугаях у нас, собственно, сам регулятор, который чего то там считает, да? И выходы его в виде рассогласования и 2 выходов больше меньше. Далее нам с вами необходимо трансформировать алгоритм ручного управления, который тоже является достаточно массивным большим. Что делать в этом случае, ну? Опять же, все ведь просто, то есть физика, остается прежней. Входы выходы остаются прежними, нам нужно только вытащить внутрянку вот эту, вот часть, ну давайте.
25:33 Там комментарий еще утащился, но я его потом удалю, копируя, собственно, создаю новую Юдф. Назовем ее как нибудь там. Блок ручного управления у это не богословское рудоуправление. Ну и, собственно, скопируем. Ругается он на наличие физики, входов и выходов. Ну и соответственно копировать отказывается, ну ругается и ругается. Значит, придется без них не очень, конечно, хорошо, но придется придется вот так вот. А ну понятно. Не хочет. Ну и соответственно, мы сейчас потеряем фактический кусок алгоритма.
26:40 Так что так? Давайте тогда искусственно сделаем. Уменьшу. Сразу могу куда нибудь сюда перенести, пусть болтается для следующих поколений. Да, ручной автомат оставлю физику, вынесу подальше. И попробую скопировать внутреннюю часть кода вот эту. На самом деле получится ерунда, ожидаемо. Да, причина простая связь у нас разорвались. Ну ничего страшного на самом деле не стоит переживать. Мы с вами помним, как этот алгоритм работает. И легко его можем восстановить по тому куску кода, который у нас уже есть.
27:55 А именно вот по этой части. Да, немного ручной работы, ну видим, да что выход блока 10! Это у нас лампа открыть б 11 лампа закрыть. Ну не мудрствуя лукаво. Берем собственное и реализуем этот кусок. Не забываем обозвать выходы. Ок. Опан. Ламп. Оставшаяся часть обращаю ваше внимание. Почему у нас произошли проблемы, но во 1 хода блочки б 1 б 2 и б 5 4 входа до обращаю ваше внимание? То есть 1 1 это то, что мы с вами можем смело вытащить?
29:17 Выключатели. Здесь соответственно 2. И Здесь аналогичным образом 2. И 1 это у нас. Опен. И 2 соответственно класс. И 3 АВО 4 КВЗ. Дотаскиваем остальную часть кода, то есть кого у нас с вами подсветим, цепочки расходится. На как я уже сказал, 1 блок на блок б 0 0 3 на 1 цепочку. Так что так? Ну, система решила иначе, конечно. Видимо, ошибку допустил Кво. И 2. Вот. Так что так? Так дальше на б 3. Кого цепляем, и последние несколько цепочек это у нас.
31:10 На б 6 на 3 вход. Б 6. Ну, сейчас достаточно быстро восстановим и б 5 соответственно 1 вход 0 0 5 1 вход готово. Так Опан цепляется к 1 клоуз, цепляется к 1 дальше КВЗ. 2 Б 5 1 б 4. 2 Б 5 1 б 4. Дальше соответственно. 4 Б 6 и 2 б 2. 4 Б 6 Так все. Зацепили. Эту часть. Так, соответственно, у нас. Остались. Физические выходы ку 1 ку 2. Которые никак иначе, чем маркерами мы заменить не сможем, вот они у. Нас здесь другого выхода нет, к сожалению, ну и, собственно, они должны улететь на физику как выходы.
33:04 Раз И, 2 соответственно, ну не забываем их назвать. Так, Ку, 3 это у нас опен. 2 Клауса. Так ну и еще осталось парочку цепочек, а именно выходы, то есть куда эти бочки у нас подключались. Блочок Оупен у нас подключался к б 4 4. И Б 8 1. Б 4 4. И Б 8. Так б 8? Б 8 1. Есть аналогично б 8 2. Так что так? Ничего не пропустил. На нет, пропустил еще б 6 1. Здесь б 6 2 б. На 6 1 6 2 Вот теперь правильно раз. 2 3 И последнее ответвление на б 2 3. Б 2 3 готово.
35:02 Далее соответственно. Для ку 2 рассматриваем. Б 3 3. Б 6 2. Б 6 2 есть б 3. Так что так? Все я.
35:55 Так что так? Б 3 3 почему то у меня на б 8 уже висит? А б 3 4 Отлично. Так что так? Дальше б 9 1. Б 9 1 есть сейчас паутину распутаем. Б 6 2 я по моему это уже зацепил, да? И Е б 1 3. Взаимная блокировка. Ну, все готово. Соответственно, здесь можно. Вот. Вот эту всю паутину разрезать! Реализовать ее. В удобоваримом формате. Ну и так далее. То есть для того, чтобы читабельность повысить? Что у нас осталось? Не реализованного в данной задачке. Осталось у нас следующее.
37:51 1 2 3 4 5 6 Тоже самое. У нас не осталось не реализовано, а работа в режиме ручной автомат. То есть я сейчас реализовал вот эту внутреннюю часть? Которую в принципе могу совершенно легко вот так вот удалить, вот у меня выходы. Входы. Все просто могу это все переместить уже сейчас вот сюда, вверх. Ну и собственно увеличить? Сохранить блок. А так б р у. Ну и попытаться его вызвать, собственно. Точно так же сконфигурировав и Дэв, добавив блочок. Недели я не ошибся, в этот раз все корректно, вот, собственно, красивый, простой блок.
39:12 Уже не имеющий 1000 связей паутины до, которая от нас спрятана код, становится понятным, функциональным и читабельным. Нужно узнать, что внутри открывайте Юдф, если она не запаролена. Ну и, собственно, можете спокойненько работать.
39:35 Не реализовано у нас с вами разграничение прав. Работы в режиме ручной автомат. То есть 2 куска кода реализованы вот они? Совершенно прекрасно. Паутина у нас получилось и как то нам с вами нужно подсовывать сюда сигнал автоматически и. И более того, как то нужно в этот блок подсунуть выходы регулятора, чтобы система в случае, если у нас работает режим автомат, работала от регулятора. Если у нас режим ручной работала от кнопочек, то есть одновременно и оператор, и собственно.
40:29 Автомат, то есть регулятор, работать не могут.
Расшифровка сделана автоматически (Yandex SpeechKit) и может содержать ошибки в терминах.