Jump to content
  • Sign in to follow this  

    Tia Portal – Различные случаи вызова функционального блока

       (0 reviews)

    caixiaofeng

    В предыдущей статье мы обсуждали, что такое функциональный блок FB, как он работает в программе ПЛК и как его создать и использовать. В этой статье мы поговорим об экземплярах блоков данных различных типов функциональных блоков в Siemens Tia Portal и когда использовать каждый тип.

    Содержание:

    • Что такое функциональный блок FB?
    • Различные варианты экземпляров данных.
    • Одиночный экземпляр.
    • Экземпляр параметра.
    • Многоэкземпляр.

    Что такое функциональный блок?

    Функциональный блок или FB — это просто блок, содержащий логику кода. Вы используете этот FB для достижения определенной функциональности с помощью фрагментов кода, написанных внутри.

    При вызове функционального блока в ваш код вам будет предложено назначить блок данных, также называемый экземпляром данных, который будет связан с этим FB, чтобы сохранить значения параметров FB. Не все параметры внутри FB сохраняются в экземпляре данных, но мы вернемся к этому позже.

    При вызове функционального блока у вас есть 3 различных варианта для связывания экземпляра блока данных с этим вызовом функции. Эти различные варианты будут зависеть от того, где вы вызываете свой FB.

    Итак, вкратце. Функциональный блок FB — это в основном функция FC с выделенным блоком данных DB, этот блок данных используется для хранения значений параметров функционального блока.

    Различные варианты для экземпляров данных

    У нас есть 3 различных варианта для экземпляра данных функционального блока, эти варианты:

    • Один экземпляр.
    • Экземпляр параметра.
    • Мультиэкземпляр.

    Три различных экземпляра данных вызова исходят из 3 различных методов вызова:

    • Вы можете вызвать функциональный блок FB внутри основного OB1, что даст вам возможность:
    • Один экземпляр.
    • Вы можете вызвать функциональный блок FB внутри функции FC, что даст вам два варианта
    • Один экземпляр
    • Экземпляр параметра
    • Вы можете вызвать функциональный блок внутри другого функционального блока, что даст вам три доступных варианта создания экземпляра данных
    • Один экземпляр
    • Экземпляр параметра
    • Несколько экземпляров

    Один экземпляр данных

    Сначала давайте начнем с создания функционального блока FB, как мы уже упоминали ранее, мы создаем функциональный блок, нажимая «добавить новый блок» и выбирая нужный нам тип блока. Смотрите рисунок 1.

    150-1.gif

    Рисунок 1 — Создание функционального блока FB

    Теперь давайте вызовем ReusableFB, который мы создали внутри нашего основного OB1. См. рисунок 2.

    150-2.gif

    Рисунок 2 – Вызов FB внутри основного OB1

    Как видно из предыдущего рисунка, при вызове FB внутри основного OB1 вам будет предложено назначить экземпляр данных, который будет связан с этим вызовом FB. В этом случае будет только один вариант – один экземпляр.

    После выбора варианта один экземпляр будет создан блок данных и связан с вызовом FB. См. рисунок 3.

    150-3.gif

    Рисунок 3 – Создан один экземпляр

    Созданный один экземпляр будет использоваться для хранения значений некоторых параметров FB. Например, входов, выходов, In Out и статических параметров.

    Другие параметры FB не будут сохранены, например, temp и константы. См. рисунки 4 и 5.

    150-4.gif

    Рисунок 4 – Данные сохраняются внутри экземпляра данных

    150-5.gif

    Рисунок 5 – Данные сохраняются из FB в экземпляр данных.

    Теперь давайте создадим простую логику внутри FB, чтобы лучше понять экземпляры данных. Эта логика добавит постоянное значение 15 к статической переменной, а затем переместит результат на выход. См. рисунок 6.

    150-6.gif

    Рисунок 6 – Создание простой логики

    Теперь вернитесь к основному OB1 и обратите внимание, как теперь выглядит ваш вызов FB. См. рисунок 7.

    150-7.gif

    Рисунок 7 – Обновление вызова FB после каждого изменения

    Любое изменение, которое вы вносите в логику внутри FB, приведет к необходимости обновления вызова функционального блока, чтобы внесенные вами изменения можно было применить.

    Вы можете обновить вызов блока, щелкнув правой кнопкой мыши вызов FB и нажав опцию обновления вызова блока или перекомпилировав код ПЛК. Смотрите рисунок 8.

    150-8.gif

    Рисунок 8 – Обновление вызова FB

    После обновления вызова блока изменения, внесенные вами в код FB, будут применены и использованы в вызове блока. Как вы видите на рисунке 9.

    Теперь FB ожидает входной сигнал типа bool, а FB выдаст выход типа int.

    150-9.gif

    Рисунок 9 – Входы и выходы теперь связаны с вызовом FB

    Давайте смоделируем наш код и посмотрим, как будет вести себя ПЛК. Смотрите следующую анимацию, показывающую простую симуляцию логики ПЛК на данный момент.

    spacer.png

    Как вы видите из анимации, всякий раз, когда сигнал запуска равен TRUE, функция будет выполняться, а выход будет продолжать меняться. И как только сигнал запуска больше не доступен, выход останется на последнем записанном значении.

    Использование экземпляра данных здесь заключается в том, что значения статической переменной и выходной переменной сохраняются внутри одного экземпляра, поэтому, когда сигнал запуска снова возвращается, функция продолжит работу с последних записанных значений.

    Очень важное примечание

    Никогда не используйте один и тот же экземпляр для двух разных вызовов FB. Смотрите следующую анимацию.

    spacer.png

    Как вы видите из анимации, у нас есть два разных вызова FB, но оба вызова связаны с одним и тем же одним экземпляром, поэтому даже когда сигнал start2 был FALSE, значение Output2 менялось вместе с Output1.

    Как и следовало ожидать, изменение экземпляра данных 1-го вызова также будет затронуто во 2-м вызове, поскольку у них один и тот же блок памяти. Смотрите рисунок 10.

    150-12.gif

    Рисунок 10 — Никогда не используйте один и тот же экземпляр данных с разными вызовами FB

    Если вы использовали один и тот же экземпляр данных с разными вызовами FB, то ваш функциональный блок больше не может быть использован повторно. Даже если входные/выходные параметры различны для каждого отдельного вызова FB. Как вы видели в последнем видео (анимация), оба вызова дали одинаковые результаты, хотя у второго вызова даже нет входного сигнала включения.

    Еще одно очень важное замечание

    Мы уже говорили, что если вы вызываете свой FB из FC более высокого уровня, у вас будет два варианта для связанного экземпляра данных; эти варианты — один экземпляр и экземпляр параметра. Смотрите рисунок 11.

    150-13.gif

    Рисунок 11 — Использование одного экземпляра с FB, вызванным из FC

    Если это произошло, и вы вызовете FB внутри FC, вам никогда не следует использовать один экземпляр для ваших FB. Чтобы узнать, почему это так. См. рисунок 12

    150-14.gif

    Рисунок 12 – Вызов FC более одного раза

    Как видно из рисунка 12, когда вы вызываете FC более одного раза в своей логике, вам не будет предложено назначить блок данных, потому что FC не нужен один.

    Но вы знаете, что внутри FC есть вызванный FB, с этим FB связан один экземпляр. Так что теперь 3 вызова FC имеют один и тот же экземпляр данных для вызова FB. Так что ваша функция FC больше не может быть повторно использована.

    Что делать? Лучший вариант, когда вам нужно вызвать FB внутри FC, — использовать экземпляр параметра.

    Экземпляр параметра

    Как мы уже говорили, если вы вызвали FB внутри FC, вам не следует выбирать один экземпляр, а экземпляр параметра лучше для целей повторного использования.

    Экземпляр параметра сохранит экземпляр данных FB, вызванного в области In Out интерфейса блока FC. Позволяет вводить новый экземпляр данных для каждого вызова FC. Смотрите рисунки 13 и 14.

    150-15.gif

    Рисунок 13 — Назначение экземпляра параметра при вызове FB внутри FC

    150-16.gif

    Рисунок 14 — Каждому вызову FC потребуется новый экземпляр данных

    Как видно из предыдущего рисунка, всякий раз, когда вы вызываете FC внутри своей программы, она будет запрашивать экземпляр данных для повторно используемого FB внутри FC.

    Но, используя этот способ, вам придется создать экземпляр данных самостоятельно. Смотрите рисунок 15.

    150-17.gif

    Рисунок 15 — Создание нового экземпляра данных

    Чтобы создать новый экземпляр данных, вы делаете то же самое, что и при создании FC или FB, но на этот раз вы выбираете опцию DB. И убедитесь, что вы выбрали тот же тип DB, что и вызываемый FB.

    Теперь ваш FC можно использовать повторно столько раз, сколько вы хотите, вам просто нужно создать экземпляр для каждого вызова. Смотрите рисунок 16.

    150-18.gif

    Рисунок 16 — Назначение DB вызову FC

    Многоэкземплярная база данных

    Многоэкземплярная база данных просто означает, что DB вызываемого FB будет храниться внутри DB вызывающего FB более высокого уровня. Эта опция доступна только в том случае, если вы вызываете FB из другого FB.

    Давайте создадим еще один FB, чтобы использовать его как FB более высокого уровня.

    После создания этого HigherLevelFB вызовите его из основного OB1, и, конечно, единственным вариантом вызова будет один экземпляр, как показано ранее. Смотрите рисунок 17.

    150-19.gif

    Рисунок 17 – Вызов HigherLevelFB из основного OB1

    Теперь вызовите ReusableFB из HigherLevelFB. И выберите опцию Multi-instance. См. рисунок 18.

    150-20.gif

    Рисунок 18 – Назначение многоэкземплярной БД

    При выборе опции Multi-instance созданная БД будет сохранена внутри статических параметров вызывающего FB. См. рисунок 19.

    150-21.gif

    Рисунок 19 – Экземпляры сохраняются внутри статических параметров

    Вы можете вызывать ReusableFB много раз, каждый раз при его вызове многоэкземпляр будет сохранен внутри статического параметра. См. рисунок 20.

    150-22.gif

    Рисунок 20 – Многократный вызов ReusableFB

    Как вы видите, экземпляр данных FB нижнего уровня будет сохранен внутри экземпляра данных FB верхнего уровня. Это лучше всего подходит для лучшей структуры программы и удобной для чтения логики.

    Заключение

    Создание функциональных блоков внутри вашего кода потребует связывания блока данных с каждым вызовом FB, который вы сделаете в своей логике. Этот блок данных или также называемый экземпляром данных имеет различные параметры в зависимости от типа блока, который вызывает ваш FB.

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

    Использование нескольких экземпляров может помочь лучше организовать структуру вашей программы, поскольку все вызываемые FB будут хранить свои базы данных внутри основного вызывающего FB.

    Sign in to follow this  


    User Feedback

    Create an account or sign in to leave a review

    You need to be a member in order to leave a review

    Create an account

    Sign up for a new account in our community. It's easy!

    Register a new account

    Sign in

    Already have an account? Sign in here.

    Sign In Now

    There are no reviews to display.


Apply for friendship links:WhatsApp or E-mail: admin@plchmis.com
×
×
  • Create New...