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, что делает программу более компактной.

Поделиться в соц. сетях

Опубликовать в LiveJournal
Опубликовать в Яндекс

Комментарии

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>