Язык последовательного функционального управления - SFC
Графический язык (Sequential Function Chart) появился в 1979 г. как язык, позволяющий ясно и однозначно определить желаемое поведение системы управления. Отличается строгим математическим определением, каждое операционное состояние системы может быть декодировано с очень небольшим анализом.
SFC удобен для описания как последовательных процессов, так и пакетных или параллельных процессов, легко комбинируется с другими языками (язык спецификаций), обладает развитыми механизмами синхронизации, имеет простые динамические правила. Обеспечивает улучшение понимания оборудования при формировании модели его работы.
Диагностика SFC позволяет обнаружить ошибки проекта до того, как приложение тестируется в режиме Online.
Интерактивно анимируемый SFC также служит для облегчения диагностики оборудования и ошибок системы управления и после ввода программы в действие. Использование SFC как диагностического инструмента может уменьшать среднее время устранения таких неполадок. На рисунке 11.1 приведен общий вид секции SFC.

Рисунок 11.1 – Изображение секции SFC
Элементы языка SFC
Язык SFC использует следующие структурные элементы для сознания программы (рисунок 11.2): шаг (Step), переход (Transition), прыжок (Jump) и связи типа ответвления (Branch) и соединения (Joint).

Рисунок 11.2 – Основные структурные элементы
Язык SFC подразделяет секцию на отдельные логические последовательные шаги с использованием шагов и переходов, которые чередуются на функциональной диаграмме (рисунок 11.3).

Рисунок 11.3 – Использование шагов и преходов
Два шага никогда не могут быть соединены непосредственно; они должны всегда отделяться переходом.
Шаги и переходы связаны с помощью направленных связей. Последовательности активных сигнальных состояний обрабатываются по направленным связям, которые приводятся в действие переходами. Направление пошагового управления следует за направленными связями и начинается под предыдущим шагом к верхней части активного шага. Ветви обрабатываются слева направо.
Первый шаг в SFC-секции специальный и должен всегда определяться как шаг инициализации, который характеризует начальное состояние SFC-секции и показывается со сдвоенными линиями на границах. Шаг инициализации активен в начальном состоянии последовательности шагов инициализации, когда инициализируется программа, содержащая секцию. В пакете Concept шаг может быть идентифицирован как шаг инициализации не только в начале, но и в середине последовательности шагов.
Шаг может быть также заменен прыжком. Последовательности шагов всегда ассоциируются с прыжком к другому шагу той же самой последовательности шагов. Это означает, что они выполняются циклически. Назначения прыжка могут быть выбраны через список результатов поиска (все шаги последовательности).
Каждый шаг имеет нулевое или большее количество действий. Шаги без действия идентифицируются как ждущий шаг. Каждый переход имеет условие перехода. После установления действия шаги могут быть очищены, только если действия предварительно удалены из шага.
Чтобы избежать любого разделения последовательностей шагов, возможно вертикальное представление 99 непрерывных шагов с их переходами и дополнительным прыжком завершения с переходом. Чтобы ограничить сложность и разрешить анимацию, число объектов (шаги + переходы + ветви + соединения) в секции ограничено 2000.
Шаги, переходы и прыжки требуют одной ячейки каждый. Параллельные ответвления, параллельные соединения, альтернативные ответвления и альтернативные соединения не нуждаются в своей собственной ячейке, но вставляются в соответствующую ячейку шага или перехода.
В дополнение к этим структурным элементам в секции SFC может также размещаться текст. Такой текстовый объект в зависимости от размера текста может занимать, по крайней мере, одну ячейку и расширяться на большее число ячеек по горизонтали и вертикали. Текстовые объекты могут быть помещены только в пустые ячейки.
Шаг. Шаг представляется блоком, содержащим имя шага. Имя шага должно быть уникальным для всей программы.
Шаг становится активным, когда предшествующий ему переход истинен, и при нормальных обстоятельствах становится неактивным, когда последующий за ним переход истинен.
Однако может быть определено минимальное время, в течение которого шаг должен быть активен, и это называется временем задержки шага (step delay time).
Кроме того, могутбыть определены максимальное контролируемое время (maximum supervision time) и минимальное контролируемое время (minimum supervision time). Если происходит нарушение этих времен, то ошибка отображается в режиме анимации.
Минимальное контролируемое время – время, в течение которого шаг должен быть активен. Если шаг становится неактивным прежде, чем пройдет это время, появится сообщение об ошибке, которое просматривается в режиме Online events. В режиме анимации ошибка дополнительно идентифицируется цветным оттенением шага.
Максимальное контролируемое время – время, в течение которого шаг может оставаться активным при обычных обстоятельствах. Если шаг все еще активен после того, как это время пройдет, появится сообщение об ошибке, которое просматривается в режиме Online events. В режиме анимации ошибка дополнительно идентифицируется цветным оттенением шага.
Применяется следующее соотношение между временами:
Время задержки шага<Минимальное контролируемое время<< Максимальное контролируемое время.
Нормы времени могут быть введены в диалог реквизитов (рисунок 11.4) либо непосредственно как литералы времени (в режиме настройки контролируемых времен они могут быть определены автоматически), либо введены как многоэлементная переменная с типом данных SFCSTEP_TIMES.
Литералы времени могут быть изменены в режиме анимации.

