Счётчики предназначены для подсчёта импульсов, поступающих на их вход. Существует 3 вида счётчиков: прямой, реверсивный и обратный.
Команда Прямой счет ( CTU ) увеличивает значение счетчика вплоть до максимального значения при появлении нарастающих фронтов сигнала на входе CU (Count Up = Прямой счет). Когда текущее значение (Сххх) больше или равно предустановленному значению (PV), бит счетчика (Cxxx) устанавливается. Счетчик сбрасывается, когда включается вход сброса. Он прекращает счет при достижении PV.
Команда Реверсивный счет ( CTUD ) увеличивает значение счетчика при появлении нарастающих фронтов сигнала на входе CU (Count Up = Прямой счет). Она уменьшает значение счетчика при появлении нарастающих фронтов сигнала на входе CD (Count Down = Обратный счет). Когда текущее значение (Сххх) больше или равно предустановленному значению (PV), бит счетчика (Cxxx) устанавливается. Счетчик сбрасывается, когда включается вход сброса.
Команда Обратный счет ( CTD ) уменьшает значение счетчика от предустановленного значения при появлении нарастающих фронтов сигнала на входе CD (Count Down = Обратный счет). Когда текущее значение равно нулю, бит счетчика (Cxxx) включается. Счетчик сбрасывает свой бит (Cxxx) и загружает текущее значение предустановленным значением (PV), когда включается вход загрузки (LD). Обратный счет прекращается при достижении нуля. Область счетчиков: Cxxx = C0 - C255. В STL входу сброса CTU соответствует значение, находящееся в вершине стека, а входу Прямой счет – значение, загруженное во второй уровень стека. В STL входу сброса CTUD соответствует значение, находящееся в вершине стека, входу Обратный счет – значение, загруженное во второй уровень стека, а входу Прямой счет – значение, загруженное в третий уровень стека. В STL входу загрузки CTD соответствует вершина стека, а входу Обратный счет – значение, загруженное во второй уровень стека.
Задача 5. Создать программу, включающую выход Q 0.0, если на вход I 0.0 поступило 3 импульса.
Задание: модифицировать программу на подсчёт 5 импульсов.
Тема 4. Таймерные команды
Таймеры используются для реализации временных задержек между некоторыми событиями, например, между поступлением сигнала на контроллер и включением его выхода. Таймеры различаются временным разрешением – минимально возможной задержкой, реализуемой с их помощью. По величине разрешения они разделены на три группы: 1 мс, 10 мс и 100 мс. К первой группе относятся таймеры с адресами Т32, Т96; ко второй: Т33 – Т36 и Т97 – Т100; к третьей: Т37 – Т63 и Т101 – Т255. Далее рассмотрены следующие таймерные команды:
- On-Delay Timer (TON) (Таймер с задержкой включения);
- Off-Delay Timer (TOF) (Таймер с задержкой выключения).
Команды Таймер с задержкой включения (TON) и Таймер с задержкой включения с запоминанием (TONR) отсчитывают время, когда включен разрешающий вход (IN). Когда текущее значение (Txxx) становится больше или равно предустановленному времени (PT), бит таймера устанавливается. Текущее значение Таймера с задержкой включения сбрасывается, когда выключается разрешающий вход, тогда как текущее значение Таймера с задержкой включения с запоминанием сохраняется, когда этот вход выключается. Можно использовать Таймер с задержкой включения с запоминанием для накопления времени за несколько периодов, когда включен разрешающий вход. Для стирания текущего значения Таймера с задержкой включения с запоминанием используется команда Сброс (R). Таймер с задержкой включения и Таймер с задержкой включения с запоминанием продолжают счет после достижения предустановленного значения, они останавливают счет при достижении максимального значения, равного 32767.
Таймер с задержкой выключения (TOF) используется для задержки выключения выхода на фиксированный интервал времени после выключения входа. Когда включается разрешающий вход, немедленно включается бит таймера, а текущее значение устанавливается в 0. Когда разрешающий вход выключается, таймер ведет отсчет времени, пока истекшее время не достигнет предустановленного времени. Когда предустановленное время достигнуто, бит таймера сбрасывается, а отсчет текущего значения прекращается. Команда TOF должна обнаружить переход от включенного состояния к выключенному, чтобы начать отсчет времени.
Задача 6. Разработать программу, включающую выход Q 0.0 через одну секунду после появления сигнала логической единицы на входе I 0.0.
Задание: увеличить время реакции контроллера до 3 секунд.
Задача 7. Создать программу, включающую выход Q 0.0 на 1 секунду при появлении сигнала логической единицы на входе I 0.0.
Задание: увеличить продолжительность включённого состояния выхода Q 0.0 до 3 секунд.
Тема 5. Математические команды, операции преобразования типов переменных и пересылки
Все математические команды разделены на два блока: команды для работы с целочисленными переменными (Integer Math) и операции вещественной математики (Floating-Point Math).
Команды Увеличить байт на 1 ( INCB ) и Уменьшить байт на 1 ( DECB ) прибавляют к входному байту (IN) или вычитают из него 1 и помещают результат в переменную, определенную OUT. Операции увеличения и уменьшения байта на 1 являются беззнаковыми.
Команды Сложить целые числа (+ I ) и Вычесть целые числа (- I ) складывают или вычитают два 16-битовых целых числа и дают 16-битовый результат (OUT).
В LAD и FBD: IN1 + IN2 = OUT
IN1 – IN2 = OUT
В STL: IN1 + OUT = OUT
OUT – IN1 = OUT
Команда Умножить целые числа (* I ) перемножает два 16-битовых целых числа и дает 16-битовое произведение. Команда Разделить целые числа (/ I ) делит два 16-битовых целых числа и даёт 16-битовое частное.
В LAD и FBD: IN1*N2 = OUT
IN1 / IN2 = OUT
В STL: IN1*OUT = OUT
OUT / IN1 = OUT
Команда Переслать байт ( MOVB ) пересылает входной байт (IN) в выходной байт (OUT). Входной байт командой пересылки не изменяется. Команда Переслать слово ( MOVW ) пересылает входное слово (IN) в выходное слово (OUT). Входное слово командой пересылки не изменяется.
Команда Переслать двойное слово ( MOVD ) пересылает входное двойное слово (IN) в выходное двойное слово (OUT). Входное двойное слово командой пересылки не изменяется.
Команда Переслать вещественное число ( MOVR ) пересылает входное вещественное число (двойное слово, 32 бита) (IN) в выходное (OUT). Входное двойное слово командой пересылки не изменяется.
Команда Квадратный корень ( SQRT ) извлекает квадратный корень из 32-битового вещественного числа (IN) и дает результат в виде 32-битового вещественного числа (OUT).
Команда Байт в целое ( BTI ) преобразует байт (IN) в целое число и помещает результат в переменную, указанную в OUT. Байт не имеет знака, поэтому распространение знака не происходит.
Команда Целое в байт ( ITB ) преобразует слово (IN) в байт и помещает результат в переменную, указанную в OUT. Преобразуются значения от 0 до 255. Все остальные значения приводят к переполнению и не влияют на выход.
Команда Двойное целое в вещественное ( DTR ) преобразует 32-битовое целое со знаком (IN) в 32-битовое вещественное число и помещает результат в переменную, указанную в OUT.
Команда Округлить ( ROUND ) преобразует вещественное число (IN) в двойное целое число и помещает результат в переменную, указанную в OUT. Если дробная часть равна 0,5 или больше, то число округляется в большую сторону.
Задача 8. Разработать программу, включающую выход Q 0.0, если на вход I 0.0 поступило менее 3 импульсов, и выход Q 0.1, если количество поступивших импульсов равно 3.
Задание: дополнить программу так, чтобы при поступлении на вход I 0.0 более 3 импульсов включался выход Q 0.2.
Задача 9. Разработать программу, осуществляющую сложение байтов IB 0 и IB 1 с выдачей результата на выход QB 0.
Задание: модифицировать программу таким образом, чтобы она выполняла операцию умножения байтов IB 0 и IB 1.
Задача 10. Создать программу, реализующую операцию извлечения корня из байта IB 0 с выдачей результата на выход QB 0.
Задание: модифицировать программу таким образом, чтобы она выполняла операцию извлечения корня из байта IB 1.
Тема 6. Прерывания
Существует несколько видов событий, для которых могут быть назначены прерывания. К ним относятся: нарастающий (спадающий) фронт сигнала на дискретных входах контроллера, прерывания по времени, прерывания от скоростных счётчиков и др.
Прежде чем программа обработки прерывания сможет быть вызвана, должно быть установлено соответствие между прерывающим событием и сегментом программы, который необходимо выполнить, когда это событие происходит. Для организации связи между прерывающим событием (задаваемым номером прерывающего события) и сегментом программы (задаваемым именем программы обработки прерывания) используется команда Назначить прерывание (ATCH). Одной программе обработки прерываний можно поставить в соответствие несколько прерывающих событий, но одно событие не может быть одновременно поставлено в соответствие нескольким программам обработки прерываний. Когда происходит событие при разблокированных прерываниях, то исполняется только последняя программа обработки прерывания, поставленная в соответствие этому событию.
Когда вы назначаете прерывающее событие программе обработки прерывания, это прерывание автоматически разблокируется. Если вы заблокировали все прерывания с помощью команды глобального блокирования прерываний, то каждое возникновение прерывающего события ставится в очередь, пока прерывания не будут снова разблокированы с помощью глобального разблокирования прерываний.
Отдельные прерывающие события можно заблокировать разрывом связи между этим прерывающим событием и программой обработки прерывания с помощью команды Отсоединить прерывание (DTCH). Команда отсоединения возвращает прерывание в неактивное или игнорируемое состояние.
Команда Назначить прерывание ( ATCH ) связывает прерывающее событие (EVNT) с номером программы обработки прерывания (INT) и разблокирует прерывающее событие.
Команда Отсоединить прерывание ( DTCH ) разрывает связь прерывающего события (EVNT) со всеми программами обработки прерываний и блокирует прерывающее событие.
Команда Разблокировать прерывания ( ENI ) глобально разблокирует обработку всех назначенных прерывающих событий.
Команда Заблокировать прерывания ( DISI ) глобально блокирует обработку всех прерывающих событий.
Когда вы переходите в режим RUN, прерывания первоначально заблокированы. Находясь в режиме RUN, вы можете разблокировать все прерывания, выполнив глобальную команду Разблокировать прерывания. Глобальная команда Заблокировать прерывания дает возможность ставить прерывания в очередь, но не позволяет вызывать программы обработки прерываний.
К прерываниям, управляемым по времени, относятся циклические прерывания и прерывания, вызываемые таймерами T32 и T96. С помощью циклических прерываний можно задать действия, которые должны выполняться циклически. Время цикла устанавливается в пределах от 1 до 255 мс шагами по 1 мс. Всего может быть назначено до 2 прерываний, управляемых по времени. Для этого необходимо записать время цикла в мс в SMB34 для циклического прерывания №1 и в SMB35 для циклического прерывания №2. Событие, вызывающее циклические прерывания, передает управление соответствующей программе обработки прерываний каждый раз, как истекает время работы таймера. Обычно циклические прерывания используются для управления опросом аналоговых входов через регулярные интервалы времени или для организации работы ПИД - регулятора. Циклическое прерывание разблокируется, и начинается отсчет времени, когда назначена программа обработки прерывания событию, вызывающему циклическое прерывание. При этом система воспринимает значение времени цикла и последующие изменения на это время цикла влияния не оказывают. Чтобы изменить время цикла, вы должны задать для него новое значение, а затем снова назначить программу обработки прерывания событию, вызывающему циклическое прерывание. Когда происходит повторное назначение, функция циклического прерывания сбрасывает все накопленное время от предыдущего назначения и начинает отсчет времени с новым значением.
Будучи разблокированным, циклическое прерывание работает постоянно, выполняя назначенную программу обработки прерывания при каждом истечении заданного временного интервала. Если выйти из режима RUN или отсоединить циклическое прерывание, то оно заблокируется.
Задача 11. Разработать программу, осуществляющую мигание выхода Q 0.0 с частотой 2 Гц (время включённого состояния выхода Q 0.0 равно времени его отключённого состояния и составляет 255 мс).
Код главной программы:
Код подпрограммы обработки прерывания interrupt:
Задание: поднять частоту мигания до 4 Гц.
Задача 12. Реализовать программный реверсивный счётчик импульсов, поступающих на вход I 0.0, количество импульсов выдать на выход QB 0. Направление счёта (увеличение или уменьшение) должно определяться входом I 0.1 (1 – увеличение, 0 – уменьшение).
Код главной программы:
Код подпрограммы обработки прерывания interrupt:
Задание: модифицировать программу на подсчёт импульсов, поступающих с входа I 0.2.
Дата: 2019-12-10, просмотров: 407.