В предыдущей статье мы говорили о том, что такое UDT, как создавать определяемые пользователем типы данных (UDT) и преимущества использования UDT в вашем проекте. В этой статье мы покажем один из способов использования UDT в программировании ПЛК.
Содержание:
- Старый функциональный блок симулятора танка.
- Новый FB симулятора танка с UDT.
- Вызов нового FB симулятора танка.
- Добавление нового тега в UDT.
- Выводы.
UDT в программировании ПЛК
В наших последних нескольких статьях мы использовали одну и ту же систему симулятора танка для объяснения многих концепций, таких как замкнутый контур управления и ПИД-регуляторы. В этой статье мы будем использовать тот же симулятор танка, чтобы показать, как мы можем использовать концепцию UDT в нашем программировании.
Старый функциональный блок симулятора танка
В старой системе симулятора танка мы определили некоторые внутренние параметры для повторного использования функционального блока столько раз, сколько нам нужно. См. рисунок 1.
рисунок 1. FB симулятора танка.
Как вы видите на рисунке, в интерфейсе функционального блока мы определили некоторые входы и некоторые входы-выходы, эти параметры должны быть предоставлены при вызове FB.
Например, если мы вызвали FB для моделирования танка 1 и вызвали его снова для представления танка 2, нам нужно предоставить параметры для каждого танка связанному вызванному функциональному блоку. См. рисунок 2.
рисунок 2. Моделирование танка 1 и танка 2.
Вы можете видеть, что для каждого вызова FB мы должны назначить связанные теги. Для моделирования танка 1 мы должны назначить теги танка 1 вызванному FB. И то же самое для моделирования танка 2.
Новый FB симуляции танка с UDT:
Теперь мы хотим использовать UDT «Танк», который мы определили в последней статье, для моделирования наших танков. Мы создадим новый функциональный блок моделирования. См. рисунок 3.
рисунок 3. Добавьте новый FB моделирования резервуара.
Новый функциональный блок моделирования имеет ту же логику, что и старый FB, но в этой функции моделирования мы будем использовать определенный UDT «Tank» как внутренний тег InOut, как вы видите на рисунке.
Таким образом, вместо того, чтобы объявлять параметры вашего функционального блока в разных областях интерфейса FB, теперь это будет всего один тег, который несет всю необходимую информацию о резервуаре.
Вызов нового FB моделирования резервуара:
Чтобы вызвать новую функцию моделирования, мы выбираем вызов внутри циклического прерывания OB, чтобы убедиться, что выполнение функционального блока не зависит от времени цикла основной логики OB1, как мы объясняли с помощью PID.
Поэтому нам нужно сначала создать новый циклический прерывание OB. См. рисунок 4.
рисунок 4. Добавление циклического прерывания для вызова танков 3 и 4.
Вы можете выбрать циклическое время по своему усмотрению, в нашем случае мы установили его на 3000 микросекунд или 3 миллисекунды.
Теперь вы можете перетащить свой FB «Tank Simulator with UDT» в свое циклическое прерывание, чтобы вызвать FB. Появится окно параметров вызова, в котором экземпляру данных FB можно присвоить любое имя. См. рисунок 5.
Рисунок 5. Вызовите свой FB.
После вызова FB, как вы знаете, нужно назначить параметры, относящиеся к танку, который вы хотите смоделировать. См. рисунок 6.
рисунок 6. Назначьте параметры танка вызову FB.
Обратите внимание, что у вас есть только один параметр для заполнения для функционального блока. И это созданный вами тег UDT. Который уже содержит все параметры танка, необходимые функциональному блоку.
Мы хотим смоделировать Tank_03, поэтому мы назначим тег вызову FB. Смотрите рисунок 7.
рисунок 7. Перетащите свой тег.
Вызов функционального блока для танка 3 выглядит проще, чем вызов танка 1 со старым симулятором FB без UDT. Смотрите рисунок 8.
рисунок 8. Различия в вызовах танка 1 и танка 3.
Вы видите разницу между вызовами двух танков? Вам нужно указать все параметры функционального блока в случае без UDT. Представьте, что вам нужно смоделировать 50 танков с помощью этого симулятора. Назначать все эти параметры будет очень скучно и отнимает много времени, не говоря уже о том, чтобы сначала объявить их для каждого танка.
Но в случае симулятора с UDT вы можете вызывать столько, сколько захотите, и это не займет много времени или усилий. Смотрите рисунок 9.
рисунок 9. Вызов множества других резервуаров.
Теперь представьте, что вам нужно добавить новую переменную в свою симуляцию. Например, вы хотите добавить сигнал предупреждения об оттоке. Со старым функциональным блоком симулятора без UDT это будет означать, что вам нужно объявить этот новый тег для каждого резервуара и добавлять его по одному при каждом вызове резервуара.
Но с UDT вам нужно только обновить созданный вами UDT и добавить новый нужный вам тег. Смотрите рисунок 10.
рисунок 10. Добавление нового тега в UDT.
Когда вы вносите какие-либо изменения в UDT, вам даже не нужно обновлять вызов функции. Поскольку параметр вызова тот же самый, изменения были внесены внутри самого параметра. См. картинку 11.
картинка 11. Не нужно вспоминать FB.
Однако вам все равно нужно перекомпилировать ваш проект ПЛК или, по крайней мере, блок данных, чтобы изменения в UDT можно было обновить. См. рисунок 12.
рисунок 12. Перекомпилируйте, чтобы обновить изменения в UDT.
После компиляции все изменения в UDT будут автоматически обновлены для всех объявленных тегов этого UDT. См. рисунок 13.
рисунок 13. Теперь все теги обновлены.
Заключение
- Вы можете использовать UDT в своем проекте, чтобы сделать программирование более быстрым и простым для понимания.
- Использование UDT также упростит внесение изменений в ваши функции и функциональные блоки.