Петрискрипт
PetriScript — это язык моделирования сетей Петри , разработанный Александром Хамесом и Ксавье Рено. [1] Платформа -AMI CPN предоставляет множество инструментов для работы с сетями Петри, например инструменты проверки и проверки моделей. [2]
Первоначально простые сети Петри создавались посредством графического дизайна , но исследования, проведенные внутри LIP6, показали, что необходимо автоматизировать такие задачи. [3] PetriScript был разработан для предоставления некоторых возможностей моделирования переходов мест и цветных сетей Петри на платформе CPN-AMI. Основная цель Petriscript — автоматизировать операции моделирования в сетях Петри путем слияния, создания и соединения узлов . Он поддерживает практически все необходимое, например макросы , управление циклами, списки, строковые и арифметические выражения , и максимально блокирует вмешательство пользователя. Его синтаксис аналогичен Ada .
Следующий скрипт создает FIFO с тремя разделами:
define(FIFO_SIZE,3)
define(FIFO_BASE_X,100)
define(FIFO_BASE_Y,100)
define(FIFO_STEP,120)
int $wave := 0;
for $wave in 1..FIFO_SIZE loop
create place "Slot_" & '$wave' (x FIFO_BASE_X + FIFO_STEP * $wave,
y FIFO_BASE_Y);
create place "Empty_" & '$wave' (x FIFO_BASE_X + FIFO_STEP * $wave,
y FIFO_BASE_Y + 100, marking "1");
end loop;
for $wave in 1..FIFO_SIZE+1 loop
create transition "t" & '$wave -1' & "_to_" & '$wave' (x FIFO_BASE_X + FIFO_STEP * $wave - FIFO_STEP / 2,
y FIFO_BASE_Y + 50);
if $wave < FIFO_SIZE+1 then
connect "1" transition "t" &'$wave -1' & "_to_" & '$wave' to place "Slot_" & '$wave';
connect "1" place "Empty_" & '$wave' to transition "t" &'$wave -1' & "_to_" & '$wave';
end if;
if $wave > 1 then
connect "1" transition "t" &'$wave -1' & "_to_" & '$wave' to place "Empty_" & '$wave - 1';
connect "1" place "Slot_" & '$wave - 1' to transition "t" &'$wave -1' & "_to_" & '$wave';
end if;
end loop;
set transition "t0_to_1" to (name "FIFO_Start");
set transition "t" & 'FIFO_SIZE' & "_to_" & 'FIFO_SIZE + 1' to (name "FIFO_End");
В результате получается следующий график :
Вот еще один пример, демонстрирующий возможности PetriScript:
define(X,250)
define(Y,350)
define(radius,50)
define(R,150)
define(SECTIONS,15)
define(INNER_ANGLE,360/SECTIONS)
define(OUTER_ANGLE,360/(2*SECTIONS))
int $i := 0;
int $j := 0;
for $i in 1.. SECTIONS loop
create place "F" & '$i' ( x X, y Y, r radius, t $i * INNER_ANGLE);
create place "Section_" & '$i' ( x X, y Y, r R, t $i * INNER_ANGLE);
create transition "t" & '$i' & "_to_" & '$i mod SECTIONS + 1' ( x X, y Y, r R, t $i * INNER_ANGLE + OUTER_ANGLE);
end loop;
for $i in 1.. SECTIONS loop
connect place "Section_" & '$i' to transition "t"&'$i' & "_to_" & '$i mod SECTIONS + 1';
connect transition "t" & '$i' & "_to_" & '$i mod SECTIONS + 1' to place "Section_" & '$i mod SECTIONS + 1';
if $i /= 1 then
connect place "F" & '$i' to transition "t" & '$i-1' & "_to_" & '$i';
else
connect place "F1" to transition "t" & 'SECTIONS' & "_to_" & '1';
end if;
connect transition "t" &'$i mod SECTIONS + 1' & "_to_" & '($i+1) mod SECTIONS + 1' to place "F" & '$i';
end loop;
for $i in 1.. SECTIONS loop
if $i mod 3 = 0 then
set place "Section_" & '$i' to marking "1";
else
set place "F" & '$i' to marking "1";
end if;
end loop;
В результате получается следующий график:
Ссылки
[ редактировать ]- ^ Александр Хамез; Ксавье Рено. «Справочное руководство PetriScript 1.0» (PDF) . ЛИП6. Архивировано из оригинала (PDF) 24 октября 2016 года.
- ^ Принципы информационных систем: информатика
- ^ Системы бизнес-баз данных: информатика, управление базами данных.
Внешние ссылки
[ редактировать ]Полная документация доступна здесь .