Язык последовательных функциональных схем
Выход из цикла посредством инструкции EXIT
- Ключевое слово EXIT используется для остановки вычислений в цикле и продолжения с инструкции, следующей за ключевым словом конца цикла.
- Оно может быть использовано только внутри одного из трех циклов: WHILE, REPEAT или FOR.
- Оно прерывает выполнение ближайшего цикла, т.е. не останавливает выполнение других окружающих его циклов.
Теория конечных автоматов, используемая для формализации состояний сложных процессов управления, опирается на различные графические модели описания состояний. Одной из наиболее известных является модель, предложенная К. Петри, названная «Сети Петри» или диаграмма состояний, которая послужила теоретической основой языка последовательных функциональных схем.
Язык последовательных функциональных схем (Sequential Function Charts, или Grafcet – SFC) позволяет формулировать логику программы на основе чередующихся процедурных шагов и транзакций (условных переходов), а также описывать последовательно-параллельные задачи в понятной и наглядной форме.
Строго говоря, SFC не является языком программирования. Это средство проектирования прикладного программного обеспечения, которое всегда является комплексом большого числа программных единиц: программ, функциональных блоков, функций. Обеспечение параллельности выполнения программ, установление и контроль состояния порожденных процессов, обеспечение синхронизации по приему и обработке данных, описание однозначно понимаемых и заказчиком, и исполнителем состояний автоматизируемого процесса – все это возможно при использовании «языка программирования» SFC. Однако, SFC не имеет средств для описания шагов и переходов, которые могут быть выражены только средствами других языков стандарта IEC. Происхождение: Grafcet (Schneider).
Графическое описание последовательностных операций управляющих систем, а также различных встречающихся ситуаций выполняется с использованием графических символов.
Операции, связанные с шагами, обозначаются в общей форме типа «что должно быть сделано», когда шаги активированы. Последовательность активированных шагов в любой заданный момент времени определяет ситуацию в диаграмме языка SFC.
Шаг может быть связан с действиями, которые выполняются только в том случае, если шаг активен, бывают и пустые шаги.
Каждый переход имеет условия, которые проверяются при разрешенном переходе. Если условия перехода не указаны, то всегда предполагается, что они ложны (false).
Действия и условия перехода программируются на других языках – LD, IL, или ST.
Язык SFC использует следующие структурные элементы для создания программы: шаг (Step), переход (Transition), прыжок (Jump) и связи типа ответвления (Branch) и соединения (Joint).
Пример блока типа «Шаг» показан на рис.3.4. Шаг представляется блоком, содержащим имя шага. Имя шага должно быть уникальным для всей программы.
Шаг становится активным, когда предшествующий ему переход истинен, и при нормальных обстоятельствах становится неактивным, когда последующий за ним переход истинен.
Рис.3.4. Шаг
Действия, которые должны выполниться в то время, когда шаг активен, должны быть связаны с шагом. Действия объявляются в диалоге реквизитов инициализации шага.
Шагу либо не назначаются никакие действия, либо назначаются множественные действия. Шаг, которому не назначено действие, имеет функцию ожидания, т.е. он ждет до тех пор, пока переход, следующий за шагом, не станет истинным.
Действие – это выходная переменная с типом данных BOOL.
Действие может быть назначено выходу аппаратного обеспечения с использованием прямого адреса. В этом случае действие может служить сигналом разрешения для перехода, входным сигналом в FBD-секции и выходным сигналом для аппаратного обеспечения.
Действие может также применяться как входной сигнал в другой секции с использованием переменной. Эта переменная также называется переменной действия.
Изображение элемента «Переход» показано на рис.3.5. Переход указывает условие, которое передает управление от одного или нескольких шагов, предшествующих переходу, к одному или нескольким последующим шагам по направлению соответствующей связи. Переход является переменной с типом данных BOOL.
Рис.3.5. Элемент «Переход»
Переход разрешается, когда непосредственно предшествующие шаги активны. Переход вызывается, когда он разрешен и условие перехода истинно. Переходы с непосредственно предшествующими неактивными шагами не будут обрабатываться.
Пуск перехода дезактивирует все непосредственно предшествующие шаги, связанные с переходом, затем активизирует все непосредственно следующие шаги.
Если запущенный переход активизирует несколько шагов одновременно, последовательности, которым эти шаги принадлежат, называются параллельными последовательностями. После их одновременной активизации каждая из этих последовательностей выполняется независимо.
Связь. Связи являются соединениями между шагами и переходами. Обычно они автоматически создаются при размещении объектов. Однако при размещении объектов в ячейках, которые не находятся в непосредственной последовательности, логика должна быть явно установлена с помощью связи.
Рис. 3.4. Структурные элементы языка SFC
Язык SFC подразделяет секцию на отдельные логические последовательные этапы с использованием шагов и переходов, которые чередуются на функциональной диаграмме (рис. 3.5).
Рис. 3.5. Пример функциональной диаграммы SFC
Два шага никогда не могут быть соединены непосредственно; они должны всегда отделяться переходом.
Шаги и переходы связаны с помощью направленных связей. Последовательности активных сигнальных состояний обрабатываются по направленным связям, которые приводятся в действие переходами. Направление пошагового управления следует за направленными связями и начинается под предыдущим шагом к верхней части активного шага. Ветви обрабатываются слева направо.
Один специальный шаг в SFC-секции должен всегда определяться как шаг инициализации, который характеризует начальное состояние SFC-секции и показывается со сдвоенными линиями на границах. Шаг инициализации активен в начальном состоянии последовательности шагов инициализации, когда инициализируется программа, содержащая секцию.
Шаг может быть заменен прыжком. Последовательности шагов всегда ассоциируются с прыжком к другому шагу той же самой последовательности шагов. Это означает, что они выполняются циклически.
Каждый шаг имеет нулевое или большее количество действий. Шаги без действия идентифицируются как ждущий шаг. Каждый переход имеет условие перехода. После установления действия шаги могут быть очищены, только если действия предварительно удалены из шага.
В дополнение к этим структурным элементам в секции SFC может также размещаться текст. Текстовые объекты могут быть помещены только в пустые ячейки.
Одиночные последовательности. В одиночной последовательности чередование; шагов и переходов повторяется последовательно (рис. 3.6).
Рис. 3.6. Пример одиночной последовательности
Последовательный процесс перехода из шага S_10 в шаг S_11 будет осуществляться, только когда шаг S_10 находится в активном состоянии и когда условие перехода «a» истинно.
Прыжок. Прыжок позволяет программе продолжать работу из различного положения. Прыжки в параллельную последовательность или из параллельной последовательности невозможны.
Имеется два вида прыжков: прыжок последовательности и контур последовательности.
Прыжок последовательности является частным случаем альтернативного ответвления, где одно или несколько ответвлений не содержат шаги (рис. 3.7).
Рис. 3.7. Пример альтернативного ответвления с прыжком
Последовательный процесс перехода из шага S_10 через шаги S_11 и S_12 в шаг S_13 выполняется, только когда шаг S_10 является активным и условие перехода а истинно. Последовательный процесс перехода из шага S_10 прямо в шаг S_13 выполняется, только когда шаг S_10 является активным и условие «a» ложно, а условие перехода «b» истинно.
Контур последовательности (рис. 3.8) – это частный случай альтернативного ответвления, где одно или несколько ответвлений выполняют возврат к предыдущему шагу.
Рис. 3.8. Пример контура последовательности
Последовательный процесс перехода из шага S_11 в шаг S_10 выполняется, только если условие перехода «b» является ложным, а условие «c» – истинным.
Ответвления. Различают альтернативное ответвление и параллельное ответвление.
Альтернативное ответвление – это условное программирование ответвлений в потоке управления SFC-структуры.
В альтернативных ответвлениях шаг продолжается несколькими переходами под горизонтальной линией, которые являются различными процедурами (рис. 3.9).
Рис. 3.9. Пример альтернативного ответвления
Только один из этих переходов может функционировать в данный момент времени. Какое ответвление будет осуществляться, определяется результатом выполнения условия перехода для переходов, которые следуют за альтернативным ответвлением. Переходы ответвления обрабатываются слева направо. Если условие перехода истинно, остающиеся переходы больше не будут обрабатываться. Ответвление с истинным переходом становится активным. Результатом является приоритет обработки ветвей слева направо. Если никакой переход не действует, активный в настоящее время шаг остается активным.
Последовательный процесс перехода из шага S_10 в шаг S_11 выполняется, только когда шаг S_10 является активным, а условие перехода «a» истинным. Последовательный процесс перехода из шага S_10 в шаг S_12 выполняется только, когда шаг S_10 является активным, условие перехода «a» ложным, а условие «b» истинным.
Все альтернативные ответвления должны быть соединены снова в одну ветвь с использованием альтернативных соединений или прыжков.
В параллельных ответвлениях (рис. 3.10) обработка разбивается на две или больше последовательностей, которые обрабатываются параллельно.
Рис. 3.10. Пример параллельного ответвления
Только один общий переход позволяется непосредственно выше горизонтальной двойной линии синхронизации.
Последовательный процесс перехода из шага S_10 в шаги S_11, S_12, S_13 выполняется, только если шаг S_10 активен и условие перехода «a», которое является общим условием перехода, истинно. После параллельной активации шагов S_11, S_12, S_13 последовательности шагов обрабатываются независимо друг от друга.
Соединение. Различают альтернативное соединение и параллельное соединение.
При альтернативном соединении различные ветви альтернативного ответвления соединяются снова в одну ветвь, где затем продолжается обработка (рис. 3.11). Это соединение может также выполняться прыжком.
Рис. 3.11. Пример альтернативного соединения
Последовательный процесс перехода из шага S_10 в шаг S_12 выполняется, только когда шаг S_10 активный и условие перехода «d» истинно. Последовательный процесс перехода из шага S_8 в шаг S_12 выполняется, только если шаг S_8 активный и условие перехода «b» истинно и, следовательно, выполняется прыжок в шаг S_12. Последовательный процесс перехода из шага S_11 в шаг S_12 выполняется, только когда шаг S_11 является активным и условие перехода «e» истинно. Только одна из этих ветвей, соответствующая первому условию перехода в альтернативном ответвлении, является активной.
Параллельное соединение объединяет два или более параллельных ответвления, чтобы сформировать одну ветвь (рис. 3.12).
Рис. 3.12. Пример параллельного соединения
Переход, следующий за параллельным соединением, обрабатывается, когда все прямые предшествующие шаги установлены. Только один общий переход непосредственно ниже двойной горизонтальной линии синхронизации возможен.
Последовательный процесс перехода из шагов S_10, S_11, S_12 в шаг S_13 выполняется, только если шаги S_10, S_11, S_12 являются активными одновременно, а условие перехода «d», которое является частью общего перехода, истинно.
Пример структуры программы на языке SFC показан рис. 3.13.
Рис. 3.13. Пример программы на языке SFC
Основные достоинства SFC можно определить следующим образом:
- Высокая выразительность. Язык SFC имеет те же возможности, что и диаграммы состояний, и является наиболее подходящим средством для описания динамических моделей.
- Графическое представление. Благодаря графической мнемонике SFC максимально прост для использования и изучения. Вместе с тем, он является наглядным средством представления логики на разных уровнях детализации.
- Предварительное проектирование ПО. Использование языка SFC на ранних этапах проектирования прикладного ПО позволяет снять многочисленные непонимания между заказчиком, проектировщиком ПО и программистом.