Рисунок 11.4 – Реквизиты шага
Переменная SFCSTEP_TIMES может использоваться везде и имеет следующую структуру:
'varname': SFCSTEP_TIMES
delay: TIME
min: TIME
max: TIME
Здесь 'varname'.delay - время задержки шага, 'varname'.min -минимальное контролируемое время, 'varname'.max – максимальное контролируемое время.
Контролируемые времена относятся только к шагу, но не к назначенным им действиям. Действия могут иметь собственные определенные периоды времени.
Каждому шагу неявно назначена переменная Read Only (только для чтения) с типом данных SFCSTEP_STATE. Эта переменная шага имеет имя назначенного шага. Переменная шага может использоваться везде и имеет следующую структуру:
'Stepname': SFCSTEP_STATE
t:TIME
х: BOOL
tminErr: BOOL
tmахErr: BOOL
Здесь 'Step name'.t – текущее время задержки в шаге; 'Stepname'.х: – переменная; если она равна 1, то шаг активный, если она равна 0, то шаг неактивный; 'Stepname'.tminErr – переменная; если она равна 1, то это антипереполнение диапазона минимального контролируемого времени; если она равна 0, то нет антипереполнения диапазона минимального контролируемого времени; 'Stepname'.tmaxErr – переменная, если она равна 1, то это переполнение диапазона максимального контролируемого времени; если она равна 0, то нет переполнения диапазона максимального контролируемого времени.
Объявление реквизитов шага.Реквизиты шага объявляются в диалоге реквизитов шага (рисунок 11.5).

Рисунок 11.5 – Объявление реквизитов шага
Ниже приведен алгоритм для объявления реквизитов шага.
1) Шагу должно быть дано его собственное имя или должно быть принято предложенное имя. При назначении нового имени следует обратить внимание на то, что это имя шага (максимум 32 символа) должно быть уникально для всего проекта. Если введенное имя шага уже существует, то последует предупреждение и необходимо выбрать другое имя. Имя шага должно удовлетворять соглашениям стандарта IEC 61131-3 по имени, или появится сообщение об ошибках. Согласно стандарту только буквы позволяются как первый символ имен шага.
Вместо свободных имен также можно выбрать имена псевдонима. Если они есть в наличии, то они будут отображаться в SFC-и FBD-секциях, а также в функциях поиска, документации приложения и во время анализа.
2) Следует определить, является ли этот шаг шагом инициализации последовательности или нет. Для каждой последовательности первый шаг должен быть определен как шаг инициализации.
3) Контролируемые времена и время задержки должны быть определены для шага выборочно. Нормы времени вводятся в диалог реквизитов либо непосредственно как литералы времени (в режиме настройки времен диспетчерского управления, где они могут быть определены автоматически) или перечисляются как многоэлементная переменная типа данных SFCSTEP_TIMES.
4) Для введения комментария для шага используется командная кнопка Comment..., чтобы вызвать диалоговое окно Enter comment. Когда шаг выбран, этот комментарий будет отображаться в строке состояния окна редактора.
Действие. Действия, которые должны выполниться в то время, когда шаг активен, должны быть связаны с шагом.
Действия объявляются в диалоге реквизитов инициализации шага (рисунок 11.6).

