Petriskript

PetriScript är ett modelleringsspråk för Petri-nät , designat av Alexandre Hamez och Xavier Renault. CPN -AMI- plattformen tillhandahåller många verktyg för att arbeta på Petri-nät, såsom verifierings- och modellkontrollverktyg.

Ursprungligen skapades enkla Petri-nät genom grafisk design , men forskning utförd internt på LIP6 visade att det behövdes för att automatisera sådana uppgifter. PetriScript designades för att tillhandahålla vissa faciliteter för modellering av platser-övergång och färgade Petri-nät inom CPN-AMI-plattformen. Petriscripts huvudsakliga syfte är att automatisera modelleringsoperationer på Petri-nät genom att slå samman, skapa och ansluta noder . Den stöder nästan allt som behövs, såsom makron , loopkontroll, listor och strängar och aritmetiska uttryck , och blockerar användarens ingripande så mycket som möjligt. Dess syntax är Ada-liknande .

Följande skript producerar en FIFO med tre sektioner:

 
 
 
 
    0
     
 	          
 		 
 	          
 		     
  
     
 	                   
 		   
 	    
 		               
 		              
 	 
 	    
 		                 
 		                
 	 
  
      
                define  (  FIFO_SIZE  ,  3  )  define  (  FIFO_BASE_X  ,  100  )  define  (  FIFO_BASE_Y  ,  100  )  define  (  FIFO_STEP  ,  120  )  int  $  wave  :=  ;  för  $  våg  i  1.  .  FIFO_SIZE  loop  skapa  plats  "Slot_"  &  '  $  wave  '  (  x  FIFO_BASE_X  +  FIFO_STEP  *  $  wave  ,  y  FIFO_BASE_Y  );  skapa  plats  "Empty_"  &  '  $  wave  '  (  x  FIFO_BASE_X  +  FIFO_STEP  *  $  wave  ,  y  FIFO_BASE_Y  +  100  ,  markering  "1"  );  ändslinga  ;  _  för  $  våg  i  1.  .  FIFO_SIZE  +  1  slinga  skapar  övergången  "t"  &  '  $  wave  -  1  '  &  "_to_"  &  '  $  wave  '  (  x  FIFO_BASE_X  +  FIFO_STEP  *  $  wave  -  FIFO_STEP  /  2  ,  y  FIFO_BASE_Y  +  50  );  om  $  wave  <  FIFO_SIZE  +  1  anslut  sedan  "1"  övergång  "t"  &  '  $  wave  -  1  '  &  "_to_"  &  '  $  wave  '  för att  placera  "Slot_"  &  '  $  wave  ';  anslut  "1"  plats  "Empty_"  &  '  $  wave  '  till  övergången  "t"  &  '  $  wave  -  1  '  &  "_to_"  &  '  $  wave  ';  sluta  om  ;  om  $  wave  >  1  anslut  sedan  "1"  övergång  "t"  &  '  $  wave  -  1  '  &  "_to_"  &  '  $  wave  '  för att  placera  "Empty_"  &  '  $  wave  -  1  ';  anslut  "1"  placera  "Slot_"  &  '  $  wave  -  1  '  till  övergången  "t"  &  '  $  wave  -  1  '  &  "_to_"  &  '  $  wave  ';  sluta  om  ;  ändslinga  ;  _  ställ in  övergången  "t0_to_1"  till  (  namn  "FIFO_Start")  ;  ställ in  övergången  "t"  &  '  FIFO_SIZE  '  &  "_to_"  &  '  FIFO_SIZE  +  1  '  till  (  namn  "FIFO_End" )  ; 

Vilket ger följande graf : Petriscript fifo.png

Här är ett annat exempel som visar kraften i PetriScript:

 
 
 
 
 
 
 
 
 
 
    0
    0
 
      
 	               
 	                
 	                         
  
 
 
      
 	                
 
 	                     
 
 	    
 		              
 	
 		            
 	 
 	
 	                    
 
  
 
      
 	     0 
 		       
 	
 		       
 	 
   definiera  (  X  ,  250  )  definiera  (  Y  ,  350  )  definiera  (  radie  ,  50  )  definiera  (  R  ,  150  )  definiera  (  SECTIONS  ,  15  )  definiera  (  INNER_ANGLE  ,  360  /  SECTIONS  )  define  (  YTTRE_VINKEL  /  (  2  )  *  SECTION  _  _  int  $  i  :=  ;  int  $  j  :=  ;  för  $  i  i  1.  .  SECTIONS  loop  skapa  plats  "F"  &  '  $  i  '  (  x  X  ,  y  Y  ,  r  radie  ,  t  $  i  *  INNER_ANGLE  );  skapa  plats  "Section_"  &  '  $  i  '  (  x  X  ,  y  Y  ,  r  R  ,  t  $  i  *  INNER_ANGLE  );  skapa  övergången  "t"  &  '  $  i  '  &  "_to_"  &  '  $  i  mod  SECTIONS  +  1  '  (  x  X  ,  y  Y  ,  r  R  ,  t  $  i  *  INNER_ANGLE  +  OUTTER_ANGLE  );  ändslinga  ;  _  för  $  i  i  1.  .  SECTIONS  loop  anslut  plats  "Section_"  &  '  $  i  '  till  övergången  "t"  &  '  $  i  '  &  "_to_"  &  '  $  i  mod  SECTIONS  +  1  ';  koppla  övergång  "t"  &  '  $  i  '  &  "_to_"  &  '  $  i  mod  SECTIONS  +  1  '  för att  placera  "Section_"  &  '  $  i  mod  SECTIONS  +  1  ';  om  $  i  /=  1  anslut  sedan  plats  "F"  &  '  $  i  '  till  övergången  "t"  &  '  $  i  -  1  '  &  "_to_"  &  '  $  i  ';  annars  anslut  plats  "F1"  till  övergången  "t"  &  '  SECTIONS  '  &  "_to_"  &  '  1  ';  sluta  om  ;  koppla  övergången  "t"  &  '  $  i  mod  SECTIONS  +  1  '  &  "_to_"  &  '(  $  i  +  1  )  mod  SECTIONS  +  1  '  för att  placera  "F"  &  '  $  i  ';  ändslinga  ;  _  för  $  i  i  1.  .  SECTIONS  loop  om  $  i  mod  3  =  ställ  sedan  "Section_"  &  '  $  i  '  till  markering  "1  "  ;  annars  sätt  "F"  &  '  $  i  '  till  markering  "1  "  ;  sluta  om  ;  ändslinga  ;  _ 

Vilket ger följande graf:Trains.png

externa länkar

Fullständig dokumentation finns tillgänglig här .