В предыдущих статьях мы обсуждали, что такое организационный блок, и говорили о главном циклическом прерывании OB1 и прерывании по времени суток OB10.
В этой статье мы продолжим обсуждение различных OB, и на этот раз мы поговорим об организационном блоке прерывания с задержкой или OB20.
Содержание:
- Что такое OB20?
- Как вызвать OB20?
- Параметры инструкции SRT_DINT.
- Пример программы.
- Заключение.
Что такое прерывание с задержкой (OB20)?
OB20 — это организационный блок, который вызывается и выполняется операционной системой, но мы должны сообщить операционной системе, когда вызывать этот OB20.
Операционная система получает информацию из пользовательской программы ПЛК для вызова этого OB20, она будет ждать настроенного времени задержки, а затем вызовет и выполнит любую логику внутри OB20.
Мы создаем блок OB20 из Add a new block в дереве проекта. См. рисунок 1.
Рисунок 1 – Создание нового блока OB20
Теперь, когда я создал прерывание с задержкой, когда оно будет выполнено? И как настроить задержку выполнения блока?
Опять же, OB20 является организационным блоком, что означает, что вы не вызываете блок для выполнения, но сообщаете операционной системе, когда она может вызвать его и выполнить любую функциональность, написанную внутри.
Как сообщить операционной системе вызвать OB20?
Чтобы сообщить операционной системе, что мы хотим вызвать OB20, мы используем SRT_DINT или прерывание задержки запуска, см. рисунок 2.
Рисунок 2 – Инструкция задержки запуска
Параметры инструкции SRT_DINT
Как видно из последнего рисунка, вы можете использовать инструкцию SRT_DINT для вызова OB20. но вам нужно настроить некоторые параметры, чтобы инструкция работала.
EN: инструкция не будет выполнена, пока на входе EN не будет представлен отрицательный фронт сигнала. Это означает, что вам нужно назначить условие из набора условий для включения сигнала, и инструкция будет работать только тогда, когда это условие истинно, а затем снова ложно.
OB_NR: вы назначаете номер прерывания задержки, которое вам нужно вызвать, в нашем случае 20, поскольку мы создали OB20, но мы можем создать более одного прерывания задержки, и тогда нам придется вызывать каждое из них с помощью отдельной инструкции SRT_DINT.
DTIME: это время задержки, которое вы хотите выждать перед выполнением OB20, мы установим это время на 5 секунд для симуляции.
SIGN: Идентификатор, который появляется, когда прерывание с задержкой по времени OB вызывается в информации о событии запуска OB.
Пример программы ПЛК
Чтобы лучше понять OB20, мы создадим простую логику, чтобы увидеть, как OB20 может быть вызван и выполнен. Мы построим этот пример ПЛК на предыдущей логике, которую мы сделали для OB1 и OB10 в предыдущих статьях.
Внутри OB20 мы создадим логику, которая подсчитывает, сколько циклов OB1 было вызвано и выполнено в течение 5 секунд задержки, которую мы настроили для OB20. См. рисунок 3.
Рисунок 3 – Логика внутри OB20
На последнем рисунке вы видите, что мы использовали инструкцию MOVE для передачи информации о количестве циклов в начале вызова OB20 и после его выполнения.
См. рисунок 4 для остальной части логики.
Рисунок 4 – Рассчитайте, сколько циклов выполняется за 5 секунд
После этого мы вычтем два значения количества циклов, чтобы получить, сколько циклов было выполнено за пятисекундную задержку.
Теперь, когда мы создали нужную нам логику, как мы можем вызвать OB20? Как объяснялось ранее, мы должны использовать инструкцию SRT_DINT. Мы будем использовать эту инструкцию внутри OB10, который мы настроили ранее для выполнения каждую минуту. Это означает, что OB20 также будет вызываться и выполняться каждую минуту, но с задержкой в 5 секунд.
В предыдущей статье мы построили логику, которая определяет, сколько раз вызывается и выполняется OB1, мы также построили другую логику, которая будет вызывать OB10 каждую минуту.
В этом примере мы будем использовать вызов OB10 для вызова OB20. Смотрите рисунок 5.
Рисунок 5 – Вызов OB20 через OB10
Ранее мы говорили, что SRT_DINT нужен отрицательный фронт сигнала на EN для начала вызова. Вот почему мы использовали сигнал TimeOfDayInterruptEnabled, который, как мы знаем, будет истинным при выполнении OB10, а затем вернется к ложному, давая нам нужный нам фронт сигнала.
Теперь, когда вся логика ПЛК завершена, давайте скомпилируем и запустим новую симуляцию. Смотрите следующую симуляцию нашего проекта.
Видите ли, в анимации сначала значения счетчиков циклов равны нулю, но когда вызывается OB10 и TimeOfDayInterruptEnabled имеет значение true, логика будет ждать 5 секунд, а затем значения счетчиков будут обновлены счетчиками циклов.
Вывод
- OB20 — это организационный блок, вызываемый и выполняемый операционной системой.
- Мы можем указать операционной системе вызвать OB20 с помощью инструкции SRT_DINT.