Рисунок 11.6 – Объявление действий
Шагу либо не назначаются никакие действия, либо назначаются множественные действия. Шаг, которому не назначено действие, имеет функцию ожидания, то есть он ждет до тех пор, пока связанный переход, следующий за шагом, не станет истинным.
Действие – это выходная переменная типа данных BOOL.
Управление действиями выражено спецификаторами.
Действие может быть назначено выходу аппаратного обеспечения с использованием прямого адреса. В этом случае, действие может служить сигналом разрешения для перехода, входным сигналом в FBD-секции и в выходным сигналом для аппаратного обеспечения.
Действие может также использоваться как входной сигнал в другой секции с использованием переменной. Эта переменная также называется переменной действия.
С нелокализованными переменными действие используется как сигнал разрешения для перехода и как входной сигнал в FBD-секции. С локализованными переменными действие применяется как сигнал разрешения для перехода, входной сигнал в FBD-секции и как выходной сигнал для аппаратного обеспечения.
Чтобы просмотреть список всех предварительно объявленных переменных, используют командную кнопку Lookup. Если переменная не объявлена, применяют командную кнопку Variable declaration..., чтобы открыть редактор переменных и объявить требуемую переменную. Если переменная использовалась в макрокоманде, но не была вставлена в секцию, это делают командной кнопкой Section Instantiation...
С помощью команд Copy и Paste, шаги могут быть скопированы между проектами. Если определение действия дает ссылку на переменную, которая была определена редактором переменных для соответствующего проекта, то эта ссылка больше не может быть допущена при копировании в другие проекты. Тогда действие удаляется, список действий модифицируется и появляется сообщение об ошибках.
Объявление действий. Действия объявляются в поле Actions (Рисунок 11.6).
Для того чтобы объявить действие, необходимо:
1) Перейти к окну списка Qualifier и выбрать спецификатор для действия. Это определит поведение действия (например, сохранение, не сохранение, ограничение и т.д.). Кроме того, для спецификаторов L, D и DS используется текстовой блок Time.
2) Установить в поле Action тип (переменная или прямой адрес) действия с помощью кнопки выбора.
3) Если выбрана переменная, используйте кнопку Variable Declaration... для открытия редактора переменных и объявите новую выходную переменную. Можно также использовать командную кнопку Lookup..., чтобы просмотреть список всех переменных и выбрать одну их них.
4) Если был выбран прямой адрес, то перейти к текстовому блоку Direct address: и указать адрес выхода.
5) После выполнения всех определений для действий их подтвердить с помощью командной кнопки New. Подтверждение с помощью клавиши <Enter> в этом случае невозможно и вызывает сообщение об ошибках.
Для того, чтобы изменить действие, необходимо:
1) выбрать действие в окне списка. После этого все определения (спецификаторы, время, переменная или адрес и тип) действия принимаются в соответствующие текстовые окна и окна списка;
2) Добавить эти новые определения к списку действий как новое действие с помощью командной кнопки New. Эти новые определения могут также использоваться с командной кнопкой Accept action, чтобы отменить старые определения.
Для того чтобы удалить объявление действия, следует выбрать действие в окне списка и нажать командную кнопку <Delete>.
Спецификатор.При каждом связывании действия с шагом спецификатор, назначенный для действия, определит управление действием. Спецификатор можно объяснить как вход внутреннего функционального блока для логического связывания шага с действием. Если шаг становится активным, вход этого внутреннего функционального блока устанавливается в состояние 1. Теперь функциональный блок обрабатывается согласно его типу. Когда все условия истинны, выход Q (действие) устанавливается в состояние 1.
Возможные спецификаторы: N, None, S, R, L, D, P и DS. Для L, D и DS дополнительно должно быть определено время действия с типом данных TIME.
Спецификаторы N и «пусто» имеют одинаковое значение и представляют действие «не запомнить или не сохранить».
Спецификатор S представляет действие «установить/сохранить».
Действие установки остается активным, даже если соответствующий шаг становится неактивным. Действие становится неактивным, только когда оно сброшено в другом шаге со спецификатором R.
Спецификатор R представляет действие «доминирующий сброс».
Действие, которое было установлено на другом шаге со спецификатором S, будет сброшено. Также возможно предотвратить любое действие от перехода в активное состояние.
На рисунке 11.7 показан пример использования спецификатора R.

