Это старая версия документа.
Слияние веток процесса возможно в двух случаях:
После точки ветвления на параллельные ветки имитация исполняет параллельные ветки экземпляра процесса одновременно. Параллельно выполняемые ветки экземпляра процесса могут снова объединиться в одной точке слияния (Рис.1). Продолжительность каждой параллельной ветки, в общем случае, будет разной, следовательно, в точку слияния они попадут в разное время. Первая ветка экземпляра процесса, достигшая точки слияния, может ожидать в ней выполнения остальных параллельных веток, а может запустить исполнение процесса далее без остановки. Время, в течение которого она ожидает исполнения остальных параллельных веток в точке слияния, называется временем синхронизации.
На диаграмме процесса в нотации ЕРС в качестве точки слияния параллельных веток процесса используются операторы. Время синхронизации задается в окне свойств каждого оператора (Рис.2).
Если в качестве оператора слияния используется оператор «И», дальнейшее выполнение экземпляра процесса продолжится только в случае, если выполнятся все ветки, входящие в этот оператор. Выполнение одной из веток запускает время синхронизации, в течение которого экземпляр процесса ожидает выполнения остальных веток. Если по окончании времени синхронизации остальные ветки экземпляра процесса не выполнились, выполнение экземпляра процесса останавливается.
Если время синхронизации в операторе не задано, после выполнения одной из веток экземпляр процесса будет ожидать выполнения остальных веток до окончания имитации.
Если в качестве оператора слияния используется оператор «ИЛИ», выполнение одной из веток, входящей в оператор, запускает дальнейшее выполнение экземпляра процесса и время синхронизации. Если в течение времени синхронизации выполняются другие ветки экземпляра процесса, дальнейшее выполнение экземпляра процесса они не запускают. По истечении времени синхронизации цикл повторяется снова.
Если время синхронизации в операторе не задано, каждая ветка экземпляра процесса, входящая в оператор, запускает дальнейшее выполнение экземпляра процесса.
Если в качестве оператора слияния используется оператор «Исключающее ИЛИ», вне зависимости от значения времени синхронизации каждая ветка экземпляра процесса, входящая в этот оператор, запускает дальнейшее выполнение экземпляра процесса.
На диаграммах процессов в нотациях Процесс, Процедура в качестве точки слияния параллельных веток используется блок процесса, у которого есть несколько входящих стрелок «Связь предшествования».
Время синхронизации задается для всех диаграмм процессов в нотациях Процесс, Процедура один раз в параметре «Время синхронизации для Процессов/Процедур» (меню ФСА → Параметры ФСА).
В течение времени синхронизации экземпляр процесса будет ожидать выполнения всех веток, входящих в точку слияния. Дальнейшее выполнение экземпляра процесса запустится, только если в течение времени синхронизации выполнятся все ветки экземпляра процесса. Если этого не произойдет, по окончании времени синхронизации выполнение экземпляра процесса остановится.
Если значение времени синхронизации не установлено, после выполнения одной из веток экземпляр процесс будет ожидать выполнения остальных веток в точке слияния до окончания имитации.
При слиянии с использованием эксклюзивного шлюза (XOR) шлюз просто пропускает токены через себя: Задача 3 будет выполнена 2 раза (например, где-то разветвились по AND, а слияние с синхронизацией не нужно). Т.е. без синхронизации. Время синхронизации игнорировать.
= | ||
Рис.3.Слияние по XOR |
Слияние без шлюза нужно обрабатывать как XOR.
Объединяющие неэксклюзивные шлюзы используются для объединения нескольких альтернативных и параллельных маршрутов в один. Для шлюза может быть задано время синхронизации.
Выполнение одной из веток, входящей в шлюз, запускает дальнейшее выполнение экземпляра процесса и стартует время синхронизации. Если в течение времени синхронизации выполняются другие ветки экземпляра процесса, дальнейшее выполнение экземпляра процесса они не запускают. По истечении времени синхронизации цикл повторяется снова.
Если время синхронизации для шлюза не задано, каждая ветка экземпляра процесса, входящая в шлюз, запускает дальнейшее выполнение экземпляра процесса.
При имитации комплексный шлюз нужно обрабатывать как неэксклюзивный шлюз (ИЛИ).
В качестве примера рассмотрим процесс обслуживания клиента (Рис.6).
По условиям примера клиент может обратиться в компанию для приобретения либо продукта А, либо продукта Б, либо для приобретения обоих продуктов. После выяснение информации о том, какой продукт необходим клиенту, сотрудники компании изготавливают этот продукт и отправляют его клиенту. Изготовление каждого продукта занимает разное время. Поэтому если клиенту необходимо оба продукта, то изготовленные продукты могут быть отправлены клиенту либо оба сразу, либо по отдельности по мере изготовления каждого.
Возможна ситуация, когда один из продуктов уже изготовлен, а до окончания изготовления второго продукта осталось не более 8 часов. В этом случае целесообразно подождать изготовления второго продукта и отправить весь заказ клиенту сразу.
Для моделирования данной ситуации в точке слияния веток процесса в окне свойств оператора «ИЛИ» необходимо задать время синхронизации (Рис.7).
В результате, в случае, если компания будет изготавливать для клиента оба продукта, возможны 2 ситуации:
Принятые правила следующие:
Для слияния по AND для всех нотаций мы считаем, что токен, порожденный стартом одного экземпляра стартового события на одной ветке, должен обязательно дождаться токен, порожденный стартом другого стартового события на другой ветке. Ожидание производится по стандартным правилам, принятым для данной нотации. (Они описаны выше). Совет: старайтесь задать стартовые события на одной и другой ветке таким образом, чтобы частота их возникновения совпадала. Иначе, экземпляры токенов «разъедутся» во времени и имитация даст неверные результаты.
Для слияния по XOR для всех нотаций слияние работает на пропуск токена, никоим образом его не обрабатывая.
Слияние по ИЛИ не реализовано в связи с тем, что невозможно определить, какие токены в точке слияния необходимо слить вместе, а какие оставить раздельными.
Для имитации сложных взаимодействий между ветками процессов можно использовать переменные.
Для того чтобы процесс «Сборка изделия» начал выполняться в момент, когда возникнут события «Деталь 1 сформирована», «Деталь 2 закуплена», можно:
Процесс «Сборка изделия» начнет выполняться только тогда, когда выполнятся оба события: «Деталь 1 сформирована» и «Деталь 2 закуплена».