Добро пожаловать во вторую часть моего учебника по лестничной логике. В первой части учебника по лестничной логике я познакомил вас с самыми основами лестничной логики и некоторыми базовыми инструкциями.
Во второй части учебника я научу вас решать реальные задачи с помощью лестничной логики и использовать ее для построения программ ПЛК. В то же время вы познакомитесь с некоторыми другими инструкциями лестничной логики:
Итак, давайте начнем с того, на чем остановились в первой части: с защелок. В программировании ПЛК защелка – не единственный способ удержания состояния катушки.
Set / Reset катушки
Следующие две инструкции, которые мы рассмотрим, называются set и reset. Или в терминологии Allen Bradley – защелка и разблокировка катушек. Суть их в том, чтобы избавить вас от использования контактов в качестве защелок. Таким образом, вы можете установить выход в одном месте лестничной логики. Затем вы можете сбросить катушку в совершенно другом месте вашей лестничной логики.
Позвольте мне проиллюстрировать, как они работают:
Как вы можете видеть, устройство настройки/сброса состоит из двух катушек. Катушка установки и катушка сброса. Но несмотря на то, что это две отдельные катушки, они управляют одним и тем же битом.
Это означает, что когда вы подадите импульс на катушку установки, бит будет установлен. В отличие от обычной катушки, катушка установки сохранит бит установленным, даже если условия перед катушкой изменятся. Единственный способ снова сбросить бит – подать импульс на катушку сброса.
При создании больших программ ПЛК с тысячами битов, некоторые из которых даже подключены к системе SCADA, убедитесь, что вы знаете, где вы устанавливаете биты, а где сбрасываете их.
SET/RESET приоритеты
Построение функции установки/сброса с двумя разными катушками создает новую проблему:
Какой из них имеет наивысший приоритет?
Если оба условия для установки и для сброса истинны, каким будет состояние катушки в итоге?
Об этом важно знать, потому что, хотя это и считается плохой практикой программирования, все же может случиться так, что оба условия окажутся истинными. Обычно это происходит в условиях неисправности, и в целях безопасности важно знать, что произойдет в этом случае.
Что ПЛК выполнит последним, то и будет результатом.
Если вы установите катушку в одной сети и сбросите ее при том же условии в сети, расположенной чуть ниже, катушка будет сброшена. Помните, что ПЛК выполняет лестничную логику по одной инструкции за раз – сверху вниз.
Если вы поместите установку и сброс в разные POU, то результат будет получен от последнего POU, который вызовет и выполнит ПЛК.
Функциональные блоки SET/RESET
Еще один способ реализации функции установки/сброса – функциональные блоки. Их можно использовать не только в лестничной логике, но и в функциональных блок-схемах и структурированном тексте.
Они довольно просты и удобны в использовании. Особенность этих функциональных блоков в том, что условия установки и сброса находятся в одном и том же месте. Но из-за этого существует два разных функциональных блока, которые могут реализовать функциональность установки/сброса.
Каждый из этих двух функциональных блоков имеет свой приоритет для установки и сброса. Вот первый из них:
Функциональный блок SR
Первый функциональный блок официально называется моноблоком с доминирующим параметром set, но его также называют SR или функциональным блоком set/reset. Он имеет наивысший приоритет set, что означает, что выход будет установлен, если одновременно истинны условия set и reset.
Вот как выглядит функциональный блок SR:
Как вы можете видеть, у него есть один вход для настройки и один для сброса. С другой стороны находится выход.
Функциональный блок RS
Другой функциональный блок называется RS или монофлоп с доминирующим сбросом. В принципе, он работает точно так же, как и другой функциональный блок set / reset, с одним существенным отличием.
В этом блоке сброс имеет наивысший приоритет. Если оба условия одновременно истинны, выход будет сброшен в качестве конечного результата.
И снова этот блок имеет два входа и один выход.
Построение логики с помощью лестничной логики
Теперь, после того как вы узнали об этих новых инструкциях по установке и сбросу лестничной логики, я думаю, пришло время начать строить некоторые реальные логические схемы.
Потому что быть хорошим программистом ПЛК на лестничной логике – это не только знать инструкции. Нужно уметь решать задачи с помощью лестничной логики. Поэтому позвольте мне показать вам несколько примеров решения реальных задач с помощью программ ПЛК на лестничной логике.
Одна вещь, которую я люблю делать при решении задач с помощью лестничной логики, – это мыслить условиями. Формально это называется комбинаторной логикой. Возможно, вы уже слышали о ней. Или, по крайней мере, о логических воротах – AND, OR XOR и т. д.
Поскольку я уже писал о логических воротах и о том, как они работают, в статье о комбинаторной логике, я не буду здесь углубляться в то, как они работают. Лучше я решу несколько реальных задач с использованием комбинаторной логики.
Логические элементы с инструкциями ПЛК
Первый пример, который я хочу привести, – это блокировка. С помощью простых инструкций вы можете построить логику, необходимую для создания функциональности блокировки.
Блокировка используется во многих приложениях ПЛК, потому что она предотвращает активность одних устройств, когда активны другие. Хорошо известный пример – двигатель, работающий по схеме “звезда/треугольник“. Если вы управляете им с помощью ПЛК, вам нужно убедиться, что выход реле “звезда” не может быть активирован, если активен выход реле “треугольник”.
Пример логики запуска/остановки
Давайте рассмотрим простой пример блокировки с двумя двигателями, когда одновременно может работать только один. У каждого двигателя есть кнопки “Пуск” и “Стоп” для запуска и остановки двигателя.
Запуск / остановка 2 двигателей
Запуск и остановка двигателей могут быть реализованы с помощью функций фиксации или установки/сброса, о которых я говорил ранее в этом руководстве. В этом примере я буду использовать фиксацию с помощью инструкции examine if closed (normally open).
Вы можете удивиться, почему я выбрал именно фиксацию, а не установку/сброс катушек. Я сделал это потому, что с помощью этих простых инструкций мы можем быстро реализовать логику.
Первые условия для кнопок “Пуск” и “Стоп” для каждого двигателя – это, конечно, условия для запуска или остановки двигателя. Мы должны рассмотреть условия для двигателя. А поскольку двигатель может находиться в двух состояниях, нам нужно рассмотреть условия для обоих этих состояний:
ЗАПУСК И ОСТАНОВКА
Двигатель (активный)
СТОП
Двигатель (неактивный)
Поскольку двигатель может находиться только в двух различных состояниях, нам нужно рассмотреть только условия, при которых двигатель активируется. Потому что если эти условия ложны, двигатель будет неактивен.
Мы также можем добавить функциональность защелки, которой будут являться сами двигатели:
ЗАПУСК ИЛИ ОСТАНОВКА ДВИГАТЕЛЯ
Двигатель (активный)
Здесь важно заметить, что мы разложили описание функции на логические элементы. Каждая из кнопок и мотор представляют собой условия для состояний мотора. Между ними находятся логические отношения.
Эти логические связи можно с легкостью реализовать с помощью лестничной логики. Ведь каждое из этих логических отношений может быть переведено в лестничную логику.
ИЛИ и И с помощью лестничной логики
Логическая связь между кнопкой запуска и самим двигателем – ИЛИ. Либо кнопка пуска, либо двигатель приводят двигатель в активное состояние.
В лестничной логике логика ИЛИ реализуется с помощью параллельного соединения двух инструкций:
Логика ИЛИ реализована с помощью лестничной логики в виде параллельного соединения.
С другой стороны, кнопка “Стоп” должна быть не нажата, чтобы двигатель продолжал работать. Но логическая связь между пуском и двигателем, а также кнопкой “стоп” – это И. Потому что для того, чтобы двигатель был активирован, должны быть истинными другие условия запуска, а не кнопка “стоп”.
Логика AND реализуется с помощью лестничной логики как последовательное соединение инструкций:
Логика AND реализована с помощью лестничной логики в виде последовательного соединения.
Одним из главных преимуществ лестничной логики является то, что вы можете графически построить логику. Ведь если следовать по линиям слева направо в каждой сети, то можно увидеть логические связи между инструкциями.
ИЛИ всегда имеет два варианта, а значит, и линии. У AND только один вариант и, следовательно, только одна линия.
Логический гейт NOT с лестничной логикой
Остается еще одна логическая связь между вышеуказанными условиями. Чтобы двигатель был активен, кнопка “Стоп” не должна быть нажата. Для этого мы будем использовать логику NOT.
Логика NOT или отрицание может быть реализована с помощью отрицаемого контакта либо в лестничной логике, либо в виде отрицаемого физического контакта. Эти инструкции также известны как инструкции “исследовать, если открыто” или “нормально закрыто”.
Логические ворота NOT Gate, сделанные с помощью функции Examine if Open в лестничной логике
Как я уже говорил в первой части этого учебника по лестничной логике, я не буду реализовывать кнопку “Стоп” с помощью инструкции examine if open PLC из соображений безопасности. Вместо этого я буду использовать нормально замкнутый контакт в качестве кнопки “стоп” и, таким образом, отрицать логику. Говоря иначе, физический нормально замкнутый контакт будет составлять логику НЕ для кнопки “Стоп”.
Вот как в итоге будет выглядеть лестничная логика после реализации логических связей:
Блокировка с помощью лестничной логики
Конечно, эта часть лестничной логики предназначена только для одного двигателя. В нашем примере у нас было два двигателя. Поэтому полная лестничная логика будет выглядеть следующим образом:
По крайней мере, нам нужно реализовать блокировку. И хотите верьте, хотите нет – блокировку тоже можно рассматривать как логику.
На самом деле, ее довольно просто реализовать, если думать о ней как о логике. Ведь единственное, что нужно для блокировки двигателей, – это одно дополнительное условие. Это условие будет отрицательным, поскольку нам нужно, чтобы двигатель не был активен, когда другой активен. Таким образом, чтобы двигатель 1 был активен, двигатель 2 не должен быть активен, и наоборот:
START1 OR MOTOR1 AND NOT STOP1 AND NOT MOTOR2Motor 1 (active)
START2 OR MOTOR2 AND NOT STOP2 AND NOT MOTOR1Motor 2 (active)
Поскольку мы добавили еще одно условие в логическую связь И с другой логикой, мы можем реализовать ее в лестничной логике с последовательным соединением отрицаемого контакта:
Это был простой пример того, как строить программы ПЛК на лестничной логике, разбивая проблему на реальные логические связи. Но эти логические связи можно использовать не только с нормально открытыми и нормально закрытыми командами. Они могут быть использованы со многими различными инструкциями ПЛК – даже со счетчиками и таймерами.
Суть этого урока в том, что вы научитесь строить лестничную логику. Поэтому сейчас ваша очередь. Чуть ниже я сделал упражнение по лестничной логике, чтобы вы могли попрактиковаться.
Приступайте и попробуйте решить эту задачу. Вы можете использовать любое программное обеспечение для построения лестничной логики или просто нарисовать лестничную логику от руки. Постарайтесь разложить упражнение на логику, о которой вы узнали из этого урока.
Упражнение по логике лестничных диаграмм 1: блокировка
Функция: Запуск / остановка 3 двигателей, но только 2 двигателя могут работать одновременно. Например, если работает двигатель 2 и двигатель 3, вы не сможете запустить двигатель 1.
Входы:
Function | Hardware | PLC Address | Tag Name |
Start Motor 1 | Momentary Push Button (N.O.) | I0.0 | START1 |
Start Motor 2 | Momentary Push Button (N.O.) | I0.1 | START2 |
Start Motor 3 | Momentary Push Button (N.O.) | I0.2 | START3 |
Stop Motor 1 | Momentary Push Button (N.C.) | I0.3 | STOP1 |
Stop Motor 2 | Momentary Push Button (N.C.) | I0.4 | STOP2 |
Stop Motor 3 | Momentary Push Button (N.C.) | I0.5 | STOP3 |
Входы:
Function | Hardware | PLC Address | Tag Name |
Motor 1 | Motor Relay | Q0.0 | MOTOR1 |
Motor 2 | Motor Relay | Q0.1 | MOTOR2 |
Motor 3 | Motor Relay | Q0.2 | MOTOR3 |
Надеюсь, вам понравилось первое упражнение и вы чему-то научились.
В этом упражнении появилась еще одна проблема, которая приведет нас к следующим инструкциям лестничной логики. Проблема заключается не столько в самой лестничной логике, сколько в кнопках, подключенных к входам.
Один выстрел для краев сигнала
Обычно предполагается, что оператор нажимает кнопки “пуск” и “стоп” только один раз – и на короткое время. Но оператор может удерживать кнопки нажатыми в течение более длительного времени, или же кнопка может просто застрять при нажатии. Это типичная аппаратная проблема, которая повлияет на нашу программу ПЛК.
Если кнопка остановки одного из двигателей каким-то образом застрянет, вы не сможете запустить двигатель. На самом деле, такая проблема часто встречается, когда в качестве входов ПЛК используются кнопки с кратковременным нажатием.
Но не волнуйтесь. У этой проблемы есть решение. К счастью для нас, существуют инструкции лестничной логики, которые могут решить эту проблему. Они называются “один выстрел“.
Обнаружение нарастающего фронта импульса
Теперь настало время для еще одной инструкции лестничной логики. Я познакомлю вас с первым типом инструкции “одного выстрела” – обнаружением нарастающего фронта, R_TRIG или обнаружением положительного фронта. На некоторых платформах, таких как Allen Bradley, эта инструкция известна как одномоментный подъем или просто OSR.
Как следует из названий, эти инструкции лестничной логики смотрят на нарастающий фронт цифрового сигнала. Это означает, что они смотрят только на изменение цифрового сигнала от 0 до 1.
Вот иллюстрация положительных фронтов цифрового сигнала:
Положительные фронты цифрового сигнала.
Длина сигнала не имеет значения, потому что мы смотрим только на фронт или изменение состояния сигнала. По этой причине эти инструкции лестничной логики для обнаружения нарастающих фронтов идеально подходят для кнопки “Пуск” и “Стоп” в предыдущем примере.
Положительный краевой контакт и катушка
Вы уже познакомились с инструкцией “нормально открыт” или “проверить, если закрыт”. Эта инструкция оценивает состояние бита. Если состояние бита равно 1 или true, то результат оценки также будет равен 1 или true.
Контакт определения положительного края очень похож на инструкцию examine if closed. Фактически, у него такой же символ, только в белом пространстве стоит буква P:
Также немного отличается функциональность. Потому что эта инструкция оценивает не состояние бита, а изменение состояния бита. Положительное изменение или изменение с 0 на 1, если быть более точным.
Так вот, поскольку эта инструкция рассматривает только изменение состояния бита, она будет иметь значение true только в течение одного времени сканирования. Потому что если состояние бита равно 0, а в следующее короткое время оно станет 1, то инструкция будет иметь значение true.
В течение следующего времени сканирования состояние этого бита, вероятно, все еще будет равно 1. И поскольку состояние бита не изменится, инструкция будет иметь значение 0 или false.
Именно по этой причине такие инструкции называются одноразовыми. Они оценивают 1 или true только за то же время сканирования, что и изменение состояния. Вот как работает эта инструкция в замедленном режиме:
Обнаружение положительного фронта импульса в логике Ladder Logic в течение времени сканирования ПЛК
Как видите, эта инструкция выдает импульс только в момент сканирования, когда происходит положительный переход.
Наконец, обнаружение положительного фронта импульса может быть выполнено в виде катушки, а не контакта:
Он обладает точно такой же функциональностью, за исключением того, что это катушка.
Функциональный блок R_TRIG
Обнаружение положительного или нарастающего фронта импульса можно также выполнить с помощью функционального блока. Он называется R_TRIG и является стандартной инструкцией ПЛК. Я не буду подробно рассказывать о том, как она работает, поскольку я уже описывал ее в статье о диаграмме функциональных блоков. Она работает практически так же, как и контакт положительного фронта.
Обнаружение падающего края
Как и в случае с положительным фронтом, вы также можете найти инструкцию для обнаружения отрицательного фронта. Естественно, они называются обнаружением отрицательного фронта, обнаружением падающего фронта или F_TRIG. Allen Bradley называет их одномоментным падением или просто инструкцией OSF.
Общим для всех этих инструкций является то, что они ищут изменение состояния сигнала с 1 на 0. Вот иллюстрация отрицательного или падающего фронта цифрового сигнала:
Обнаружение падающих краев – это функциональность, которая может быть очень полезной. Например, с их помощью можно определить, когда что-то выключается.
Контакт с отрицательным краем и катушка
Обнаружение отрицательного края можно найти как в виде контакта, так и в виде катушки. И снова они называются однократными, потому что активны только в то же время сканирования, когда происходит переход от 1 к 0.
В зависимости от того, где в вашей лестничной логике вам нужно обнаружить отрицательный фронт, вы можете использовать любой из них.
Типичное применение этой инструкции – когда нужно запустить что-то, когда другое останавливается. Например, это может быть нагревательный элемент и два вентилятора. Когда нагревательный элемент работает, один из вентиляторов тоже должен работать. Но как только нагревательный элемент выключится, второй вентилятор должен заработать для более быстрого охлаждения.
Вы можете попробовать решить этот пример в упражнении 3 по лестничной логике и посмотреть, можно ли использовать обнаружение отрицательного фронта для запуска второго вентилятора.
Функциональный блок F_TRIG
Опять же, вы найдете функциональный блок для обнаружения отрицательного или падающего фронта. Он называется F_TRIG и, по сути, работает так же, как контакт отрицательного фронта. Вы можете прочитать все о F_TRIG здесь.
Учитывая всю эту информацию, я думаю, что настало время для упражнений. На мой взгляд, лучший способ обучения – это решение задач. В этих упражнениях вы должны будете использовать обнаружение нарастающего и спадающего фронта импульса. Но перед этим вам нужно знать еще одну вещь.
Помните, что инструкции one-shot активны только в течение одного времени сканирования. Если вы хотите использовать их для запуска чего-то, что должно выполняться в течение более длительного времени, вам понадобится либо защелка, либо сделать это с помощью set / reset. В противном случае вы рискуете активировать выход только на одно время сканирования.
Вот первое упражнение для тренировки обнаружения нарастающего фронта импульса:
Упражнение по лестничной логике 2: Восходящий фронт
Функции: Кнопки “Пуск” и “Стоп” используются для запуска и остановки двигателя. Но убедитесь, что кнопки могут запускать и останавливать двигатель только по положительному или нарастающему фронту импульса.
Входы:
Function | Hardware | PLC Address | Tag Name |
Start Button | Momentary Push Button (N.O.) | I0.0 | START |
Stop Button | Momentary Push Button (N.C.) | I0.1 | STOP |
Выходы:
Function | Hardware | PLC Address | Tag Name |
Motor | Motor Relay | Q0.0 | MOTOR |
А для обнаружения падающего фронта – вот еще одно упражнение:
Упражнение 3: Падающий край
Функции: Кнопка “старт-стоп” включает и выключает нагревательный элемент и вентилятор. Когда нагревательный элемент выключается, должен включиться второй вентилятор. Второй вентилятор выключится, как только включится нагревательный элемент и вентилятор.
Входы:
Function | Hardware | PLC Address | Tag Name |
Start Button | Momentary Push Button (N.O.) | I0.0 | START |
Stop Button | Momentary Push Button (N.O.) | I0.1 | STOP |
Выходы:
Function | Hardware | PLC Address | Tag Name |
Heating | Heating Element Relay | Q0.0 | HEATING |
Fan 1 | Fan Motor Relay | Q0.1 | FAN1 |
Fan 2 | Fan Motor Relay | Q0.2 | FAN2 |
Эти два упражнения должны были научить вас использовать однозадачные инструкции, чтобы предотвратить повторение событий более одного раза.
Перед завершением второй части моего учебника по лестничной логике я хотел бы дать вам последнее упражнение. Ведь в этой части вы узнали все о построении логики. Так что давайте посмотрим, сможете ли вы перевести логическое выражение в лестничную логику:
Логическая лестница Упражнение 4: Логика
Функции: Реализуйте следующую логику для клапана и выхода двигателя:
VALVE:
(START_V AND NOT SENSOR1) OR VALVE AND NOT STOP_V AND NOT MOTOR
MOTOR:
START1_M OR MOTOR AND START2_M OR NOT VALVE AND NOT STOP_M
Inputs:
Function | Hardware | PLC Address | Tag Name |
Start Button Valve | Momentary Push Button (N.O.) | I0.0 | START_V |
Stop Button Valve | Momentary Push Button (N.C.) | I0.1 | STOP_V |
Sensor | Digital PNP Sensor | I0.2 | SENSOR1 |
Start 1 Button Motor | Momentary Push Button (N.O.) | I0.3 | START1_M |
Start 2 Button Motor | Momentary Push Button (N.O.) | I0.4 | START2_M |
Stop Button Motor | Momentary Push Button (N.C.) | I0.5 | STOP_M |
Outputs:
Function | Hardware | PLC Address | Tag Name |
Valve | Electrical Valve | Q0.0 | VALVE |
Motor | Motor Relay | Q0.1 | MOTOR |
Это все, что у меня было для этой второй части моего учебника по лестничной логике. Надеюсь, вы узнали немного о построении логики с помощью лестничной логики. Я посоветую вам продолжать заниматься логикой и решать задачи с помощью лестничной логики. Только в этом случае построение логических решений станет для вас естественным.
Пожалуйста, поделитесь этим уроком или оставьте комментарий ниже и дайте мне знать, что вы думаете!