Рисунок 11.7 – Использование спецификатора R
В шаге S_5_10 действие ACT1 становится активным и остается активным, пока оно не сброшено в шаге S_5_12.
Спецификатор L представляет действие «ограниченный по времени».
Если шаг становиться активным, действие становится также активным. После достижения определенного значения времени действие возвращается в состояние 0, хотя шаг мог бы все еще быть активен. Действие также будет равно 0, когда шаг становится неактивным.
Спецификатор D представляет действие «задержанный по времени».
Если шаг становится активным, запускается внутренний таймер, и после того как определенное для действия время истекло, действие становится равным 1. Если шаг становится неактивным до времени действия, действие не станет активным.
Спецификатор P представляет действие «импульс».
Если шаг становится активным, действие будет равно 1 и останется таким для одного сканирования программы, при этом несущественно остается или нет шаг активным.
Спецификатор DS представляет действие «замедленный и сохраняемый/запоминаемый». Он является комбинацией спецификаторов D и S. Если шаг становится активным, внутренний таймер будет запущен, и после достижения определенного значения времени действие становится активным. Действие станет снова неактивным, когда будет сброшено в другом шаге с использованием спецификатора R.
Переход. Переход указывает условие, которое передает управление от одного или нескольких шагов, предшествующих переходу, к одному или нескольким последующим шагам по направлению соответствующей связи.
Переход разрешается, когда непосредственно предшествующие шаги активны. Переход вызывается, когда он разрешен и присоединенное условие перехода истинно. Переходы с непосредственно предшествующими неактивными шагами не будут обрабатываться.
Теоретически время обработки перехода должно быть по возможности самым коротким, но оно никогда не может быть равным нулю. Минимальное время обработки перехода соответствует продолжительность программного цикла.
Приведение в действие перехода может контролироваться диагностикой перехода.
Если никакое условие перехода не определено, переход никогда не станет активным.
Пуск перехода дезактивирует (сбрасывает) все непосредственно предшествующие шаги, связанные с переходом, затем активизирует все непосредственно следующие шаги.
Если запущенный переход активизирует несколько шагов одновременно, последовательности, которым эти шаги принадлежат, называются параллельными последовательностями. После их одновременной активизации, каждая из этих последовательностей выполняется независимо. Чтобы высветить специальную форму таких структур, ответвление и соединение параллельных последовательностей показываются двойной горизонтальной линией.
Переход является переменной типа данных BOOL.
По двойному нажатию левой кнопки мыши переходу может быть назначен прямой адрес (вход или выход), переменная (входная или выходная), литерал (0 или 1) или секция перехода (transition section).
При назначении переходу прямого адреса, литерала или переменной, имя адреса, имя литерала и имя переменной отображаются ниже значка перехода.
При назначении переходу секции перехода, имя секции перехода отображается выше значка перехода.
Переменная, литерал или адрес, назначенные переходу, будут только читаться и никогда не будут переписываться переходом.
Как ранее было указано с помощью команд Copy и Paste шаги могут быть скопированы между проектами. Так как условие перехода обращается к переменной, которая была определена редактором переменных для соответствующего проекта, то может оказаться, что эта ссылка больше недопустима, если она не была определена в новом проекте. В таком случае условие перехода удаляется и появляется сообщение об ошибках.
Секция перехода.Секция перехода может быть создана для каждого перехода. Она является секцией, которая содержит логику условия перехода, а также автоматически связывается с переходом.
Если выбор, сделанный в диалоге Options → Preferences → Graphical Editors…, является опцией Dynamic numbered, диалог Transition Properties автоматически отобразит обозначение псевдонима перехода. При вводе собственного имени для секции перехода следует обратить внимание на то, что каждая секция перехода может использоваться только один раз. При вводе имени секции, использованной ранее, появиться сообщение об ошибках.
Секция перехода автоматически создается при первом открытии. Имя секции перехода теперь отображается выше значка перехода в SFC-редакторе.
Если переход и включаемая им секция перехода не отредактированы, анимируемая секция перехода отобразит состояние Disabled.
Если другая опция выбрана как Transition section после того, как секция перехода была создана, появиться сообщение с вопросом, была ли секция перехода очищена. Если ответ No, секция перехода будет сохраняться. Вы можете также использовать командную кнопку Lookup , чтобы просмотреть список всех секций перехода, которые не используются в настоящее время.
Языки программирования для секций перехода – FBD, LD, IL и ST. Выбор языка программирования для секций перехода осуществляется в диалоге Options → Preferences... с опцией Editor type of transition sections.
При выборе языка программирования FBD, секция будет автоматически задана с блоком AND , который имеет 2 входа и выход и который задает фактическое имя секции перехода. Рекомендуемый блок может теперь быть связан или изменен. В других языках программирования предварительное программирование блока AND отсутствует.
Функция редактирования для секций перехода по сравнению с «нормальными» секциями ограничена следующими пунктами:
- секция перехода имеет только один единственный выход с типом данных BOOL, т.е. переменную перехода. Имя этой переменной должно быть идентично имени, введенному в поле Transition section;
- переменные переходов могут быть записаны только один раз;.
- могут применяться только функции, но не функциональные блоки;
- имеется только одна сеть, то есть все используемые функции или непосредственно или косвенно взаимосвязаны;
- к секциям перехода можно обращаться только через командную кнопку Edit... в диалоге Transition Properties. Они не показываются в диалоге Open Section.
- в диалоге Delete Section секции перехода идентифицируются символом T перед именем секции.
Объявление перехода.Переходы объявляются в диалоге реквизитов перехода (рисунок 11.8).

