Транзакты вводятся в модель через блоки GENERATE и могут выводиться из модели через блоки TERMINATE.
В самом начале моделирования в блок‑схеме модели нет ни одного транзакта, все они находятся в пассивном буфере, который организован по правилам стека.
Число транзактов, первоначально находящихся в пассивном буфере, ограничено и определяется основной памятью используемой ЭВМ.
В процессе функционирования модели в ней может находиться одновременно достаточно большое число транзактов. Все они постепенно берутся с вершины пассивного буфера, а при выводе из модели туда же и возвращаются. Таким образом, некоторые транзакты могут неоднократно задействованы в модели, другие же, находящиеся ближе ко дну пассивного буфера, могут ни разу не участвовать в работе модели.
Направления, по которым осуществляется перемещение транзактов, отображаются конфигурацией блок‑схемы. Существует целый ряд блоков, управляющих движением транзактов по блок‑схеме в зависимости от выполнения некоторого условия, проверяемого в блоке, или реализации некоторого случайного события. Прохождение транзактом такого блока может изменить движение транзакта: определить его передачу не в следующий по расположению в блок-схеме блок, а в другой блок, имя или номер которого определяется логикой работы пройденного блока, управляющего движением транзакта.
Из всех транзактов, находящихся в блок‑схеме, в каждый момент модельного времени лишь один транзакт является активным (движущимся), все остальные пассивны. При входе его в очередной блок интерпретатор вызывает на выполнение фрагмент программы, соответствующий этому блоку.
Начав свое движение по блок‑схеме, активный транзакт продолжает его, до тех пор, пока не произойдет одно из трех событий:
транзакт входит в блок, функцией которого является задержка транзакта на некоторый интервал времени, в общем случае случайный;
транзакт входит в блок TERMINATE и выводится из блок‑схемы;
транзакт пытается войти в следующий блок, но блок отказывается принять его (например, прибор занят, или многоканальное устройство полностью заполнено, или переключающее устройство закрыто и т.п.). Реализуется так называемое условие блокировки. В этом случае транзакт остается в предыдущем блоке, и периодически будет повторяться попытка дальнейшего его продвижения. Оно становится возможным, если состояние ИМ изменится и условие блокировки будет снято.
После завершения движения активного транзакта, он становится пассивным, а новый транзакт становится активным. Порядок активизации транзактов определяется логикой работы интерпретатора.
Для рассмотрения этой логики используется следующая запись, характеризующая состояние транзакта:
[N, T, NTB, PR, NSB], где
N – номер транзакта (в соответствии с первоначальной нумерацией транзактов в пассивном буфере),
T – время, на которое запланировано дальнейшее движение транзакта (для транзактов, попавших в условие блокировки, на этом месте используется аббревиатура КМР – как можно раньше);
NTB – номер текущего блока нахождения транзакта;
PR – приоритет транзакта (значения приоритета – целые числа от 0 до 127: чем больше значение, тем больше приоритет). Значения приоритета могут определяться при входе транзакта в ИМ из блока GENERATE (по умолчанию – приоритет 0), изменяться при прохождении блока PRIORITY. Параметр транзакта, определяющий его приоритет, используется для моделирования относительного приоритета заявок в моделях СМО;
NSB – номер следующего блока для движения транзакта.
В дополнение к параметру PR каждый транзакт может иметь до 100 параметров. С помощью них, в частности, может моделироваться неоднородность заявок СМО: эта неоднородность может задавать логику движения транзакта в СМО, временные характеристики воздействия блоков на транзакт и др.
При перемещении транзакта по модели его параметры могут устанавливаться и изменяться и использоваться в соответствии с логикой моделирования. Использоваться в определенный момент работы имитационной программы могут только параметры активного транзакта.
Основные правила определения параметров транзакта:
1) Число используемых параметров транзакта определяется операндом F блока GENERATE;
2) СЧА параметров транзакта определяется Pj, где Р- групповое имя, j – номер параметра (символическое имя не используется);
3) Значениями параметров транзакта могут быть целые числа со знаком и без знака. Формат параметров определяется операндом G блока GENERATE, из которого он вышел (H- полуслово ( ), F- слово ( ).
4) При входе в модель все параметры транзакта имеют нулевые значения
5) Устанавливаться и изменяться могут при прохождении блока ASSIGGN