Событийно-управляемая логика 

Событийно-управляемая логика

2.9.2

В комбинаторной логике состояния выходов определяются исключительно входными сигналами. В собьгтитшо-управляемой логике (известной также как схема последовательности) состояние выхода зависит не только от состояния входов, но и от того, что с ним произошло до этого. Поэтому невозможно составить таблицу истинности, на основании которой можно было бы получить требуемую логическую схему.

Рассмотрим, например, простую схему пускового устройства двигателя, изображенную на рис. 2.49 (а). Если ни одна кнопка не нажата, двигатель должен быть включен или выключен в зависимости от того, в каком состоянии он находился до этого. Эта ситуация может быть представлена в виде рис. 2.49 (б), известного под названием диаграмма переходов состояний (для краткости ее часто называют просто диаграммой состояний).

Квадратные блоки соответствуют состояниям, в которых может находиться система (т. е. двигатель должен быть включен или выключен), а стрелками обозначены переходы, заставляющие систему изменить состояние. Если двигатель включен, то нажатие кнопки «стоп» приведет к остановке двигателя. Черта над сигналом (например, StopPBOK) означает, что этот сигнал отсутствует; отметим связь иежцу положением кнопки «стоп» и значением соответствующего сигнала. Обычно принято состояния обозначать цифрами, а переходы — буквами.

Диаграммы переходов состояний можно построить из элементов памяти, количество которых на единицу меньше, чем число состояний, причем одно состояние по умолчанию подразумевает отсутствие других. Таким образом, для изображения диаграммы перехода состояний в примере с пусковым устройством двигателя (рис. 2.49) необходим всего один элемент памяти (например, защелка или SR-триггер).

Рис. 2.49. Диаграмма перехода состояний: (а) пусковое устройство двигателя; (б) диаграмма перехода состояний; (в) таблица выхода

На рис. 2.50 представлен более сложный пример, взятый из реальной жизни (дозировка негашеной извести). Известь заранее установленного веса засыпается в дозатор, подготовленный для очередной разгрузки, которая начинается (что неудивительно) с нажатия соответствующей кнопки. После этого защитный чехол опускается (чтобы уменьшить распыление извести) и известь выгружается. После разгрузки защитный чехол возвращается в исходное положение и дозатор наполняется в очередной раз. Аварийная кнопка позволяет прервать разгрузку, а ключ разрешения наполнения останавливает подачу извести в дозатор.

Существуют две ситуации, нарушающие нормальную работу установки: невозможность получить вовремя требуемый вес партии (из-за «заклинивания» материалом подающего механизма) и вероятность получить нулевой вес очередной партии после разгрузки дозатора (также к определенному моменту времени и по той же причине). В каждом из этих случаев система должна быть переведена из автоматического режима работы в ручной, чтобы можно было определить причину неисправности.

Теперь мы можем изобразить диаграмму состояний — она представлена на рис. 2.50 (б). Рекомендуется, хотя это и не обязательно, маркировать основной путь последовательными цифрами (для состояний) и буквами (для переходов). Состоянием по умолчанию является такое состояние, которое будет вводить систему из ручного режима работы в автоматический, и при его выборе требуется крайняя осторожность. В данном случае наиболее критичным является состояние «подача»; если дозатор уже заполнен, система немедленно перейдет в состояние 1 (готовность); если нет, то дозатор будет заполняться. Выбор любого другого состояния по умолчанию может привести к бесполезному циклу перехода через все состояния при отсутствии материала в дозаторе.

К определению переходов также следует подходить с осторожностью, так как параллельные пути обычно недопустимы. Если переход А был определен как «Подача завершена», а переход G как «Время ожидания OR подача не разрешена», то система должна работать правильно, но по какому-либо стечению обстоятельств однажды оба сигнала появятся одновременно, что нарушит нормальную работу системы и приведет в большое недоумение программиста.

Правильным определением перехода А является:

Подача завершена AND время ожидания не превышено AND подача разрешена, а для перехода G:

Время ожидания превышено OR подача не разрешена.