Рисунок 11.8 – Объявление перехода
Для определения типа условия перехода (секция перехода, переменная, литерал или прямой адрес) используются кнопки выбора в поле Type of transition condition.
Секция перехода (Transition section) может быть создана для каждого перехода. Она содержит логику условия перехода, а также автоматически связывается с переходом. Имя секции перехода теперь отображается выше перехода в окне редактора.
Можно использовать или действие SFC-секции, или нелокализованную переменную любой секции как переменную для перехода. Имя переменной будет отображаться ниже перехода в окне редактора.
Можно также использовать действие SFC-секции, локализованную переменную любой секции или сигнал аппаратного обеспечения как переменную для перехода. Имя переменной будет отображаться ниже перехода в окне редактора.
В качестве переменной для перехода можно выбрать константу, которая используется в FBD-секции. Значение константы определяется в редакторе переменных. Имя константы будет отображаться ниже перехода в окне редактора.
Переходу может быть непосредственно назначен литерал. Его значение будет отображаться на переходе в окне редактора.
Следует использовать сигнал аппаратного обеспечения для управления переходом. Прямой адрес будет отображаться ниже перехода в окне редактора.
Если выбрана переменная (Variable), используется кнопка Variable Declaration..., чтобы открыть редактор переменных и объявить здесь новую переменную. Можно также применять командную кнопку Lookup... , чтобы просмотреть список всех переменных и выбрать одну из них.
Если выбран литерал (Literal), следует использовать кнопки выбора, чтобы установить значение TRUE или FALSE для перехода.
Если выбран прямой адрес (Direct address), используется текстовой блок Direct address: и вводится адрес сигнала.
При необходимости включают флажок Invert Transition, чтобы инвертировать условие перехода. Инвертированное условие перехода отображается на переходе с символом тильды (~) перед именем переменной. Можно использовать командную кнопку Comment для вызова диалогового окна Enter comment, в которое вводится комментарий для перехода. Этот комментарий будет отображаться в строке состояния окна редактора, когда переход выбран.
После того, как все определения для перехода выполнены, используют командную кнопку OK для их подтверждения.
Псевдонимы для шагов и переходов. Шаги и переходы могут быть определены собственными именами или псевдонимами. При введении собственного имени следует обратить внимание на то, что это имя (максимум 32 символа) должно быть уникально для всего проекта. Если введенное имя совпадает с имеющимся в проекте, то последует предупреждение, необходимо выбрать другое имя другое имя. Имя должно удовлетворять соглашениям стандарта по имени или появится сообщение об ошибках.
Если выбранные псевдонимы для шагов и переходов есть в наличии, они будут отображаться в SFC- и FBD-секциях, а также в функциях поиска, документации приложения и в течение анализа программы.
Значение по умолчанию для шагов и переходов – свободное имя. При выборе обозначения псевдонима, активизируйте его в диалоге Options → Preferences → Graphical Editors Preferences с опцией Dynamic numbered. Свободные имена в этой опции будут заменены вымышленными именами – псевдонимами. Чтобы восстановить свободные имена, проект закрывают и не сохраняют его.
Псевдонимы создаются динамически в течение процесса редактирования и при разрешении опции Dynamic numbered.
Обозначения псевдонима формируются из позиций шага и перехода в секции.
Шаги последовательно пронумерованы, начиная с левой верхней секции. При использовании номеров столбцов и строк будет сформирован четырехразрядный номер шага (sszz). Псевдоним для шагов составляется из символьной цепочки S_ , части имени секции (nnn), символа подчеркивания ( _ ) и номера шага (sszz) (S_nn_sszz).
Псевдоним для переходов получается из псевдонима ячейки шага, расположенной перед переходом, даже если она пустая. Псевдоним для переходов составляется из символьной цепочки T_, части имени секции (nnn), символа подчеркивания ( _ ) и номера ячейки шага (sszz) спереди от него (T_nn_sszz).
Длина части имени секции, показываемой в псевдониме, свободно определяется в диалоге Options → Preferences → Graphical Editors Preferences. Число символов (начинается с первого символа) имени секции, которое должно быть включено в псевдоним, может быть предопределено в этой секции.
При вставке и удалении псевдонимы шагов и переходов будут перенумерованы. Псевдонимы остаются пустыми, пока нумерация возможна. Это означает, что все объекты были связаны в последовательность.
На рисунке 11.9 показаны примеры псевдонимов.

