Самыми элементарными объектами программирования лестничных диаграмм являются контакты и катушки, предназначенные для имитации контактов и катушек электромеханических реле.
Контакты и катушки представляют собой дискретные элементы программирования, работающие с логическими состояниями переменных (1 и 0; включено и выключено; истинно и ложно).
Каждый контакт в программе ПЛК лестничной схемы представляет собой чтение одного бита в памяти, а каждая катушка представляет запись одного бита в памяти.
Дискретные входные сигналы ПЛК от реальных переключателей считываются программой лестничных диаграмм с помощью контактов, привязанных к этим входным каналам.
В устаревших системах ПЛК каждый дискретный входной канал имеет определенный адрес, который необходимо применить к контакту(ам) в этой программе.
В современных системах ПЛК каждый дискретный входной канал имеет имя тега, созданное программистом, которое применяется к контакту(ам) в программе.
Аналогичным образом, дискретные выходные каналы, на которые ссылаются символы катушек на лестничной диаграмме, также должны иметь некоторую форму адреса или метки имени тега.
Для иллюстрации представим себе построение и программирование резервной системы обнаружения пламени для контроля состояния пламени горелки с помощью трех датчиков.
Целью данной системы будет индикация «зажженной» горелки, если хотя бы два из трех датчиков покажут пламя.
Если только один датчик указывает на пламя (или если ни один из датчиков не указывает на пламя), система объявит горелку не зажженной.
Статус горелки будет визуально обозначаться лампочкой, которую операторы смогут легко видеть внутри диспетчерской.
Схема подключения нашей системы показана на следующей схеме:
Каждый датчик пламени выдает сигнал постоянного напряжения, указывающий на обнаружение пламени на горелке, либо включенной (24 В постоянного тока), либо выключенной (0 В постоянного тока).
Эти три дискретных сигнала напряжения постоянного тока воспринимаются первыми тремя каналами карты дискретного ввода ПЛК.
Индикаторная лампа представляет собой лампочку на 120 В, поэтому ее питание должно осуществляться от карты дискретного выхода переменного тока, показанной здесь в последнем слоте ПЛК.
Чтобы сделать лестничную программу более читабельной, мы назначим имена тегов (символические адреса) каждому входному и выходному биту ПЛК, описывая его реальное устройство в легко интерпретируемом формате.
Мы обозначим первые три дискретных входных канала как датчик IN A, датчик IN B и датчик IN C, а выход — как горит горелка OUT.
Здесь показана лестничная программа, позволяющая определить, обнаруживают ли по крайней мере два из трех датчиков пламя, с именами тегов, относящимися к каждому контакту и катушке:
Последовательно соединенные контакты в лестничной схеме выполняют логическую функцию И, а параллельные контакты выполняют логическую функцию ИЛИ. Таким образом, эту программу обнаружения пламени «два из трех» можно словесно описать так:
«Горелка горит, если либо A и B, либо B и C, либо либо A и C»
Альтернативный способ выразить это — использовать обозначения булевой алгебры, где умножение представляет функцию И, а сложение представляет функцию ИЛИ:
Burner_lit = AB + BC + AC
Еще один способ представить эту логическую связь — использовать символы логических элементов:
Чтобы проиллюстрировать, как будет работать эта программа, мы рассмотрим случай, когда датчики пламени B и C обнаруживают пламя, а датчик A — нет (Примечание 1).
Это представляет собой два из трех хороших условий, и поэтому мы ожидаем, что ПЛК включит индикатор «Горелка горит», как запрограммировано.
Со стороны стойки ПЛК мы видим, как на плате дискретного входа загораются светодиоды-индикаторы датчиков B и C, а также светодиод-индикатор выходного канала лампы:
Примечание 1. Наиболее вероятной причиной того, что один из двух датчиков пламени может не обнаружить наличие пламени, является некоторая форма смещения или загрязнения датчика пламени.
Фактически, это веская причина для использования системы обнаружения пламени 2 из 3, а не симплексной схемы детектора (1 из 1): сделать систему более устойчивой к случайным проблемам с датчиками без ущерба для горелки. безопасность.
Эти два входных канала, находящихся под напряжением, «устанавливают» биты (состояние 1) в памяти ПЛК, представляющие состояние датчиков пламени B и C. Бит датчика пламени A будет «чистым» (состояние 0), поскольку соответствующий входной канал обесточен.
Тот факт, что светодиод выходного канала включен (и горит индикаторная лампа «Горелка горит»), говорит нам, что программа ПЛК «установила» соответствующий бит в регистре выходной памяти ПЛК в состояние «1».
Отображение битов входного и выходного регистра показывает состояния «установки» и «сброса» ПЛК в данный момент времени:
Исследуя программу Ladder Diagram с включенной индикацией состояния, мы видим, что только средняя пара контактов передает «виртуальную мощность» на выходную катушку:
Напомним, что целью контакта в программе ПЛК является чтение состояния бита в памяти ПЛК.
Эти шесть «виртуальных контактов» считывают три входных бита, соответствующие трем датчикам пламени.
Каждый нормально разомкнутый «контакт» «замыкается», когда соответствующий бит имеет значение 1, и «размыкается» (переходит в нормальное состояние), когда соответствующий бит имеет значение 0.
Таким образом, мы видим здесь, что два контакта, соответствующие датчику A, появляются без подсветки (что означает отсутствие «проводимости» в схеме виртуального реле), поскольку бит для этого входа сброшен (0).
Два контакта, соответствующие датчику B, и два контакта, соответствующие датчику C, отображаются выделенными (представляющими «проводимость» в виртуальной схеме), поскольку оба их бита установлены (1).
Напомним также, что назначение катушки в программе ПЛК — запись состояния бита в память ПЛК.
Здесь «активированная» катушка устанавливает бит для выхода 0 ПЛК в состояние «1», тем самым активируя реальный выход и отправляя электроэнергию на лампу «Горелка горит».
Обратите внимание, что цветовое выделение не означает, что виртуальный контакт проводит виртуальную энергию, а лишь указывает на то, что он способен проводить энергию. Однако цветовая подсветка вокруг виртуальной катушки указывает на наличие виртуальной «мощности» в этой катушке.
Контакты и реле полезны не только для реализации простых логических функций, но также могут выполнять функции фиксации.
Очень распространенным применением этого в промышленных системах ПЛК является программа запуска/останова с фиксацией для управления электродвигателями с помощью кнопочных переключателей с мгновенным контактом.
Как и раньше, эта функциональность будет проиллюстрирована с помощью гипотетического примера схемы и программы:
В этой системе два кнопочных переключателя подключены к дискретным входам ПЛК, а ПЛК, в свою очередь, подает питание на катушку контактора двигателя посредством одного из своих дискретных выходов.
Контакт перегрузки подключается непосредственно последовательно с катушкой контактора, чтобы обеспечить защиту двигателя от перегрузки по току даже в случае отказа ПЛК, когда канал дискретного вывода остается под напряжением (примечание 2). Лестничная программа для этой системы управления двигателем будет выглядеть так:
Примечание 2. Хотя можно подключить контакт перегрузки к одному из дискретных входных каналов ПЛК, а затем запрограммировать виртуальный контакт перегрузки последовательно с выходной катушкой для остановки двигателя в случае тепловой перегрузки, эта стратегия будет основываться на ПЛК для выполнения функции безопасности, которую, вероятно, лучше выполняет проводная схема.
Нажатие кнопки «Пуск» активирует канал дискретного входа 6 ПЛК, который «замыкает» виртуальный контакт в программе ПЛК, обозначенный IN-переключателем «Пуск».
Нормально закрытый виртуальный контакт для входного канала 7 (кнопка «Стоп») по умолчанию уже закрыт, когда кнопка «Стоп» не нажата, поэтому виртуальная катушка будет получать «питание» при нажатии кнопки «Старт». нажата, а кнопка «Стоп» — нет.
Обратите внимание на герметичный контакт с той же маркировкой, что и на катушке: контактор OUT. На первый взгляд может показаться странным, что и контакт, и катушка в программе ПЛК имеют одинаковую маркировку (примечание 3), поскольку контакты чаще всего связаны с входами, а катушки с выходами, но это имеет смысл, если вы понимаете истинный смысл контакты и катушки в программе ПЛК: как операции чтения и записи битов в памяти ПЛК.
Катушка с надписью OUT contactor записывает состояние этого бита, а контакт с надписью OUT contactor считывает состояние того же бита. Цель этого контакта, конечно, состоит в том, чтобы зафиксировать двигатель во включенном состоянии после того, как человек-оператор отпустит палец с кнопки «Пуск».
Примечание 3. Очень распространенное заблуждение среди студентов, впервые изучающих программирование лестничных диаграмм ПЛК, заключается в том, что контакты всегда связываются с входами ПЛК, а катушки с выходами ПЛК, поэтому кажется странным, что контакт имеет ту же маркировку, что и выход. Однако это ложная ассоциация. В действительности контакты и катушки представляют собой инструкции чтения и записи, поэтому ПЛК может читать один из своих собственных выходных битов как часть некоторой логической функции. Что было бы действительно странно, так это маркировать катушку адресом входного бита или именем тега, поскольку ПЛК электрически не способен устанавливать реальный статус включения каких-либо входных каналов.
Этот метод программирования известен как обратная связь, где выходная переменная функции (в данном случае переменная обратной связи — выходной контактор) также является входом той же функции.
Путь обратной связи в программировании лестничных диаграмм является скорее неявным, чем явным, причем единственным признаком обратной связи является общее имя, общее для катушки и контакта.
Другие языки графического программирования (например, функциональные блоки) имеют возможность отображать пути обратной связи как соединительные линии между выходами и входами функций, но эта возможность не существует в лестничной диаграмме.
Пошаговая последовательность, показывающая работу и состояние этой простой программы, иллюстрирует, как работает герметичный контакт в ходе цикла запуска и остановки двигателя:
Эта последовательность помогает проиллюстрировать порядок оценки или порядка сканирования программы лестничной диаграммы. ПЛК читает лестничную диаграмму слева направо, сверху вниз в том же порядке, в котором человек читает предложения и абзацы, написанные на английском языке.
Однако, согласно стандарту IEC 61131-3, программа ПЛК должна оценивать (считывать) все входы (контакты) функции, прежде чем определять состояние выхода функции (катушки или катушек).
Другими словами, ПЛК не принимает никакого решения о том, как установить состояние катушки, пока не будут прочитаны все контакты, обеспечивающие питание этой катушки.
Как только статус катушки будет записан в память, все контакты, имеющие одно и то же имя тега, будут обновляться с этим статусом на последующих ступенях программы.
Шаг 5 в предыдущей последовательности особенно показателен. Когда человек-оператор нажимает кнопку «Стоп», активируется входной канал для IN-переключателя Stop, который «открывает» нормально замкнутый виртуальный контакт IN-выключателя Stop.
При следующем сканировании этой цепочки программы ПЛК оценивает все входные контакты (выключатель IN Start, переключатель IN Stop и контактор OUT), чтобы проверить их состояние, прежде чем решить, какое состояние записать в катушку контактора OUT.
Видя, что стоп-контакт переключателя IN был принудительно разомкнут в результате активации соответствующего дискретного входного канала, ПЛК записывает состояние «0» (или «Ложь») на катушку контактора OUT.
Однако контакт обратной связи выходного контактора не обновляется до следующего сканирования, поэтому на этапе 5 он по-прежнему выделяется цветом.
Потенциальная проблема этой системы в ее конструкции заключается в том, что человек-оператор теряет контроль над двигателем в случае обрыва проводки в любой из цепей кнопочного переключателя.
Например, если провод отвалился от винтового контакта цепи кнопочного переключателя «Пуск», двигатель не мог быть запущен, если он уже был остановлен.
Аналогичным образом, если провод отвалился от винтового контакта цепи кнопочного выключателя «Стоп», двигатель не мог быть остановлен, если он уже работал.
В любом случае обрыв проводного соединения действует так же, как «нормальное» состояние кнопочного переключателя, то есть удерживает двигатель в его текущем состоянии.
Для некоторых приложений этот режим отказа не будет серьезной проблемой. Однако во многих приложениях довольно опасно иметь работающий двигатель, который невозможно остановить.
По этой причине принято проектировать системы запуска/остановки двигателя несколько иначе, чем показано здесь.
Чтобы построить систему управления двигателем «при отказе» с помощью нашего ПЛК, мы должны сначала перемонтировать кнопочный переключатель, чтобы использовать его нормально замкнутый (НЗ) контакт:
Благодаря этому канал дискретного входа 7 остается активным, когда кнопка не нажата. При нажатии оператором кнопки «Стоп» контакт выключателя принудительно размыкается и входной канал 7 обесточивается.
Если провод выпадет из винтовой клеммы в цепи переключателя «Стоп», входной канал 7 обесточится точно так же, как если бы кто-то нажал кнопку «Стоп», что автоматически отключит двигатель.
Чтобы программа ПЛК работала правильно с этой новой проводкой переключателя, виртуальный контакт для переключателя IN Stop должен быть изменен с нормально закрытого (NC) на нормально разомкнутый (NO):
Как и раньше, виртуальный контакт остановки переключателя IN находится в «закрытом» состоянии, когда никто не нажимает переключатель «Стоп», что позволяет двигателю запуститься в любое время при нажатии переключателя «Пуск».
Аналогичным образом, виртуальный контакт остановки переключателя IN размыкается каждый раз, когда кто-то нажимает переключатель «Стоп», тем самым прекращая подачу виртуальной «мощности» на катушку контактора ВЫХОДА.
Хотя это очень распространенный способ создания систем запуска/остановки двигателя, управляемых ПЛК – с кнопочным переключателем НЗ и виртуальным контактом «Стоп» NO – студенты, плохо знакомые с программированием ПЛК, часто находят этот логический разворот запутанным.
Возможно, наиболее распространенной причиной этой путаницы является неправильное понимание «нормальной» концепции контактов переключателя, реальных или виртуальных. Виртуальный контакт остановки переключателя IN запрограммирован как нормально разомкнутый (НО), но обычно он находится в закрытом состоянии.
Напомним, что «нормальным» состоянием любого переключателя является его состояние в состоянии покоя без стимуляции, а не обязательно его состояние, когда процесс находится в «нормальном» рабочем режиме.
«Нормально открытый» виртуальный контакт IN-переключателя Stop обычно находится в закрытом состоянии, поскольку соответствующий ему входной канал обычно находится под напряжением благодаря нормально замкнутому контакту кнопочного переключателя, который передает реальную электрическую мощность на входной канал, в то время как никто нажимает переключатель.
Тот факт, что переключатель настроен как нормально разомкнутый, не обязательно означает, что он обычно находится в разомкнутом состоянии! Состояние любого контакта переключателя, реального или виртуального, зависит от его конфигурации (НО или НЗ) и приложенного к нему воздействия.
Еще одна проблема, связанная с реальными проблемами с проводкой, заключается в том, что будет делать эта система, если цепь катушки контактора двигателя разомкнется по какой-либо причине.
Разрыв цепи может возникнуть в результате падения провода с винтовой клеммы или из-за размыкания контакта тепловой перегрузки из-за перегрева. Проблема с нашей системой запуска/остановки двигателя в том виде, в котором она спроектирована, заключается в том, что она «не знает» о реальном состоянии контактора.
Другими словами, ПЛК «думает», что контактор будет под напряжением каждый раз, когда на канал дискретного выхода 2 будет подано напряжение, но на самом деле это может быть не так, если в цепи катушки контактора происходит обрыв.
Это может привести к опасной ситуации, если позже будет устранено открытое замыкание в цепи катушки контактора. Представьте себе, что оператор нажимает кнопку «Пуск», но замечает, что двигатель на самом деле не запускается.
Задаваясь вопросом, почему это может быть, он или она идет посмотреть на реле перегрузки, чтобы убедиться, что оно не сработало. Если он сработал и оператор нажимает кнопку «Сброс» на блоке защиты от перегрузки, двигатель немедленно запустится, поскольку дискретный выход ПЛК остается под напряжением все время после нажатия переключателя «Пуск».
Запуск двигателя сразу после сброса тепловой перегрузки может стать неожиданностью для эксплуатационного персонала, и это может быть весьма опасно, если кто-нибудь окажется рядом с оборудованием с приводом от двигателя во время его запуска.
Что было бы безопаснее, так это система управления двигателем, которая отказывается «фиксироваться», если на контактор не подается питание при нажатии кнопки «Пуск». Чтобы это было возможно, ПЛК должен иметь какой-то способ определения состояния контактора.
Чтобы ПЛК «знал» о реальном состоянии контактора, мы можем подключить контакт вспомогательного переключателя к одному из неиспользуемых дискретных входных каналов ПЛК, например:
Теперь ПЛК может определять состояние контактора в реальном времени через входной канал 5.
Мы можем изменить программу ПЛК, чтобы распознавать это состояние, назначив этому входу новое имя тега (дополнительный входной контактор) и используя нормально разомкнутый виртуальный контакт с этим именем в качестве герметичного контакта вместо бита выходного контактора:
Теперь, если на контактор по какой-либо причине не подается питание, когда оператор нажимает переключатель «Пуск», выход ПЛК не сможет зафиксироваться при отпускании переключателя «Пуск».
Когда обрыв в цепи катушки контактора устранен, двигатель не запустится сразу, а будет ждать, пока оператор снова не нажмет кнопку «Пуск», что является гораздо более безопасной рабочей характеристикой, чем раньше.
Особый класс виртуальной «катушки», используемый в лестничном программировании ПЛК, о котором следует упомянуть, — это «защелкивающаяся» катушка. Обычно они бывают двух видов: катушка установки и катушка сброса.
В отличие от обычной «выходной» катушки, которая положительно записывает бит в память ПЛК при каждом сканировании программы, катушки «установки» и «сброса» записывают бит в память только при включении виртуальной энергии. В противном случае биту разрешается сохранить свое последнее значение.
Очень простую программу запуска/остановки двигателя можно написать всего лишь с двумя входными контактами и двумя фиксирующими катушками (обе имеют одно и то же имя тега и записывают в один и тот же бит памяти):
Обратите внимание на использование нормально разомкнутого (НО) контакта кнопочного переключателя (снова!), без вспомогательного контакта, обеспечивающего индикацию состояния контактора для ПЛК. Это очень минимальная программа, показанная исключительно с целью проиллюстрировать использование фиксирующих катушек «установки» и «сброса» в программировании лестничных диаграмм ПЛК.
Катушки «Установка» и «Сброс» (называемые катушками «Фиксация» и «Разблокировка») являются примерами того, что известно в мире программирования ПЛК как сохраняемые инструкции. «Сохраняющая» инструкция сохраняет свое значение после того, как она фактически «обесточена» в «схеме» лестничной диаграммы.
Стандартная выходная катушка не удерживается, что означает, что она не «фиксируется» при обесточивании. Концепция сохраняемых и несохраняемых инструкций появится снова, когда мы будем изучать программирование ПЛК, особенно в области таймеров.
Обычно мы стараемся избегать использования нескольких катушек с одной и той же меткой в программе лестничной схемы ПЛК. Поскольку каждая катушка представляет команду «записи», несколько катушек с одинаковым именем представляют несколько операций «записи» в один и тот же бит в памяти ПЛК.
Здесь, при использовании катушек с фиксацией, конфликта нет, поскольку каждая из катушек записывает данные в бит контактора OUT только тогда, когда соответствующий контакт находится под напряжением. Пока одновременно нажимается только один из кнопочных переключателей, конфликта между катушками с одинаковыми названиями не возникает.
Возникает вопрос: что произойдет, если одновременно нажать оба кнопочных переключателя? Что произойдет, если на катушки «Установка» и «Сброс» одновременно будет подано напряжение? В результате бит контактора OUT сначала будет «установлен» (записан в значение 1), а затем «сброшен» (записан в значение 0) в том порядке, в котором две цепочки программы сканировались сверху вниз. .
ПЛК обычно не обновляют свои регистры дискретного ввода-вывода во время сканирования программы лестничной диаграммы (эта операция происходит либо до, либо после каждого сканирования программы), поэтому реальное состояние канала дискретного вывода будет таким, каким оно было указано в последней операции записи. , в данном случае «сброс» (0 или выкл.).
Даже если дискретный выход не «перепутан» из-за конфликтующих операций записи обмоток «Установка» и «Сброс», это могут быть и другие ступени программы, записанные между цепочками «Установка» и «Сброс».
Рассмотрим, например, случай, когда после цепочек «Установить» и «Сброс» были другие цепочки программы, считывающие для какой-то цели состояние бита контактора ВЫХОДА.
Эти другие цепочки действительно войдут в «замешательство», поскольку они увидят бит контактора OUT в состоянии «установлено», в то время как фактический дискретный выход ПЛК (и любые цепочки после цепочки «Сброс») увидят бит контактора OUT в состоянии «установлено». состояние «перезагрузки»:
По этой причине несколько (несохраняемых) выходных катушек с одним и тем же адресом памяти почти всегда являются ошибкой программирования, но даже сохраняющие катушки, которые предназначены для использования в согласованных парах, могут вызвать проблемы, если не предвидятся последствия одновременного включения.
Несколько контактов с одинаковыми адресами не представляют никакой проблемы, поскольку несколько операций «чтения» одного и того же бита памяти никогда не вызовут конфликта.
Стандарт программирования ПЛК IEC 61131-3 определяет контакты, чувствительные к переходу, а также более привычные «статические» контакты. Контакт, чувствительный к переходу, будет «срабатывать» только на время одного сканирования программы, даже если соответствующий ему бит остается активным.
В стандарте IEC определены два типа контактов лестничной схемы, чувствительных к переходу: один для положительных переходов, а другой для отрицательных переходов.
В следующем примере показана схема подключения, программа лестничной диаграммы и временная диаграмма, показывающая, как каждый тип контакта, чувствительного к переходу, работает при стимулировании реальным (электрическим) входным сигналом на дискретный канал:
When the pushbutton switch is pressed and the discrete input energized, the first test lamp will blink “on” for exactly one scan of the PLC’s program, then return to its off state.
The positive transition contact (with the letter “P” inside) activates the coil OUT test1 only during the scan it sees the status of IN test transition from “false” to “true,” even though the input remains energized for many scans after that transition.
Conversely, when the pushbutton switch is released and the discrete input de-energizes, the second test lamp will blink “on” for exactly one scan of the PLC’s program then return to its off state.
The negative-transition contact (with the letter “N” inside) activates the coil OUT test2 only during the scan it sees the status of IN test transition from “true” to “false,” even though the input remains de-energized for many scans after that transition:
It should be noted that the duration of a single PLC program scan is typically very short: measured in milliseconds. If this program were actually tested in a real PLC, you would probably not be able to see either test lamp light up, since each pulse is so short-lived.
Transitional contacts are typically used any time it is desired to execute an instruction just one time following a “triggering” event, as opposed to executing that instruction over and over again so long as the event status is maintained “true.”
Contacts and coils represent only the most basic of instructions in the Ladder Diagram PLC programming language.