Рис. 2.50. Диаграмма перехода состояний для реального объекта: (а) схема объекта; (б) диаграмма перехода состояний; (в) таблица выхода

Это отдает переходу в состояние «неисправность» приоритет по сравнению с нормальным переходом. Аналогичные рассуждения применимы к переходам F, D и Н.

Теперь можно сформировать таблицу, связывающую выходы с состояниями. Это достаточно просто, и результат представлен на рис. 2.50 (в).

Следующий этап заключается в преобразовании диаграммы состояний в программу для ПЛК. Шаги, проделанные нами до сих пор, являются общими для всех методов программирования ПЛК. Мы получим полную программу в формате многоступенчатой схемы, но каждая операция должна быть представлена в эквивалентном логическом формате.

Программа в значительной степени основана на идее прогона программы, рассмотренной в разд. 2.2. Разбив программу на четыре области в соответствии с диаграммой состояний, как показано на рис. 2.51, мы можем контролировать порядок выполнения каждого шага. В действительности разбивка программы на модули вида рис. 2.51 не является столь критичной, главное — это хранить переходы и состояния в отдельных областях и не смешивать их. Разбивка программы, полученной на основе диаграммы состояний, на отдельные модули является одним из принципов методики EDDI (Error Detection and Diagnostic Indication — обнаружение ошибок и диагностическая индикация), рассматриваемой в разд. 8.5.7.

Программирование начинается с выбора режима работы (автоматический/ручной); это обеспечивается простым звеном на рис. 2.52. Автоматический режим разрешен только тогда, когда нет неисправностей и защитный чехол поднят.

Далее предстоит заняться переходами, первые три из которых показаны на рис. 2.53. Они достаточно очевидны и практически не нуждаются в комментариях. Заметим, что первый контакт в каждом звене представляет состояние, поэтому все, что необходимо, — это иметь информацию о значениях входов в нужных местах последовательности.

Собственно состояния приведены на рис. 2.54. За исключением состояния 0, для всех состояний и выбора режима работы (ручной/автоматический) использованы простые триггеры-защелки, так что после отказа источника питания система возобновит работу в ручном режиме.

В итоге мы получаем выходы, представленные на рис. 2.55. Выход активизируется соответствующим состоянием(ями) в автоматическом режиме или нажатием нужной кнопки при ручном управлении.

Рис. 2.51. Прогон программы и диаграмма перехода состояний
Рис. 2.52. Выбор режима работы (ручной/автоматический)
Рис. 2.53. Первые три перехода
Рис. 2.54. Три из шести состояний

Метод диаграммы состояний является весьма эффективным, но он может привести к путанице, если не понимать его основной философии. Наиболее часто приводимый аргумент заключается в том, что этот метод требует использования гораздо большего количества звеньев или логических элементов, чем при непосредственном программировании относительно выходов. Это действительно так, но программирование относительно выходов может привести к очень запутанным и с трудом воспринимаемым программам. На рис. 2.56 приведена схема,

Рис. 2.55. Два из выходов системы
Рис. 2.56. Пример макаронного программирования, соответствующий состоянию 2

соответствующая состоянию 2 нашей диаграммы состояний. В ней смешаны операции, имеющие место как при ручном, так и при автоматическом управлении, и ее действие отнюдь не является очевидным (подобный прием известен как макаронное программирование). Проблемы могут также возникнуть, если переходы совершаются в направлении против хода программы, как, например, переход Е на рис. 2.50 (б). Если не предусмотреть соответствующие меры предосторожности, последовательность операций, ориентированная исключительно на выходы, может запросто прерваться — возможно, произойдут одновременно два события (перехода) или, наоборот, вообще ни одного.

Метод прямого программирования также обладает тем недостатком, что в программу трудно вносить изменения, тогда как это достаточно просто сделать при использовании диаграммы состояний. Предположим (как часто бывает в реальной системе), что требуется добавить вентилятор для удаления пыли, чтобы уменьшить ее распространение. Это должно происходить в течение разгрузки и еще примерно одну минуту после окончания разгрузки, до того как чехол будет поднят.