Рисунок 11.9 – Примеры псевдонимов
Функции импорта и экспорта не распознают псевдонимов, потому что они созданы динамически. Визуализация восстанавливает имена псевдонимов динамически, но не использует их для конфигурации фиксированных ссылок, потому что они могут постоянно изменяются.
Языки ST, IL и LD показывают свободные имена и не поддерживают псевдонимы. Свободные имена сохраняются и появляются снова после выбора опции IEC like.
Связь.Связи являются соединениями между шагами и переходами. Обычно они автоматически создаются при размещении объектов в ячейках, которые не находятся в непосредственной последовательности, логика должна быть явно установлена с помощью связи.
Одиночные последовательности. В одиночной последовательности чередование шагов и переходов повторяется последовательно (рисунок 11.10).
Последовательный процесс перехода из шага S_5_10 в шаг S_5_11 будет осуществляться, только когда шаг 5_10 находится в активном состоянии и когда условие перехода а истинно.

Рисунок 11.10 – Одиночная последовательность
Прыжок.Прыжок позволяет программе продолжать работу из различного положения. Прыжки в параллельную последовательность или из параллельной последовательности невозможны.
Имеется два вида прыжков: прыжок последовательности и контур последовательности.
Прыжок последовательности является частным случаем альтернативного ответвления, где одно или несколько ответвлений не содержат шаги (рисунок 11.12).

