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 : Petriscript fifo.png

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  ; 

Co daje następujący wykres:Trains.png

Linki zewnętrzne

Pełna dokumentacja jest dostępna tutaj .