Новая диаграмма состояний показана на рис. 2.57. Все, что нужно сделать, — это добавить новое состояние 6 (вытяжка по окончании цикла работы). (На практике все состояния и переходы необходимо переобозначить, чтобы сохранить последовательность номеров для состояний и букв для переходов, но мы показываем их соответственно ситуации изменения/проверки.) Вентилятор должен быть включен в состоянии 3 или в состоянии 6. Поэтому в программу вносятся простые изменения: это новый переход J и новое состояние 6, изменения в состоянии 0 (добавление контакта —]/[— для состояния 6) и в состоянии 4 (вход через J, а не через D), добавление 1 -минутного таймера (для перехода J) и новый выход для запуска вентилятора.

Формы диаграмм состояния устанавливаются Международной электротехнической комиссией (IEC) и Британским институтом стандартов (BSI), а также уже действует французский стандарт Grafset. Все они в основном идентичны методике, рассмотренной выше, но вводят идею использования параллельных путей, которые могут быть задействованы одновременно. Схема, представленная на рис. 2.58 (а), называется дивергенцией (разветвлением): состояние 0 может привести к состоянию 1 при выполнении условия s или к состоянию 2 при выполнении условия t, причем переходы s и t являются взаимоисключающими. Это соответствует диаграммам состояния, рассмотренным выше.

Рис. 2.58 (б) демонстрирует одновременную дивергенцию, когда состояние 0 приводит одновременно к состоянию 1 и к состоянию

Рис. 2.57. Внесение изменений в диаграмму перехода состояний

2 в случае перехода и. Состояния 1 и 2 далее могут запускать параллельное выполнение следующих последовательностей.

Рис. 2.58 (в) опять-таки соответствует диаграммам состояния, рассмотренным выше; эта схема известна под названием конвергенция (объединение). Последовательность может перейти от состояния 5 к состоянию 7, если истинным является переход V, или от состояния 6 к состоянию 7, если истинным является переход W.

Рис. 2.58. Символы стандарта Grafset: (а) дивергенция; (б) одновременная дивергенция; (е) конвергенция; (г) одновременная конвергенция

Схема на рис. 2.58 (г) называется одновременной конвергенцией (это отражено двойной горизонтальной линией): переход к состоянию 7 будет совершен, если левая ветвь находится в состоянии 5 и правая ветвь находится в состоянии 6 и переход х является истинным.

Диаграмма состояния является настолько эффективным методом, что большинство ПЛК средних размеров включают ее в той или иной форме в язык программирования. Фирма Telemecanique дает ей название Grafcet (с буквой «с»), другие используют имена Sequential Function Chart (SFC, фирма Allen Bradley) или Function Block (Siemens). К этому вопросу мы вернемся в следующей главе.

Даже простой ПЛК Mitsubishi F2 поддерживает диаграммы состояния посредством инструкций STL (Stepladder). Они имеют префикс S и номера от S600 до S647. Их особенность заключается в том, что, если устанавливается одна или несколько таких инструкций, все другие, действовавшие до этого, автоматически сбрасываются. Инструкция RET завершает выполнение последовательности. Диаграмма состояния на рис. 2.59 (а) преобразуется в многоступенчатую схему на рис. 2.59 (б), которой будет соответствовать программа (представлены первые пять инструкций):

LD X 400
S s 601
STL s 601
OUT Y 431
LD X 401
S s 602 и т. д.

Если программа не содержит ветвлений и последовательность операций представляет собой простой цикл (функционирующий наподобие шагового искателя), то выполнение последовательности может задаваться счетчиком, который выбирает требуемый шаг. Счетчик скачком увеличивает свое значение, если все переходы для текущего шага выполнены. В ПЛК GEM-80 имеется инструкция SEQR (sequence — последовательность), которая действует как 16-позиционный шаговый искатель.

PLC-5 имеет две инструкции, выполняющие ту же самую роль. Их имена — Sequencer Input (SQI) и Sequencer Output (SQO), и они задействуются счетчиком, который задает текущий шаг (или состояние). Каждая инструкция имеет таблицу, в которой одна с