petri net kernel (pnk) wellington joão da silva mestrado ciência computação

39
Petri Net Kernel (PNK) Wellington João da Silva Wellington João da Silva Mestrado Ciência Mestrado Ciência Computação Computação

Upload: daniel-vidal

Post on 07-Apr-2016

218 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Petri Net Kernel (PNK)

Wellington João da SilvaWellington João da SilvaMestrado Ciência ComputaçãoMestrado Ciência Computação

Page 2: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Introdução

Petri Net Kernel (PNK)Petri Net Kernel (PNK) Infra-estrutura para a construção de ferramentas Infra-estrutura para a construção de ferramentas

baseadas em Redes de Petri (Petri net tools).baseadas em Redes de Petri (Petri net tools). Rede de PetriRede de Petri

Uma rede de Petri é um grafo direcionado, Uma rede de Petri é um grafo direcionado, biparticionado, com nós chamados lugares e biparticionado, com nós chamados lugares e transições. transições.

Page 3: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Características Libera o programador de uma ferramenta baseada em Libera o programador de uma ferramenta baseada em

Redes de Petri da necessidade de implementarRedes de Petri da necessidade de implementar Operações padrão de Redes de Petri,Operações padrão de Redes de Petri, Interfaces de usuário, Interfaces de usuário, Editores gráficos Editores gráficos Parsers para carregar uma rede a partir de um arquivo.Parsers para carregar uma rede a partir de um arquivo.

Programador necessita concentrar-se apenas na Programador necessita concentrar-se apenas na funcionalidade, tal como funcionalidade, tal como Análise, Análise, VerificaçãoVerificação Algoritmos de simulação. Algoritmos de simulação.

Page 4: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Características PNK pode ser usado com qualquer tipo de PNK pode ser usado com qualquer tipo de

rederede Pode ser usado para integrar ferramentas Pode ser usado para integrar ferramentas

baseadas em Redes de Petri existentes ou baseadas em Redes de Petri existentes ou módulos de análisemódulos de análise INA-PilotINA-Pilot

PNK permite a definição de novos tipos de PNK permite a definição de novos tipos de redes de Petriredes de Petri

Page 5: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

PNK Software

PNK versão 2.0 é software livrePNK versão 2.0 é software livre Pode ser distribuído e/ou modificado sob a Pode ser distribuído e/ou modificado sob a

licença GNU Library General Public licença GNU Library General Public LicenseLicense

Page 6: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Instalação e execução

Download do arquivo Download do arquivo PNK2alpha.PNK2alpha.jarjar. . Extrair o arquivo na linha de comando Extrair o arquivo na linha de comando digitandodigitando jar xvf PNK2alpha.jarjar xvf PNK2alpha.jar

Iniciar o Petrinet Kernel usando a opcao Iniciar o Petrinet Kernel usando a opcao --jarjar do interpretador Java. do interpretador Java. java -jar PNK2.jarjava -jar PNK2.jar

Page 7: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Abrir, editar e salvar redes

File -> Open

Page 8: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Abrir, editar e salvar redes

Page 9: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Abrir, editar e salvar redes

Page 10: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Iniciar sessão de simulação Escolher Net -> Start Application -> SimulatorEscolher Net -> Start Application -> Simulator Menu do simulador deve aparecer no menu do Menu do simulador deve aparecer no menu do

ApplicationControlApplicationControl Escolher Simulator -> Start para iniciar o simuladorEscolher Simulator -> Start para iniciar o simulador Aparecerá uma janela com um botão CANCELAparecerá uma janela com um botão CANCEL Clicar nas transições habilitadasClicar nas transições habilitadas OBS: não utilizar Simulator -> Stop no menubar do OBS: não utilizar Simulator -> Stop no menubar do

ApplicationControl porque esta operação não esta ApplicationControl porque esta operação não esta corretamente implementadacorretamente implementada

Page 11: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

PNK Software PacotesPacotes

de.huberlin.informatik.pnk.kernel de.huberlin.informatik.pnk.kernel de.huberlin.informatik.pnk.kernel.base de.huberlin.informatik.pnk.kernel.base de.huberlin.informatik.pnk.app de.huberlin.informatik.pnk.app de.huberlin.informatik.pnk.app.base de.huberlin.informatik.pnk.app.base de.huberlin.informatik.pnk.appControl de.huberlin.informatik.pnk.appControl de.huberlin.informatik.pnk.appControl.base de.huberlin.informatik.pnk.appControl.base de.huberlin.informatik.pnk.netElementExtensions de.huberlin.informatik.pnk.netElementExtensions de.huberlin.informatik.pnk.netElementExtensions.base de.huberlin.informatik.pnk.netElementExtensions.base de.huberlin.informatik.pnk.editor de.huberlin.informatik.pnk.editor de.huberlin.informatik.pnk.exceptions de.huberlin.informatik.pnk.exceptions

