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, которая будет обеспечивать управление самим процессом счёта. Так, с ее помощью, можно присваивать счетчику новое текущее значение и значение уставки, направление счета, новое значение периода опроса.

CTRL_HSC

Инструкции ATTACH и DETACH

Также стоит добавить, что мы можем активировать или деактивировать прерывания программно, из других OB, при помощи инструкций ATTACH и DETACH.

Инструкция ATTACH

Инструкция 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, будут отключены.

Инструкция DETACH

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

Комментарии

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>