-
Tia Portal Аппаратные прерывания
2021-04-20
Промышленное
-
Выполнение пользовательской программы в ПЛК выполняется по циклическому принципу, так называемому циклическому сканированию. То есть происходит сначала считывание значений из области входов, затем выполняется сама программа, далее результат работы программы записывается в память выходов. Это стандартная методика выполнения пользовательских программ в ПЛК.
Но на практике, так как различных дискретных или аналоговых сигналов с датчиков может быть много и необходимо в зависимости от приходящих значений выполнять определенные управляющие действия, могут использоваться блоки прерываний, которые по какому-либо событию прерывают выполнение главной программы в любом месте и вызывают подпрограмму-обработчик этого события, в качестве которого могут выступать либо сигнал с датчика, либо они могут формироваться самим процессором.
Во время прерывания данные, необходимые для дальнейшего продолжения работы, сохраняются в отдельной области памяти (стек) и начинается выполнение блока прерывания, после чего процессор возвращает управление главной программе.
При одновременном возникновении каких-либо событий, сначала должны выполняться блоки с наивысшим приоритетом, затем последовательно, по убывающей, блоки с более низким приоритетом. Наименьшему классу приоритета присваивается 1, а самый высокий класс приоритета равен 26.
Наименьшим приоритетом обладает организационный блок OB1 — основной блок программы, который запускается каждый раз при переходе контроллера в режим RUN (запуск). В программе могут использоваться несколько главных OB. В этом случае они обрабатываются последовательно, в порядке возрастания их нумерации.
Помимо главных существуют и другие типы OB, которые, так как имеют более высокий приоритет, могут прерывать выполнение главных блоков. Таких блоков прерываний довольно много и каждый имеет свою нумерацию, по возрастающей в зависимости от типа и класса приоритета.
Аппаратные прерывания
Одними из таких блоков являются блоки аппаратных прерываний, которые вызываются всякий раз, когда происходит соответствующее аппаратное событие, в качестве которого может выступать:
- Нарастающий фронт входного сигнала. Данное событие наступает, когда дискретный вход переходит из состояния ВЫКЛ в состояние ВКЛ.
- Спадающий фронт входного сигнала. Данное событие наступает, когда дискретный вход переходит из состояния ВКЛ в состояние ВЫКЛ.
- Текущее значение высокоскоростного счетчика (HSC) равно эталонному значению CV = RV. Событие генерируется в случае, когда текущее значение счетчика достигает значения, соответствующего с предварительно установленным опорным (эталонным) значением.
- Изменение направления счета. Данное событие наступает при переходе счетчика от прямого счета к обратному или от обратного к прямому.
- Внешний сброс высокоскоростного счетчика. Событие данного типа происходит при переходе входа счетчика из состояния ВЫКЛ в состояние ВКЛ.
Конфигурация аппаратных прерываний
Для того, чтобы аппаратные прерывания были задействованы в программе, их необходимо предварительно сконфигурировать.
Для этого в дереве проекта выбираем Device configuration, в появившемся рабочем окне Device view выделяем наш контроллер и во всплывающем меню выбираем пункт Properties, в результате чего в нижней части экрана появится окно свойств контроллера.
Далее в этом окне на вкладке General выбираем Digital inputs>Channel0 и ставим галочку в триггерной кнопке Enable rising edge detection (разблокировать определение нарастающего фронта сигнала). Либо, если необходимо разблокировать определение спадающего фронта, ставим галочку в Enable falling edge detection.
В поле ввода Event name (Имя события) можно указать уникальное имя для созданного аппаратного прерывания. После чего оно будет отображаться в таблице переменных Constants, как имя переменной. В этом же окне можно настроить входной фильтр для цифровых входов, выставит приоритет для блока.
Также для события в выпадающем списке Hardware interrupt (Аппаратное прерывание) необходимо будет назначить организационный блок OB, который будет вызываться при наступлении события. По умолчанию, при первом разблокировании, в этом списке присутствует только метка — — — , которая говорит о том, что к данному событию не привязан никакой OB. Для создания ОВ аппаратных прерываний, нажимаем кнопку Add New.
В появившемся окне задаем имя OB, выбираем язык программирования и нажимаем кнопку OK.
В принципе, на этом конфигурация закончена, далее уже можно переходить в созданный нами OB и создавать программный код, который будет выполняться при возникновении события.
Также конфигурируются аппаратные прерывания и для высокоскоростных счетчиков.
Первоначально на вкладке General в пункте меню High speed counter (HSC) необходимо включить счетчик, установив галочку в Enable this high speed counter. Затем переходим в Event Configuration и выбираем пункт Generate interrupt for counter value equals reference value event. Тем самым вызывая прерывание при достижении значения счетчика предварительно установленному опорному значению.
Далее в Hardware interrupt выбираем, или добавляем новый OB прерываний, который будет вызываться.
Теперь при подсчете импульсов, когда текущее значение счетчика станет равным опорному значению уставки, будет генерироваться аппаратное прерывание и вызываться соответствующий OB. В данном блоке можно разместить инструкцию CTRL_HSC, которая будет обеспечивать управление самим процессом счёта. Так, с ее помощью, можно присваивать счетчику новое текущее значение и значение уставки, направление счета, новое значение периода опроса.
Инструкции ATTACH и DETACH
Также стоит добавить, что мы можем активировать или деактивировать прерывания программно, из других OB, при помощи инструкций ATTACH и DETACH.
Инструкция ATTACH включает OB обработки прерывания выполнения подпрограммы для аппаратного прерывания. Инструкция DETACH соответственно отключает OB обработки прерывания.
В качестве параметров инструкций необходимо задать:
- OB_NR — Идентификатор OB аппаратных прерываний. Все имена существующих OB обработки аппаратных прерываний доступны в выпадающем списке параметра OB_NR.
- EVENT — Идентификатор события. Выбирается из доступных событий аппаратное прерывание, которое было включено в конфигурации устройств ПЛК для цифровых входов.
- ADD — Данный параметр присутствует только в инструкция ATTACH. ADD = 0 (по умолчанию): Данное событие заменяет все предыдущие события, закрепленные за данным OB. ADD = 1: Данное событие добавляется к другим событиям, закрепленным за данным OB.
- RET_VAL — Выполнение кода условия.
В инструкции DETACH для отключения отдельного события или всех событий от заданного ОВ используется параметр EVENT. Если параметр EVENT задан, то только одно событие будет отключено от заданного OB_NR. Остальные события, закрепленные в настоящий момент за OB_NR, остаются без изменений. Если параметр EVENT не задан, то все события, закрепленные за OB_NR, будут отключены.
В завершении темы можно отметить, что благодаря аппаратным прерываниям увеличивается быстрота реакции на событие, повышается производительность, для каждого события может быть создан свой OB, что делает программу более компактной.
Комментарии