Page 12: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

PNK Software Pacotes (características básicas)Pacotes (características básicas)

kernel –kernel – definição de Graph, Net, e elementos associados (Node, definição de Graph, Net, e elementos associados (Node, Arc, etc) Arc, etc)

app –app – suporte ao desenvolvimento de aplicações usando PNK suporte ao desenvolvimento de aplicações usando PNK (MetaApplication)(MetaApplication)

appControl –appControl – I/O, parse de arquivos XML I/O, parse de arquivos XML netElementExtensions –netElementExtensions – definição e implementação de extensões definição e implementação de extensões

para elementos da rede (FiringRule, Inscription, Marking, Mode, para elementos da rede (FiringRule, Inscription, Marking, Mode, etc)etc)

editor –editor – suporte para o desenvolvimento de editores usando PNK suporte para o desenvolvimento de editores usando PNK exceptions –exceptions – exceções definidas no PNK exceções definidas no PNK

Page 13: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Kernel

Net Net Arc Arc Place Place Transition Transition Extension Extension Specification Specification

Page 14: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Net class

Descreve uma rede de PetriDescreve uma rede de Petripublic final class Net extends Graph {public final class Net extends Graph { public Vector getArcs()public Vector getArcs() public Vector getPlaces() public Vector getPlaces() public Vector getTransitions()public Vector getTransitions() public FiringRule getFiringRule() public FiringRule getFiringRule() } // class Net} // class Net

Page 15: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Place class Descreve uma lugar em uma rede de PetriDescreve uma lugar em uma rede de Petripublic final class Place extends Nodepublic final class Place extends Node public Place(Net net, String name, Object public Place(Net net, String name, Object

initiator)initiator) public void delete(Object initiator)public void delete(Object initiator) public Marking getMarking()public Marking getMarking() public void setMarkingAsInitial()public void setMarkingAsInitial()} // class Place} // class Place

Page 16: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Transition Descreve uma transição em uma rede de Descreve uma transição em uma rede de

