Model System2 (k, m, n: integer) def

System2 := star(Server, Serv[a..c]) + star(Serv[a], Node[1..k]) + star(Serv[b], Node[k+1..m]) + star(Serv[c], Node[m+1..n])

enddef.

 

Оно задает модели имя (System2) и определяет, что модель зависит от трех целочисленных параметров k, m, n. Таким образом, эта запись определяет целое семейство однородных моделей. В частности, изображенная на рис. 2 модель может быть определена как System2 (8, 17, 28).

Заметим, что в этом описании пока нет никакой информации о том, как функционируют центральные и периферийные узлы системы.

Описание алгоритмов функционирования является предметом второго слоя, слоя рутин (routine). В этом слое, в свою очередь, нет описания связей между узлами, т.е. описания структуры.

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

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

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

Рутина может инициировать входные события в других рутинах путем исполнения оператора out.

Простейшая рутина узла может выглядеть так:

routine Generator