Рисунок 11.12 – Прыжок последовательности
Последовательный процесс из шага S_5_10 через шаги S_5_11 и S_5_12 в шаг S_5_13 выполняется, только когда шаг S_5_10 является активным и условие перехода а истинно. Последовательный процесс перехода из шага S_5_10 прямо в шаг S_5_13 выполняется, только когда шаг S_5_10 является активным и условие перехода b истинно, а условие a ложно.
Контур последовательности (рисунок 11.13) является частным случаем альтернативного ответвления, где одно или несколько ответвлений выполняют возврат к предыдущему шагу.

Рисунок 11.13 – Контур последовательности
Последовательный процесс из шага S_5_11 в шаг S_5_10 выполняется, только если условие перехода c является ложным, а условие b – истинным.
Ответвления. Различают альтернативное и параллельное ответвление.
Альтернативное ответвление – это условное программирование ответвлений в потоке управления SFC-структуры.
В альтернативных ответвлениях шаг продолжается несколькими переходами под горизонтальной линией, которые являются различными процедурами (рисунок 11.14). Только один из этих переходов может функционировать в данном времени. Какое ответвление будет осуществляться, определяется результатом выполнения условия перехода для переходов, которые следуют за альтернативным ответвлением. Переходы ответвления обрабатываются слева направо. Если условие перехода истинно, остающиеся переходы больше не будут обрабатываться. Ответвление с истинным переходом становится активным. Результатом является приоритет обработки ветвей слева направо. Если никакой переход не действует, активный в настоящее время шаг остается активным.

Рисунок 11.14 – Альтернативное ответвление
Последовательный процесс перехода из шага S_5_10 в S_5_11 выполняется, только когда шаг S_5_10 является активным, а условие перехода а истинным. Последовательный процесс из шага S_5_10 в шаг S_5_12 выполняется, только когда шаг S_5_10 является активным и когда условие перехода b истинным, а условие a ложно.
Все альтернативные ответвления должны быть соединены снова в одну ветвь с использованием альтернативных соединений или прыжков.
В параллельных ответвлениях (рисунок 11.15) обработка разбивается на две или больше последовательностей, которые продолжают параллельно обрабатываться. Только один общий переход позволяется непосредственно выше горизонтальной двойной линии синхронизации.

Рисунок 11.15 – Параллельное ответвление
Последовательный процесс перехода из шага S_5_10 в шаги S_5_11, S_5_12 (и т. д.) выполняется, только если шаг S_5_10 является активным и условие перехода a, которое является частью общедоступнного перехода, истинно. После параллельной активации S_5_11, S_5_12 и т.д. последовательности шагов обрабатываются независимо друг от друга.
Если шаг стал шагом инициализации внутри параллельного ответвления, то один шаг в каждой ветви параллельного ответвления должен быть определен как шаг инициализации.
Соединение. Различают альтернативное соединение и параллельное соединение.
При альтернативном соединении различные ветви альтернативного ответвления соединяются снова в одну ветвь, где затем продолжается обработка (рисунок 11.16). Это соединение может также выполняться прыжком.

Рисунок 11.16 – Альтернативное соединение
Последовательный процесс из шага S_5_10 в шаг S_5_12 выполняется, только когда S_5_10 является активным и условие перехода d истинно. Последовательный процесс перехода из шага S_5_8 в шаг S_5_12 выполняется, только если шаг S_5_8 является активным и условие перехода b истинно, и, следовательно, выполняется прыжок в шаг S_5_12. Последовательный процесс перехода из шага S_5_11 в шаг S_5_12 выполняется, только когда шаг S_5_11 является активным и условие перехода e истинно. Только одна из этих ветвей, соответствующая первому условию перехода в альтернативном ответвлении, является активной.
Параллельное соединение объединяет два или более параллельных ответвления, чтобы сформировать одну ветвь (рисунок 11.17). Переход, следующий за параллельным соединением, обрабатывается, когда все прямые предшествующие шаги установлены. Только один общий переход непосредственно ниже двойной горизонтальной линии синхронизации возможен.

Рисунок 11.17 – Параллельное соединение
Последовательный процесс перехода из шагов S_5_10, S_5_11 (и т.д.) в шаг S_5_13 выполняется, только если шаги S_5_10, S_5_11 (и т.д.) являются активными одновременно, а условие перехода d, которое является частью общего перехода, истинно.
|