PetriPetripublic final class Transition extends Node {public final class Transition extends Node {

public Transition(Net net, String public Transition(Net net, String name, Object initiator)name, Object initiator)

public void delete(Object initiator)public void delete(Object initiator) public Mode getMode() public Mode getMode() } // class Transition } // class Transition

Page 17: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Arc class Descreve um arco em uma rede de PetriDescreve um arco em uma rede de Petripublic class Arc extends Edge {public class Arc extends Edge { public Arc(Net net, Node source, Node target, Object initiator)public Arc(Net net, Node source, Node target, Object initiator) public Inscription getInscription()public Inscription getInscription() public Place getPlace()public Place getPlace() public Transition getTransition()public Transition getTransition() /// METHODS INHERITED FROM class Edge: /// METHODS INHERITED FROM class Edge: public Node getSource()public Node getSource() public Node getTarget()public Node getTarget()} // class Arc } // class Arc

Page 18: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

ApplicationControl class

Gerencia todas as redes e aplicações do Petri Net Gerencia todas as redes e aplicações do Petri Net Kernel. Kernel.

Faz o parse de alguns arquivos XML para Faz o parse de alguns arquivos XML para configuraçãoconfiguração Especificação de todos os tipos de rede (diretório Especificação de todos os tipos de rede (diretório

netTypeSpecification/netTypeSpecification/)) Lista de aplicações válidas para cada Lista de aplicações válidas para cada

rede(arquivo rede(arquivo toolSpecification.xmltoolSpecification.xml)) Carrega(load) e escreve redes como arquivos PNMLCarrega(load) e escreve redes como arquivos PNML

Page 19: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Net Type Specification<?xml version="1.0" encoding="UTF-8"?><?xml version="1.0" encoding="UTF-8"?><!DOCTYPE netTypeSpecification SYSTEM <!DOCTYPE netTypeSpecification SYSTEM

"netTypeSpecification.dtd">"netTypeSpecification.dtd"><netTypeSpecification name="graph"><netTypeSpecification name="graph">

<extendable class="de.huberlin.informatik.pnk.kernel.Net"><extendable class="de.huberlin.informatik.pnk.kernel.Net"></extendable></extendable><extendable class="de.huberlin.informatik.pnk.kernel.Place"><extendable class="de.huberlin.informatik.pnk.kernel.Place"></extendable></extendable><extendable class="de.huberlin.informatik.pnk.kernel.PlaceArc"><extendable class="de.huberlin.informatik.pnk.kernel.PlaceArc"></extendable></extendable>

</netTypeSpecification></netTypeSpecification>

Page 20: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Tool Specification Estruturado em três partesEstruturado em três partes

Declaração dos tipos de redesDeclaração dos tipos de redes Lista de aplicações com relação aos tipos Lista de aplicações com relação aos tipos

de redede rede Formato de entrada/saída (PNML no Formato de entrada/saída (PNML no

caso)caso) Para cada aplicação deve-se especificar os Para cada aplicação deve-se especificar os

tipos de rede possíveis.tipos de rede possíveis.

Page 21: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Tool Specification< ?xml version="1.0" encoding="UTF-8"? >< ?xml version="1.0" encoding="UTF-8"? >< !DOCTYPE toolSpecification SYSTEM "toolSpecification.dtd" >< !DOCTYPE toolSpecification SYSTEM "toolSpecification.dtd" >< toolSpecification >< toolSpecification > < !-- Nettypes -- >< !-- Nettypes -- > < nettype id="n1" typeSpecification="file:netTypeSpecifications/simpleHLNet.xml"/ >< nettype id="n1" typeSpecification="file:netTypeSpecifications/simpleHLNet.xml"/ > < nettype id="n2" typeSpecification="file:netTypeSpecifications/dawnNet.xml"/ >< nettype id="n2" typeSpecification="file:netTypeSpecifications/dawnNet.xml"/ > < nettype id="n3" typeSpecification="file:netTypeSpecifications/Echo.xml"/ >< nettype id="n3" typeSpecification="file:netTypeSpecifications/Echo.xml"/ > < !-- Applications -- >< !-- Applications -- > < application id="a1" mainClass="de.huberlin.informatik.pnk.editor.Editor" < application id="a1" mainClass="de.huberlin.informatik.pnk.editor.Editor"

maxinstances="inf" >maxinstances="inf" > < allowedNettypes >< allowedNettypes > < ntref ref="n1"/ >< ntref ref="n1"/ > < ntref ref="n2"/ >< ntref ref="n2"/ > < ntref ref="n3"/ >< ntref ref="n3"/ > < /allowedNettypes >< /allowedNettypes > < /application >< /application >

Page 22: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Tool Specification < !-- Input / Output -- >< !-- Input / Output -- > < format id="pnml" ioClass="de.huberlin.informatik.pnk.appControl.PnmlInOut" >< format id="pnml" ioClass="de.huberlin.informatik.pnk.appControl.PnmlInOut" > < allowedNettypes >< allowedNettypes > < ntref ref="n1"/ >< ntref ref="n1"/ > < ntref ref="n2"/ >< ntref ref="n2"/ > < /allowedNettypes >< /allowedNettypes > < /format >< /format > < format id="io" ioClass="de.huberlin.informatik.pnk.appControl.InOut" >< format id="io" ioClass="de.huberlin.informatik.pnk.appControl.InOut" > < /format >< /format > < !-- default settings -- >< !-- default settings -- > < standardNettype ref="n1"/ >< standardNettype ref="n1"/ > < standardApplication ref="a1"/ >< standardApplication ref="a1"/ > < standardFormat ref="pnml"/ >< standardFormat ref="pnml"/ >< /toolSpecification > < /toolSpecification >

Page 23: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Editor class

Quando uma rede é aberta ela é mostrada Quando uma rede é aberta ela é mostrada por default em um editorpor default em um editor

Para permitir que aplicações trabalhem com Para permitir que aplicações trabalhem com um editor é recomendado a utilização da um editor é recomendado a utilização da interface interface ApplicationNetDialogApplicationNetDialog..

Page 24: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

ApplicationNetDialogpackage de.huberlin.informatik.pnk.app.base;package de.huberlin.informatik.pnk.app.base;......// If an application want's to request the editor to emphasize, anotate or select one/some object[s], it has to // If an application want's to request the editor to emphasize, anotate or select one/some object[s], it has to // use the methods of this interface.// use the methods of this interface.public interface ApplicationNetDialog {public interface ApplicationNetDialog { ...... public void anotateObjects(Hashtable anotations);public void anotateObjects(Hashtable anotations); public void emphasizeObjects(Vector objects);public void emphasizeObjects(Vector objects); public Vector selectObjects(Vector objects);public Vector selectObjects(Vector objects); public void unAnotateObjects(Vector objects);public void unAnotateObjects(Vector objects); public void unEmphasizeObjects(Vector objects);public void unEmphasizeObjects(Vector objects); public void setPosition(Object netobject, int pageId, int x, int y);public void setPosition(Object netobject, int pageId, int x, int y);} //interface ApplicationNetDialog} //interface ApplicationNetDialog

Page 25: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Escrevendo Nettypes

PNK permite que novos tipos de rede sejam PNK permite que novos tipos de rede sejam especificadosespecificados

É preciso informar no toolspecificationfile É preciso informar no toolspecificationfile que um novo tipo de rede existe e onde ele que um novo tipo de rede existe e onde ele pode ser encontrado pode ser encontrado

Page 26: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Tool Specification File< !DOCTYPE toolSpecification SYSTEM "toolSpecification.dtd" >< !DOCTYPE toolSpecification SYSTEM "toolSpecification.dtd" >< toolSpecification >< toolSpecification > < !-- Nettypes -- >< !-- Nettypes -- > < nettype id="n1" < nettype id="n1"

typeSpecification="file:netTypeSpecifications/PTNet.xml"/ >typeSpecification="file:netTypeSpecifications/PTNet.xml"/ > < !-- Applications -- >< !-- Applications -- > < !-- Here comes a list of applications ... -- >< !-- Here comes a list of applications ... -- > < !-- Input / Output -- >< !-- Input / Output -- > < !-- Here comes a list of Input / Output filters ... -- >< !-- Here comes a list of Input / Output filters ... -- >< /toolSpecification >< /toolSpecification >

Page 27: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Net Type Specification< ?xml version="1.0" encoding="UTF-8"? >< ?xml version="1.0" encoding="UTF-8"? >< !DOCTYPE netTypeSpecification SYSTEM "netTypeSpecification.dtd" >< !DOCTYPE netTypeSpecification SYSTEM "netTypeSpecification.dtd" >< netTypeSpecification name="PTNet" >< netTypeSpecification name="PTNet" > < extendable class="de.huberlin.informatik.pnk.kernel.Net" >< extendable class="de.huberlin.informatik.pnk.kernel.Net" > < extension name="firingRule" class="de.huberlin.informatik.pnk.netElementExtensions.llNet.SimpleRule"/ >< extension name="firingRule" class="de.huberlin.informatik.pnk.netElementExtensions.llNet.SimpleRule"/ > < /extendable >< /extendable > < extendable class="de.huberlin.informatik.pnk.kernel.Place" >< extendable class="de.huberlin.informatik.pnk.kernel.Place" > < extension name="marking" class="de.huberlin.informatik.pnk.netElementExtensions.llNet.NaturalNumber"/ < extension name="marking" class="de.huberlin.informatik.pnk.netElementExtensions.llNet.NaturalNumber"/

>> < extension name="initialMarking" < extension name="initialMarking"

class="de.huberlin.informatik.pnk.netElementExtensions.llNet.NaturalNumber"/ >class="de.huberlin.informatik.pnk.netElementExtensions.llNet.NaturalNumber"/ > < /extendable >< /extendable > < extendable class="de.huberlin.informatik.pnk.kernel.Transition" >< extendable class="de.huberlin.informatik.pnk.kernel.Transition" > < /extendable >< /extendable > < extendable class="de.huberlin.informatik.pnk.kernel.Arc" >< extendable class="de.huberlin.informatik.pnk.kernel.Arc" > < extension name="inscription" < extension name="inscription"

class="de.huberlin.informatik.pnk.netElementExtensions.llNet.NaturalNumber1"/ >class="de.huberlin.informatik.pnk.netElementExtensions.llNet.NaturalNumber1"/ > < /extendable >< /extendable >< /netTypeSpecification >< /netTypeSpecification >

Page 28: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Extendables Objects

Net Net Arc Arc Place Place Transition Transition Extension Extension

Page 29: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Extension Objects

MarkingMarking InscriptionInscription FiringRuleFiringRule ModeMode

Page 30: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Marking // // Esta classe descreve a coleção de tokens em um lugar de uma rede de Petri Esta classe descreve a coleção de tokens em um lugar de uma rede de Petri

public abstract class Marking public abstract class Marking extends Extension implements Inscription {extends Extension implements Inscription { // / Returns true if marking is contained in this marking./ Returns true if marking is contained in this marking. abstract public boolean contains(Marking marking);abstract public boolean contains(Marking marking);// // Adds the markings. This method is called byAdds the markings. This method is called by the add(Marking marking) method the add(Marking marking) method of thisof this// // marking.marking.abstract protected void localAdd(Marking marking);abstract protected void localAdd(Marking marking);// / Subtracts the markings. This method is called by/ Subtracts the markings. This method is called by the add(Marking marking) methodthe add(Marking marking) method of of // / / this marking.this marking.abstract protected void localSub(Marking marking);abstract protected void localSub(Marking marking); ... ... } // public interface Marking} // public interface Marking

Page 31: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Inscription

Esta classe descreve inscrições de Esta classe descreve inscrições de arcosarcos

public interface Inscription { public interface Inscription { Marking evaluate(); Marking evaluate(); } }

Page 32: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

FiringRulepublic interface FiringRule {public interface FiringRule { // Fires the set of {@link Transition transitions} given by transitions. // Fires the set of {@link Transition transitions} given by transitions. // The transitions are fired simultaneously. // The transitions are fired simultaneously. void fire(Vector transitions); void fire(Vector transitions);

// Returns the set of all simultaneously fireable sets (steps) of transitions. // Returns the set of all simultaneously fireable sets (steps) of transitions. Vector getAllSteps(); Vector getAllSteps();

// Returns a simultaneously fireable set (step) of transitions. // Returns a simultaneously fireable set (step) of transitions. Vector getStep(); Vector getStep();

// Returns whether a set of transitions is simultaneously fireable. // Returns whether a set of transitions is simultaneously fireable. boolean isStep( Vector transitions); boolean isStep( Vector transitions); ......} // public interface FiringRule} // public interface FiringRule

Page 33: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Mode Esta classe descreve o modo de disparo de uma Esta classe descreve o modo de disparo de uma

transiçãotransição Ele será usado para transformar a inscrição de um arco Ele será usado para transformar a inscrição de um arco

em uma marcação do tipo de rede de Petri, de acordo em uma marcação do tipo de rede de Petri, de acordo com o modo de disparocom o modo de disparo

public interface Mode {public interface Mode { // An inscription of an arc// An inscription of an arc is evaluatedis evaluated to a to a //// m marking depending on this mode.arking depending on this mode. Marking evaluate( Inscription inscription); Marking evaluate( Inscription inscription); } // public interface Mode} // public interface Mode

Page 34: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Escrevendo aplicações com PNK Cada aplicação tem que estender a classe Cada aplicação tem que estender a classe

MetaApplicationMetaApplication para herdar importantes para herdar importantes funcionalidades básicasfuncionalidades básicas

Aplicação pode definir seu nome uma um campo Aplicação pode definir seu nome uma um campo de classe estático chamado de classe estático chamado staticAppNamestaticAppName

Aplicação deve implementar método run()Aplicação deve implementar método run() Interface Interface FiringRuleFiringRule deve ser implementada deve ser implementada

Page 35: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Aplicação simplespackage de.huberlin.informatik.pnk.app;package de.huberlin.informatik.pnk.app;

//import list here;//import list here;

public class BspApplication1 extends MetaApplication {public class BspApplication1 extends MetaApplication {public static String staticAppName = "BspApplication1";public static String staticAppName = "BspApplication1";

public BspApplication1(ApplicationControl ac) {public BspApplication1(ApplicationControl ac) { super(ac);super(ac);}}public void run() {public void run() {

System.out.println(" Application started ###############");System.out.println(" Application started ###############");this.quitMe();this.quitMe();

}}}}

Page 36: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Aplicação Simulatorpackage de.huberlin.informatik.pnk.app;package de.huberlin.informatik.pnk.app;

// import list here;// import list here;

// This class implements the standard PNK simulator application.// This class implements the standard PNK simulator application.public class Simulator extends MetaApplication {public class Simulator extends MetaApplication { public boolean startAsThread = true;public boolean startAsThread = true; public static String staticAppName = "Simulator"; public static String staticAppName = "Simulator";

public Simulator(ApplicationControl ac) {public Simulator(ApplicationControl ac) { super(ac);super(ac); }} // Start the simulator, that means:// Start the simulator, that means: // 1. Get the FiringRule for the net and// 1. Get the FiringRule for the net and // 2. call its method simulateWithUserInteraction// 2. call its method simulateWithUserInteraction public void run() {public void run() { FiringRule rule = (FiringRule) net.getExtension("firingRule");FiringRule rule = (FiringRule) net.getExtension("firingRule"); rule.simulateWithUserInteraction(this);rule.simulateWithUserInteraction(this); }}} // Simulator} // Simulator

Page 37: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

SimpleRulepublic class SimpleRule extends FiringRule {public class SimpleRule extends FiringRule { ...... public void simulateWithUserInteraction(MetaApplication app) {public void simulateWithUserInteraction(MetaApplication app) { checkContextAndParseExtensions();checkContextAndParseExtensions(); ApplicationControl ac = app.getApplicationControl();ApplicationControl ac = app.getApplicationControl(); Net net = (Net) getGraph();Net net = (Net) getGraph(); Vector concessioned = getAllConcessioned( ); //all concessioned transitionsVector concessioned = getAllConcessioned( ); //all concessioned transitions

if(conc == null || conc.isEmpty()) return;if(conc == null || conc.isEmpty()) return; Transition transition = (Transition) (new SelectObjectAction(ac, net, app, Transition transition = (Transition) (new SelectObjectAction(ac, net, app,

concessioned)).invokeAction();concessioned)).invokeAction();

while(transition != null) {while(transition != null) { fire(transition);fire(transition); concessioned = getAllConcessioned();concessioned = getAllConcessioned(); if(concessioned == null || concessioned.isEmpty()) return;if(concessioned == null || concessioned.isEmpty()) return; transition = (Transition) (new SelectObjectAction(ac, net, app, concessioned)).invokeAction();transition = (Transition) (new SelectObjectAction(ac, net, app, concessioned)).invokeAction(); }} }} ...... } // class SimpleRule} // class SimpleRule

Page 38: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Resumo PNK é uma infra-estrutura para a construção de PNK é uma infra-estrutura para a construção de

ferramentas baseadas em Redes de Petriferramentas baseadas em Redes de Petri PNK permite e definição de novos tipos de redesPNK permite e definição de novos tipos de redes PNK permite a criação de aplicações com ênfase PNK permite a criação de aplicações com ênfase

dada à funcionalidadedada à funcionalidade PNK permite interfaceamento com ferramentas de PNK permite interfaceamento com ferramentas de

rede de Petri existentesrede de Petri existentes

Page 39: Petri Net Kernel (PNK) Wellington João da Silva Mestrado Ciência Computação

Referências PNK User´s Manual. URL: PNK User´s Manual. URL:

http://www.informatik.hu-berlin.de/top/pnk/doku/pnk-guide/quickStart.htmlhttp://www.informatik.hu-berlin.de/top/pnk/doku/pnk-guide/quickStart.html Petri Net Kernel. Petri Net Kernel. URL:http://www.informatik.hu-berlin.de/top/pnk/URL:http://www.informatik.hu-berlin.de/top/pnk/ Reiner Schulz. The Petri Net Kernel: File Format Documentation. März 1999 Reiner Schulz. The Petri Net Kernel: File Format Documentation. März 1999

URL: URL: http://www.informatik.hu-berlin.de/top/pnk/literatur/pnkFileFormatExt.pshttp://www.informatik.hu-berlin.de/top/pnk/literatur/pnkFileFormatExt.ps

Ekkart Kindler , Frank Oschmann.The Petri Net Kernel: An INA-Ekkart Kindler , Frank Oschmann.The Petri Net Kernel: An INA-Pilot.Oktober 1998 URL: Pilot.Oktober 1998 URL: http://www.informatik.hu-berlin.de/top/pnk/literatur/AWPN98-INA-PNK.pshttp://www.informatik.hu-berlin.de/top/pnk/literatur/AWPN98-INA-PNK.ps

J. Hauptmann , B. Hohberg , E. Kindler , I. Schwenzer , M. Weber. The Petri J. Hauptmann , B. Hohberg , E. Kindler , I. Schwenzer , M. Weber. The Petri Net Kernel - Documentation of the Application Interface. Februar 1998. URL: Net Kernel - Documentation of the Application Interface. Februar 1998. URL: http://www.informatik.hu-berlin.de/top/pnk/literatur/PNK-Doc-engl.pshttp://www.informatik.hu-berlin.de/top/pnk/literatur/PNK-Doc-engl.ps