В предыдущих статьях мы обсуждали различные типы организационных блоков, например, основной OB1, который является основным циклическим блоком программы, в этой статье мы рассмотрим другой циклический организационный блок. OB30 или циклическое прерывание OB.
Содержание:
- Что такое циклическое прерывание OB30?
- Что такое основной цикл OB1?
- Зачем мне нужен OB30?
- Как настроить циклические прерывания?
- Что делать, если у меня есть более одного циклического прерывания?
- Заключение.
Что такое циклическое прерывание OB30?
Циклическое прерывание OB30 — это организационный блок, который вызывается и выполняется через заданные и точные интервалы времени, в отличие от основного циклического OB1, который постоянно вызывается и выполняется, циклическое прерывание будет вызываться через интервалы времени, которые вы должны настроить при создании циклического прерывания OB.
Например, если я создал OB30 с временным интервалом _также называемым временем цикла_ в 20 мс, это означает, что операционная система будет прерывать основной цикл OB1 и вызывать OB30 каждые 20 мс.
Вы должны убедиться, что время выполнения циклического прерывания OB должно быть меньше его временного интервала. В противном случае все равно может случиться, что следующий вызов OB30 поступит, пока этот вызов OB30 все еще выполняется. В этом случае операционная система генерирует ошибку времени, которая может привести к переходу ПЛК в режим STOP.
Что такое основной цикл OB1?
Основной циклический OB1 — это организационный блок, который отвечает за циклическое выполнение вашей логики ПЛК. Всякий раз, когда вы создаете новый проект и добавляете ПЛК, основной OB1 будет автоматически создан программным обеспечением.
Основой вашего кода ПЛК является циклическое поведение, то есть вам нужно, чтобы ваш код выполнялся непрерывно. Когда обработка вашей логики завершена, операционная система начинает ее обработку снова. Это делается с помощью основного OB1, вы помещаете и вызываете всю свою логику и код внутри этого OB1, и операционная система будет следить за тем, чтобы он непрерывно выполнялся.
Время цикла основного OB1 относится к времени выполнения циклической программы, включая время выполнения всех вложенных частей программы, таких как FC, FB и OB с более высоким приоритетом. Если вы создали несколько OB цикла программы, каждый OB цикла программы вносит свой вклад во время цикла.
Операционная система отслеживает, остается ли время цикла меньше настроенного максимального времени цикла. Если оно превышает максимальное время цикла, ПЛК либо перейдет в режим STOP, либо вызовет OB80 в зависимости от вашей программы.
Зачем мне нужен OB30?
Кто-то может возразить, что я могу поместить любую функциональность внутрь OB30 в основном OB1 и попытаться обойтись без этого в зависимости от очень высокой производительности большинства современных ПЛК. Иногда это может быть нормально, но не всегда.
В зависимости от производительности вашего ПЛК, время основного цикла может быть где-то между 1 и 150 мс; оно может быть разным, но это стандартная конфигурация, это время цикла зависит от многих факторов, таких как размер вашей программы ПЛК и прерывания внутри вашей логики и других факторов, которые, скорее всего, сделают время выполнения вашего цикла нестабильным.
Теперь, если вам нужно выполнять определенную функциональность точно каждые 10 мс, а не 9 мс и не 11 мс. Теперь вы не можете зависеть от основного OB1, так как результат может быть не таким, как хотелось бы. В этом случае вы используете циклическое прерывание OB30, вы настраиваете его на нужные вам 10 мс, и операционная система будет вызывать и выполнять эту функцию точно каждые 10 мс. Вот почему это называется прерыванием; потому что оно прерывает выполнение основного OB1 для вызова и выполнения вашего OB30.
Примеры функциональности, для которой требуется OB30
- Обработка ПИД-регулятора.
- Мониторинг цепей безопасности.
- Мониторинг связи между машинами.
Во всех предыдущих примерах необходимо постоянно контролировать и проверять параметры в определенные моменты времени, поскольку они относятся к реальным физическим величинам или безопасности машины. Выполнение таких функций не должно задерживаться, поскольку они влияют на безопасность и непрерывность вашего процесса.
Как настроить циклические прерывания?
При создании циклического прерывания необходимо настроить некоторые параметры. См. рисунок 1 для добавления нового OB30.
Рисунок 1 – Добавление нового циклического прерывания OB30
При создании циклического прерывания можно найти множество параметров, которые можно задать в свойствах блока, см. рисунок 2.
Рисунок 2 – Свойства OB30
Самые важные параметры, которые необходимо учитывать, следующие:
- Время цикла
Используйте параметр «Время цикла», чтобы задать период времени между двумя вызовами циклического прерывания OB. Он является целым числом, кратным 1 мкс.
- Смещение фазы
Здесь вы устанавливаете период времени, на который смещаются начальные времена по сравнению с кратным времени цикла.
Смотрите рисунок 3 для настройки времени цикла и смещения фазы.
Рисунок 3 – Установка времени цикла и смещения OB30
- Приоритет циклического прерывания OB
Это еще один важный параметр, который необходимо учитывать при настройке циклического прерывания, поскольку у вас может быть более одного циклического блока, если в случае, если два разных OB должны быть вызваны одновременно, операционная система вызовет и выполнит блок с более высоким номером приоритета.
Вы должны знать, что основной программный цикл ПЛК OB1 имеет номер приоритета 1, что является самым низким уровнем приоритета, который может иметь блок. Вот почему OB1 может быть прерван любым другим вызовом блока. См. рисунок 4.
Рисунок 4 — Установка приоритета OB30
Что делать, если у меня более одного циклического прерывания?
Нередко в вашей логике будет более одного циклического прерывания. Если в вашей логике ПЛК есть два ПИД-регулятора, то вам может потребоваться два циклических прерывания для обработки каждого ПИД. В этом случае вам нужно убедиться, что вызов и выполнение различных циклических прерываний не будут перекрываться.
Например, если у вас есть OB30 с интервалом цикла 5 мс и OB31 с интервалом цикла 10 мс, это означает, что второй вызов OB30 также будет временем вызова OB31. Это может привести к логическим ошибкам, даже если вы установите приоритет одного из них выше, чем другого, это испортит ваше время цикла для блока с более низким приоритетом. См. рисунок 5.
Рисунок 5 – Перекрытие вызова различных циклических прерываний
В этом случае может быть целесообразным смещение фазы, когда вы используете несколько OB циклических прерываний.
Если их времена цикла имеют общие кратные, вы можете использовать смещение фазы, чтобы предотвратить одновременное время запуска. См. рисунок 6.
Рисунок 6 – Смещение между различными вызовами OB
Таким образом, чтобы избежать этого перекрытия, мы установим время смещения OB31 равным 1 мс.
Это означает, что подсчет для временного интервала OB31 будет смещен на 1 мс относительно времени начала OB30. См. рисунок 7.
Рисунок 7 – Настройка смещения OB31
Заключение
- Циклические прерывания очень полезны для задач, критичных по времени, которые не должны сталкиваться с какими-либо задержками.
- В вашей логике может быть более одного циклического прерывания.
- Используйте настройку смещения циклических прерываний, чтобы избежать одновременного времени начала.
- Используйте настройку приоритета, чтобы контролировать порядок выполнения различных циклических прерываний.
Recommended Comments
There are no comments to display.
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now