Здравствуйте, уважаемые подписчики!
Продолжаем цикл публикаций, посвящённый программированию ПЛК Inovance H3U. В этой статье рассмотрим такое интересное понятие, как "прерывания".
Итак, для что же такое и для чего нужны прерывания?
Прерывания
Прерывание - это остановка обработки циклической программы ПЛК по какому-либо событию для мгновенного выполнения заданных пользователем действий, или отсчёта времени, независящего от длины цикла программы.
На рисунке 1 схематично показан процесс вызова прерывания.
При вызове прерывания, циклическая программа ПЛК моментально перестаёт выполняться. Запоминается точка остановки программы. Отрабатываются субпрограммы вызванных прерываний. Далее, следует продолжение выполнение основной программы с точки останова (с точки вызова прерывания). Циклическая программа ПЛК даёт приоритет субпрограммам прерываний.
Работа программы по циклу может вызвать задержку времени на сработку какого-либо важного механизма. При вызове прерывания, задержки не происходит. Условия отрабатываются мгновенно, независимо от цикла контроллера.
При вызове прерывания очень важно, чтобы глобальный «Enable Global Interrupt», разрешающий вызов прерываний тоже был равен «1». Данный флаг включается командой [EI] – Enable Interrupt. Отключить возможность вызова прерываний можно глобальной командой [DI] – Disable Interrupt. На рисунке 2 показана команда включения флага разрешения глобальных прерываний [EI] и бит M8059, запрещающий обрабатывать прерывания по счётчикам.
Типы прерываний H3U
У Inovance H3U могут быт следующие типы прерываний:
- Внешние прерывания по положительному фронту, или отрицательному фронту входов X000-X007 – 8 шт. по положительному фронту и 8 шт. по отрицательному фронту;
- Прерывания по времени I600, I700, I800 – 3 шт. (от 1 до 99 мс базового времени);
- Прерывания по значению счётчика I010, I020, I030, I040, I050, I060, I070, I080 – 8 шт.
- Прерывания по выполнению функции скоростным выходом Y0-Y4 (только для модулей с транзисторными выходами) I502, I503, I504, I505, I506 – 5 шт.
При вызове прерывания используется подпрограмма прерывания, которая начинается с символов «INT_...». Прерывание разрешается, если в настройках субпрограммы выбрана её функция (тип прерывания). На рисунке 3 показано как открыть окно настройки прерываний. А на рисунке 4 – меню выбора типов прерываний для данной субпрограммы прерываний.
Внешние прерывания
Для запуска субпрограмм прерываний такого типа ПЛК H3U использует состояния высокоскоростных входов X000-X007.
Использование высокоскоростных входов для запуска программ прерываний позволяет моментально выполнить какое-либо действие. В таблице 1 показаны номера прерываний в соответствии с их типом и привязкой к высокоскоростному входу ПЛК.
При выполнении одного из условий на выбранном для прерывания входе (положительный, или отрицательный фронт) происходит вызов заданной субпрограммы прерывания. Если меркер запрета, соответствующий входу включить, то субпрограмма прерывания не будет вызвана.
!!! При работе с внешними прерываниями существуют некоторые ограничения:
- Запрещено повторное использование одних и тех же входов для прерываний.
Номер входа в качестве указателя прерывания не может совпадать с идентификатором любой прикладной команды в пределах того же диапазона входных данных, например, команды высокоскоростного счетчика (HSCS), команды захвата импульсов (Pulse Capture) и команды плотности импульсов (Pulse Density).
- Автоматическая настройка входного фильтра
Когда используется внешнее прерывание Ix0y, автоматически применяется фильтр входного сигнала для высокоскоростного чтения. Следовательно, не нужно использовать инструкцию REFF и специальный регистр D8020 (настройка входного фильтра) для изменения настройки фильтра. Кроме того, входной фильтр, не используемый в качестве контроля внешнего сигнала прерывания, остается эффективным со значением фильтрации 10 мс (начальное значение).
- Запрет на повторное использование номеров указателей
Прерывание по положительному фронту и прерывание по отрицательному фронту, использующие один и тот же вход, не могут быть записаны одновременно (например, I001 и I000, которые анализируют вход X000).
Пример программы вызова прерывания по фронту высокоскоростного входа
На рисунке 5 показана настройка субпрограммы прерывания по положительному фронту входа X005. При этом данное прерывание не требуется вызывать в основной программе ПЛК. При срабатывании положительного фронта входа X005 мгновенно выполняется программа INT_Front.
!!! Обратите внимание, что входа X000 – X007 – высокоскоростные. А это значит, что они ловят малейший дребезг контакта. Т.е., если на входе из примера X005 контакт будет дребезжать, то на каждую сработку будет вызвано прерывание.
Прерывания по времени
Независимо от времени цикла основной программы контроллера прерывание по времени выполняется каждые 1 – 99 мс. Данная функция используется в случаях, где необходимо использовать равные временные интервалы, не зависящие от времени цикла ПЛК (например, ПИД регулятор).
В таблице 2 показаны идентификаторы прерываний по времени (точки отсчёта прерываний), меркеры запрета прерываний по времени и возможные настройки времени.
Если меркер M8056 = «1», то соответствующая точка прерывания по времени (I6xx) не будет вызываться вне зависимости от заданного времени прерывания по ней.
!!! Не допускается дважды вызывать одни и те же точки прерывания по времени.
Программу прерывания по времени не надо вызывать в основной программе. Она вызывается автоматически с настроенной частотой вызова.
На рисунке 6 показана настройка прерывания по времени.
В примере показана настройка прерывания по времени через точку отсчёта I6 на каждые 99 мс (прерывание I699).
В программе прерывания происходит увеличение значения D206 на 1 каждые 99 мс независимо от времени цикла основной программы. При достижении значения D206 >= 200, происходит обнуление D206. И счёт начинается с 0.
Прерывания по срабатыванию высокоскоростного счётчика
При достижении высокоскоростным счётчиком значения, которое задано как значение сравнения для функции DHSCS включается субпрограмма прерывания по счётчику. Функция прерывания по счётчику работает только с высокоскоростными счётчиками C235 – C255.
В таблице 3 приведены номера прерываний по высокоскоростным счётчикам и их меркер запрета.
!!! Каждое прерывание по счётчику можно использовать в программе только один раз.
Пример работы с вызовом прерывания по счётчику
Прерывание по срабатыванию высокоскоростного счётчика работает при достижении выбранным счётчиком заданного значения. Значение счётчика анализируется функцией DHSCS.
В качестве примера на рисунке 7 показана настройка программы прерывания INT_HSC_01. Субпрограмма настроена на прерывание I080. Здесь происходит увеличение значения D200 на 1 каждый раз при вызове прерывания. Также включается на триггер выход Y17.
На рисунке 8 приведён пример программы для вызова прерывания по высокоскоростному счётчику.
На рисунке 8 показан вызов прерывания по счётчику I080. При достижении значения C251= 30000 (причём в любом направлении, снизу, или сверху) функция DHSCS вызывает обработку субпрограммы прерывания INT_HSC_01, настройка которой показаны выше.
Кроме вызова подпрограммы прерывания при помощи функции высокоскоростного аппаратно-независимого счёта DHSCS возможно включить мгновенную сработку выхода ПЛК. Пример такой программы показан на рисунке 9.
При такой обработке высокоскоростного счётчика функция DHSCS при достижении значения счётчика C238 = 30, включает выход Y14. При этом выход Y14 встаёт на триггер и самостоятельно не сбрасывается. Сброс выхода делаем вручную в строчке 7.
!!! Если обычный выход Y7 сбрасывается самостоятельно, как только значение счётчика будет меньше заданного, то Y14 надо сбрасывать принудительно.
Прерывание по выполнению функции высокоскоростного выхода Y0-Y4
У стандартного ПЛК Inovance H3U существует возможность запуска прерывания по высокоскоростному выходу Y0, Y1, Y2, Y3, Y4 (такие выходы имеются только модулей с транзисторными выходами). Для этого анализируется соответствующий выходу меркер M8352, M8372, M8392, M8412, M8432, и при помощи функций PLSY, PLSR, DRVA, DRVI запускается прерывание. В таблице 4 показаны номера прерываний и меркеры, соответствующие выходам.
!!! В случае включения специального меркера, соответствующего выходу, разрешается прерывание по сработке высокоскоростного выхода. Обратите внимание, что здесь для разрешения прерывания меркер надо включать, а не отключать !!!
Настраиваем тип прерывания как показано на рисунке 10.
На рисунке 10 субпрограмма прерывания по высокочастотному выходу настроена на прерывание I502, т.е. на выход Y00. Для разрешения её запуска необходимо включить меркер M8352.
Для вызова субпрограммы прерывания необходимо использовать одну из функций высокоскоростных выходов:
PLSY - запуск определённого количества импульсов, заданной частоты на одном из высокочастотных выходов. Режим задания скорости.
На рисунке 11 показана работа функции PLSY.
После отработки задания функции PLSY на выбранном высокочастотном выходе произойдёт вызов субпрограммы прерывания.
PLSR – запуск определённого количества импульсов заданной частоты и заданием времени разгона и торможения на одном из высокочастотных выходов.
DRVA – запуск определённого количества импульсов заданной частоты на указанном высокочастотном выходе с указанием направления движения. Режим позиционирования с абсолютным заданием позиции.
DRVI – запуск определённого количества импульсов заданной частоты на указанном высокочастотном выходе с указанием направления движения. Режим позиционирования с относительным заданием позиции.
После выполнения каждой из этих функций возможно запустить прерывание по отработке функции высокочастотного выхода.
На рисунке 12 графически показана работа функций PLRS, DRVA, DRVI.
Пример программы вызова прерывания по отработке функции PLSY показан на рисунке 13.
Сначала разрешаем само прерывание по выходу Y0 путём активации меркера M8352. Затем вызываем функцию DPLSY (для 32 битных данных) и, по окончанию её выполнения, получаем вызов прерывания по выходу Y0.
!!! Обратите внимание, что в случае ПЛК с релейными выходами данные прерывания тоже работают, но сами выходы являются релейными и не высокочастотными. Поэтому отработка функций происходит только в программе без задействования физической части. Например, при обработке программы с рисунка 13 на ПЛК с релейными выходами, выходы включаться не будут, а импульсы программной функции DPLSY будут считаться на заданной частоте виртуально. По окончании виртуального подсчёта задания отработает прерывание по выходу I502 !!!
Итого
Итак, сегодня мы рассмотрели понятие прерываний, их виды и примеры настройки и вызова в программе ПЛК Inovance H3U!
Надеюсь было интересно!
Если у вас есть желание поддержать мой канал, то прошу нажать сюда.
Приглашаю производителей и дистрибьюторов программируемых логических контроллеров к сотрудничеству! Если вы хотите, чтобы про вашу технику были сняты видео с примерами программирования и написаны статьи с описанием их функций, то прошу писать на почту ampersand-a@yandex.ru
Подписывайтесь на мой канал, ставьте лайки, пишите комментарии!
Всем пока!
С вами был Сергей Давыдов!