Petryskrypt
PetriScript to język modelowania dla sieci Petriego , zaprojektowany przez Alexandre'a Hameza i Xaviera Renault. Platforma CPN-AMI udostępnia wiele narzędzi do pracy na sieciach Petriego, takich jak narzędzia do weryfikacji i sprawdzania modeli.
Pierwotnie proste sieci Petriego były tworzone poprzez projektowanie graficzne , ale badania przeprowadzone wewnętrznie w LIP6 ujawniły, że jest to potrzebne do automatyzacji takich zadań. PetriScript został zaprojektowany w celu zapewnienia pewnych udogodnień w modelowaniu miejsc przejść i kolorowych sieci Petriego w ramach platformy CPN-AMI. Głównym celem Petriscript jest automatyzacja operacji modelowania w sieciach Petriego poprzez łączenie, tworzenie i łączenie węzłów . Obsługuje prawie wszystko, co potrzebne, takie jak makra , sterowanie pętlami, listy oraz łańcuchy i wyrażenia arytmetyczne i maksymalnie blokuje interwencję użytkownika. Jego składnia jest podobna do Ada .
Poniższy skrypt tworzy FIFO z trzema sekcjami:
0
zdefiniuj ( FIFO_SIZE , 3 ) zdefiniuj ( FIFO_BASE_X , 100 ) zdefiniuj ( FIFO_BASE_Y , 100 ) zdefiniuj ( FIFO_STEP , 120 ) int $ wave := ; za $ fala w 1. . Pętla FIFO_SIZE tworzy miejsce „Slot_” i falę „ $” .
' ( x FIFO_BASE_X + FIFO_STEP * $ fala , y FIFO_BASE_Y ); utwórz miejsce „Empty_” & „ $ wave ” ( x FIFO_BASE_X + FIFO_STEP * $ wave , y FIFO_BASE_Y + 100 , oznaczenie „1” ); końcowa pętla ; za $
fala w 1. . FIFO_SIZE + 1 pętla tworzy przejście "t" & ' $ wave - 1 ' & "_to_" & ' $ wave ' ( x FIFO_BASE_X + FIFO_STEP * $ wave - FIFO_STEP / 2 , y FIFO_BASE_Y + 50 );
jeśli $ wave < FIFO_SIZE + 1 to połącz "1" przejście "t" & ' $ wave - 1 ' & "_to_" & ' $ wave ' aby umieścić "Slot_" & ' $ wave '; połącz „1” miejsce „Pusty_” &
' $ fala ' do przejścia "t" & ' $ fala - 1 ' & "_to_" & ' $ fala '; koniec , jeśli ; jeśli $ fala > 1 to połącz "1" przejście "t" & ' $ fala - 1 '
& "_to_" & ' $ wave ' aby umieścić "Empty_" & ' $ wave - 1 '; połącz "1" umieść "Slot_" & ' $ wave - 1 ' aby przejść "t" & ' $ wave - 1 ' &
„_to_” & „ $ fala ”; koniec , jeśli ; końcowa pętla ; ustaw przejście "t0_to_1" na ( nazwa "FIFO_Start" ); ustaw przejście "t" & " FIFO_SIZE " & "_to_" & " FIFO_SIZE + 1 " na ( nazwa "FIFO_Koniec" );
Co daje następujący wykres :
Oto kolejny przykład, który pokazuje moc PetriScript:
zdefiniuj ( X , 250 ) zdefiniuj ( Y , 350 ) zdefiniuj ( promień , 50 ) zdefiniuj ( R , 150 ) zdefiniuj ( PRZEKROJE , 15 ) zdefiniuj ( KĄT_WEWNĘTRZNY , 360 / PRZEKROJE ) zdefiniuj ( KĄT_ZEWNĘTRZNY , 360 / ( 2 *
0
0
SEKCJE )) int $ i := ; int $ j := ; za 1 $ w 1. . Pętla SECTIONS tworzy miejsce "F" & ' $ i ' ( x X , y Y , r radius , t $ i * INNER_ANGLE ); stworzyć miejsce
"Przekrój_" & ' $ i ' ( x X , y Y , r R , t $ i * KĄT_WEWNĘTRZNY ); utwórz przejście "t" & ' $ i ' & "_to_" & ' $ i mod SEKCJE + 1 ' ( x X
, y Y , r R , t $ i * KĄT_WEWNĘTRZNY + KĄT_ZEWNĘTRZNY ); końcowa pętla ; za 1 $ w 1. . Pętla SECTIONS łączy miejsce „Section_” & „ $ i ” z przejściem „t” & „ $ i ' &
„_to_” & „ $ i mod SECTIONS + 1 ”; połącz przejście "t" & " $ i " & "_to_" & " $ i mod SECTIONS + 1 ' aby umieścić "Section_" & " $ i mod SECTIONS + 1
'; jeśli $ i /= 1 to połącz miejsce "F" & ' $ i ' z przejściami "t" & ' $ i - 1 ' & "_to_" & ' $ i '; w przeciwnym razie połącz miejsce „F1” z przejściem „t” &
' SEKCJE ' & "_do_" & ' 1 '; koniec , jeśli ; połącz przejście "t" & ' $ i mod SECTIONS + 1 ' & "_to_" & '( $ i + 1 ) mod SECTIONS + 1 ' aby umieścić "F"
0
& ' $ ja '; końcowa pętla ; za 1 $ w 1. . Pętla SECTIONS jeśli $ i mod 3 = to ustaw miejsce "Section_" & ' $ i ' na oznaczenie "1" ; w przeciwnym razie ustaw miejsce „F” i „ $ i
' do oznaczenia "1" ; koniec , jeśli ; końcowa pętla ;
Linki zewnętrzne
Pełna dokumentacja jest dostępna tutaj .