The Petri Net Kernel (PNK) version 2.0 provides an infrastrucure for building Petri net tools. Copyright (C) 1999-2001 Petri Net Kernel Team (Humboldt-University Berlin, Germany) pnk@informatik.hu-berlin.de Table of Contents ----------------- * License Agreement * Quick Start + Download and Run + First steps - Open, Edit and Save Nets + Start a first Simulator Session * Distributed Files License Agreement ----------------- The PNK version 2.0 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License (see file gpl.txt) as published by the Free Software Foundation; version 2 of the license. Furthermore, this product includes software developed by the "Apache Software Foundation" (http://www.apache.org/) as well as software developed by the "Sun Microsystems, Inc." (http://www.sun.com/). The PNK is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY. You are NOT ALLOWED to CHANGE THE ORIGINAL COPYRIGHT NOTICE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the PNK; if not see http://www.gnu.org/. An application using the Petri Net Kernel MUST GIVE NOTICE OF THIS USE. Please contact ag-pnk@informatik.hu-berlin.de to notify this application. Quick Start ----------- This is just a crash course to get the Petrinet Kernel running. It should give you an overview how to use the Petrinet Kernel. I'm leaving out some important details which will be added soon ... NOTE: It is important that you have installed the jdk1.2.x to use the Petrinet Kernel. Otherwise download it from java.sun.com. If you don't know which jdk version is installed on your system, you may check this by calling the java interpreter's -version option. >java -version Download and Run ---------------- Download the latest PNK2alpha.jar file. Extract the archive on the command line by typing >jar xvf PNK2alpha.jar This creates a new directory PNK2/ containing the source and class files of the Petrinet Kernel. Now you may change to PNK2/ directory >cd PNK2 and take a look at it's contents. You should find something like this * jaxp.jar - api for reading and writing xml files * crimson.jar - api for reading and writing xml files * PNK2.jar - archive of the Petrinet Kernel's class files * PNK2sources.jar - archive of the Petrinet Kernel's source files * Makefile - with this you may compile sources by hand * sampleNets - contains some saved netexamples * netTypeSpecifications - contains examples for a net's specification * toolSpecification - contains some toolspecification examples * icons - icons used by applications Then start up Petrinet Kernel using the -jar option of the java interpreter. >java -jar PNK2.jar You may also compile sources by hand. Therefore you possibly have to extract a source file archive. >jar xvf PNK2sources.jar This command installs a directory tree of source files. Now take notice of the makefile in the PNK2/ root directory. Modify it to your requirements and enter >make run This command should compile all files and run the Petrinet Kernel. If it does not, please check the path to your java2 interpreter and java2 compiler. You may edit the path in the headline of the makefile. Verify also the correctness of the CLASSPATH variable. It should at least point to the crimson.jar and jaxp.jar archives distributed with the pnk.jar archive. These two file archives are necessary for loading and writing xml and pnml files. If the makefile doesn't work you may generally start the Petrinet Kernel by typing a commandline like this: >java -classpath .:jaxp.jar:crimson.jar \ de.huberlin.informatik.pnk.appControl.ApplicationControl [] In this case it is important that you are currently in the root directory of the Petrinet Kernel. The `toolspec` argument is optional and should point to a valid `toolSpecification.xml` file. This file contains data of known nettypes and their applications. It is recommended that you compose your own specification file. Therefore you find some examples in the `toolSpecifications/` directory. First steps - Open, Edit and Save Nets -------------------------------------- Now I will give you a short tutorial how you can play around with the Petrinet Kernel. In this section I tell you how you may open or edit nets and how you may invoke applications to work on your net. When launching the Petrinet Kernel the ApplicationControl's window should appear. In the ApplicationControl's menubar you find a File menu for opening existing nets, creating new nets and saving nets. There should also be a Net menu for starting applications or switching between them. At first you have to choose your nettype. You may open the File menu. If you select the File -> new Net menuentry a submenu with a list of different nettypes appears. Click on one of these menuitems. You can also select the File -> Open menuentry to open an existing net. Some interesting netexamples are stored in the sampleNets/ directory. As default a editor start's to display the net. Everytime you invoke an application it's menu is shown in the ApplicationControl's menubar. So now you should find there the editor's menu. You may add objects like places, transitions and arcs to the net. In the editor's menu you select the Place checkbox or the Transition checkbox. Then click on an open editorpage. Every mouseclick should create a new object. Then choose the Arc checkbox and mouseclick on a place. The place should change it's color indicating that it is selected as an arc's initialnode. Now mouseclick a transition and a new arc appears. You may want to drag around some places and transitions to make your net look lovely. You achieve this by mouseclicking in an object and hold the mousebutton pressed while moving your mouse. After this you usually want edit the extensions of some objects. For example set the name and marking of places, the inscriptions of several arcs or the guards of transition. Which of these extensions exists depends on the nettype. To edit an extension you choose the Edit checkbox in editor's popupmenu. Now a mouseclick on a place, transition or arc will open a dialog frame where you may set new values for the objects extensions. Then it is recommended that you save your net with the File -> save or File -> save as menu and choose ApplicationControl's Net menu to start a further application for example a simulator. Start a first Simulator Session ------------------------------- Choose Net -> Start Application -> Simulator. This creates a new instance of the simulator. Now the simulator's menu should appear in the ApplicationControl's menubar. You should also see a dialog frame with a CANCEL button. To run the simulator choose the Simulator -> Start menu from ApplicationControl's menubar. If there is any concessioned transition in the net the simulator will emphasize it in the editor. You may fire a concessioned transition by mouseclicking into it. Continue these steps until you are tired or there is no concessioned transition anymore. In the first case press the CANCEL button in the simulator's dialog frame. (It is recommended that you don't choose Simulator -> Stop from ApplicationControl's menubar, because it's not yet correctly implemented.) In the last case the simulator stops automatically. Distributed Files ----------------- Root directory: ./Makefile ./README.txt ./PNK2.jar ./PNK2src.jar ./jaxp.jar ./crimson.jar ./sampleNets ./netTypeSpecifications ./toolSpecifications ./gpl.txt ./License-ASF ./License-RI.html Examples for toolspecifications ... * toolSpecifications/: + net2pnmlApp.xml + toolSpecification.dtd + toolSpecification.xml + toolSpecification1.xml + toolSpecification2.xml + toolSpecification3.xml Examples for nettypespecifications ... * netTypeSpecifications/: + BlackTokenNet.xml + Echo.xml + GHSGraph.xml + HLNet.xml + PTNet.xml + bagNet.xml + dawnGuard.xml + graph.xml + netTypeSpecification.dtd + netTypesPytJava.table + signatureTable.dtd + signatureTable.xml + subrange.xml + timedNet.xml There are also some examples for nets ... * sampleNets/: + HLDinner.net + ProducerConsumerSystem.pnml + ProducerConsumerSystem1.pnml + ProducerConsumerSystem2.pnml + ProducerConsumerSystem3Pages.pnml + bag.pnml + blackToken.pnml + connectivity.pnml + connectivity.xml + dinner.net + echo.pnml + echoInit.pnml + maximumFinding.pnml + maximumFinding.xml + ptNet.pnml + ptNet.xml + shortestPath.pnml + shortestPath.xml + subrange.pnml + timeNet.pnml + wzk.net The Petrinet Kernel's sources are a bunch of packages ... * de.huberlin.informatik.pnk.kernel: + Arc.java + BlockStructure.java + Edge.java + Extendable.java + Extension.java + Graph.java + Kerntest.java + Member.java + NameExtension.java + Net.java + Node.java + Place.java + PlaceArc.java + Specification.java + SpecificationTable.java + Transition.java + TransitionArc.java * de.huberlin.informatik.pnk.kernel.base: + ActionObject.java + ChangeExtension.java + ChangeSourceAction.java + ChangeTargetAction.java + DeleteAction.java + FlattenAction.java + JoinInterfaceNodeAction.java + NetObservable.java + NetObserver.java + NewArcAction.java + NewBlockAction.java + NewNetAction.java + NewPlaceAction.java + NewPlaceArcAction.java + NewTransitionAction.java + NewTransitionArcAction.java + RegisterInterfaceAction.java + RegisterSonAction.java + SplitInterfaceAction.java + UnregisterInterfaceAction.java + UnregisterSonAction.java * de.huberlin.informatik.pnk.app: + Application.java + ApplicationB.java + BspApplication1.java + BspApplication2.java + GHSSimulator.java + GraphAlgorithmSimulator.java + MarkingsToInitial.java + Simulator.java * de.huberlin.informatik.pnk.app.base: + AnnotateObjectsAction.java + ApplicationACInterface.java + ApplicationAWInterface.java + ApplicationNetDialog.java + ApplicationRequests.java + EmphasizeObjectsAction.java + MetaActionObject.java + MetaApplication.java + MetaJFrame.java + NetObserver.java + ResetAnnotationsAction.java + ResetEmphasizeAction.java + SelectObjectAction.java + SelectObjectsAction.java + StructuredNetObserver.java + UnAnnotateObjectsAction.java + UnEmphasizeObjectsAction.java * de.huberlin.informatik.pnk.appControl: + AAObject.java + ACResources.java + ANObject.java + ATObject.java + ApplicationControl.java + ApplicationControlMenu.java + CTObject.java + IOTObject.java + InOut.java + NFObject.java + NTObject.java + NetInOut.java + NetParseException.java + PNKClassLoader.java + PNKDialog.java + PnmlInOut.java + TestInOut.java + ToolSpecification.java + Viewer.java * de.huberlin.informatik.pnk.appControl.base: + ACApplicationInterface.java + PnkFileFilter.java * de.huberlin.informatik.pnk.netElementExtensions.base: + FiringRule.java + Inscription.java + Marking.java + Mode.java + Type.java * de.huberlin.informatik.pnk.editor: + AllSelectedDialog.java + Annotation.java + Arc.java + Draw.java + Edge.java + EditDialog.java + Editor.java + EditorMenu.java + EditorWindow.java + Extension.java + GraphProxy.java + GruenLookAndFeel.java + Label.java + LogoWin.java + MemberSprite.java + MemberSpriteNode.java + NetLoader.java + NetWriter.java + Node.java + Page.java + PageMouseListener.java + PageVector.java + Place.java + PlaceArc.java + ReferenceTable.java + SelectDialog.java + Sprite.java + SpriteVector.java + Transition.java + TransitionArc.java + ViewPane.java * de.huberlin.informatik.pnk.exceptions: + ExtensionValueException.java + KernelUseException.java + NetSpecificationException.java