Petri-Netz

Über Petri-Netze

Ein Petri-Netz ist der grundlegende Formalismus zur Modellierung von Nebenläufigkeit, Synchronisation und Ressourcenfluss in diskreten Ereignissystemen — erfunden von Carl Adam Petri im Jahr 1962 und seitdem kontinuierlich eingesetzt in Informatik, Steuerungstechnik, Fertigung und Geschäftsprozessmodellierung. Die Notation ist klein und sofort erkennbar: eine Stelle ist ein Kreis, eine Transition ist ein Balken, ein Bogen trägt ein Gewicht, und der dynamische Zustand des Systems ist eine Streuung von Token, die in den Stellen sitzen.

Was Schematex's petri-Engine von einer Drag-and-Drop-Formbibliothek unterscheidet, ist, dass sie die Dynamik versteht. Sie kennt eine Markierung (welche Stellen wie viele Token halten), berechnet, welche Transitionen aktiviert sind (jede Eingangsstelle hat mindestens das Bogengewicht an Token — grün hervorgehoben), und kann eine Transition schalten, um die nächste Markierung zu erzeugen. Das Rendern ist nachgelagert der Semantik — dieselbe Haltung, die pert gegenüber der Planung einnimmt. Abzugrenzen von Zustandsdiagrammen (ein aktiver Zustand, keine Token-Verteilung), SFC (ein eingeschränktes sicheres Petri-Netz für SPS) und BPMN (dessen Token-Semantik durch Reduktion auf Workflow-Petri-Netze definiert ist).

petri·§
↘ preview
100%
Petri net — Classic 4 places, 2 transitions, 7 arcs. Marking {P1:1, P3:2, P4:1}. Enabled: T1. Classic P1 P2 P3 P4 T1 T2
UTF-8 · LF · 14 lines · 151 chars✓ parsed·5.5 ms·5.1 KB SVG

Unter der Anfangsmarkierung ist T1 aktiviert (seine Eingaben P1 und P4 halten jeweils ein Token), daher erhält es den grünen Ring; T2 ist nicht aktiviert (P2 ist leer). Der Rückkoppelbogen P4 -> T1 wird als Rückkantenkurve geroutet.


1. Ihr erstes Netz

Jedes Dokument beginnt mit dem Schlüsselwort petri und einem optionalen Titel, dann werden Stellen und Transitionen vor der Verbindung durch Bögen deklariert:

petri "Minimal"
  place P1 *1
  transition T1
  place P2
  P1 -> T1
  T1 -> P2
  • place <id> — ein Kreis. *1 setzt die anfängliche Token-Anzahl (die Markierung).
  • transition <id> — ein Balken (ein Ereignis/eine Aktion).
  • <a> -> <b> — ein gerichteter Bogen. Bögen sind bipartit: Jeder Bogen geht von Stelle→Transition oder Transition→Stelle, niemals Stelle→Stelle oder Transition→Transition. Wenn Sie einen falsch schreiben, teilt Ihnen die Engine mit, in welcher Zeile.

Anders als einige Schematex-Diagramme werden Knoten nicht automatisch aus Bögen deklariert — weil eine nicht deklarierte ID nicht sicher als Stelle oder Transition typisiert werden kann. Ein Bogen, der auf einen unbekannten Knoten verweist, ist ein lesbarer Fehler.


2. Markierung & Token

Die Markierung gibt an, wie viele Token jede Stelle hält. Drei gleichwertige Möglichkeiten zum Setzen:

place P1 *3            # *n-Kurzform
place P2 tokens: 3     # explizit
place P3 •••           # wörtliche Punkte (1–4)

Oder mehrere auf einmal mit einer marking:-Zeile setzen:

marking: P1=3, P3=2

Token werden als Punkte gerendert (bis zu 4, in einem Raster angeordnet) und als Ziffer darüber hinaus. Erzwingen Sie einen Stil mit tokens: dots | count | auto (Standard auto).


3. Transitionen: sofort vs. zeitgesteuert

transition fast                 # sofort — ein durchgehender Balken (Standard)
transition slow timed rate: 0.8 # zeitgesteuert — eine hohle Box mit einem Rate-Label λ

Sofortige Transitionen schalten in Null-Zeit und werden als klassischer gefüllter Balken dargestellt; zeitgesteuerte Transitionen (die GSPN-Konvention) werden als hohle Box dargestellt und tragen eine optionale rate: (λ). Eine Transition mit einer rate: wird automatisch als zeitgesteuert behandelt. prio: n setzt eine Priorität, und eine [Bedingung] wird als Beschriftung gerendert (in v0.1 nicht ausgewertet).


4. Bogentypen

Vier Bogenköpfe decken das Standard-Nebenläufigkeitsvokabular ab:

P -> T              # Standardbogen (gefüllter Pfeilkopf)
P -> T weight: 2    # Gewicht > 1 wird beschriftet (weight: n oder *n)
P -o T              # Inhibitor — aktiviert nur wenn die Stelle leer ist (hohler Kreiskopf)
P -- T              # Lese-/Testbogen — testet Vorhandensein ohne Verbrauch (kein Kopf)
P => T              # Reset — leert die Stelle wenn die Transition schaltet (Doppelkopf)

Inhibitor- und Reset-Bögen sind nur Stelle→Transition — der Parser lehnt die umgekehrte Richtung ab.


5. Kapazität

Eine Stelle kann begrenzt werden. Ein Schalten, das sie überlaufen würde, ist deaktiviert, und die Stelle wird mit einem gestrichelten Rahmen und einem K=n-Label gezeichnet:

place Buffer capacity: 3

6. Die Dynamik: aktiviert & schalten

Die Engine berechnet die Semantik bei jedem Rendern:

  • Aktivierte Transitionen (jede Eingabe erfüllt; Inhibitor-Eingaben leer; keine Ausgabe würde die Kapazität überschreiten) erhalten einen grünen Ring.
  • Tote Transitionen — solche, die aus der aktuellen Markierung nie schalten können — werden gedämpft dargestellt.
  • Eine fire:-Zeile spielt eine Schaltsequenz ab und rendert die resultierende Markierung:
petri
  place P1 *1
  transition T1
  place P2
  transition T2
  place P3
  P1 -> T1
  T1 -> P2
  P2 -> T2
  T2 -> P3
  fire: T1

Nach dem Schalten von T1 hat sich der Token von P1 → P2 bewegt, und nun ist T2 die aktivierte Transition. Das SVG-<desc> zeichnet die Markierung, die aktivierte Menge und jede erkannte Unterklasse (Zustandsmaschine / Markierter Graph / Workflow-Netz) auf.


7. Layout & Themes

layout: lr     # links nach rechts (Standard)
layout: tb     # oben nach unten

Stellen und Transitionen landen automatisch auf abwechselnden Ebenen; Zyklen werden erkannt und ihre Rückkopplungsbögen als Rückkantenkurven geroutet. Drei Themes:

  • default — Haus-Blau-Grau, mit Grün reserviert für aktiviert und Rot für Inhibitor.
  • monochrome — der treue Murata-1989-Lehrbuchstil; aktiviert erscheint als verdoppelter schwarzer Ring (Farbe fällt auf Form zurück).
  • dark — Catppuccin Mocha.

CJK-Beschriftungen und 「…」 / "…"-Anführungszeichen werden sauber geparst:

petri "生产流程"
  place 原料 *2 「原材料」
  transition 加工
  place 成品
  原料 -> 加工 weight: 2
  加工 -> 成品

Vollständige Spezifikation: Petri Net Standard Reference.


Verwandte Beispiele

Sofort einsetzbare Szenarien aus der Beispielgalerie:

petri·§ Murata 1989 + ISO/IEC 15909-1 (place/transition net)
Petri net — Classic 4 places, 2 transitions, 7 arcs. Marking {P1:1, P3:2, P4:1}. Enabled: T1. Classic P1 P2 P3 P4 T1 T2
The classic Petri net — concurrency with feedback
Murata's canonical place/transition net — one transition forks a token into two concurrent branches that a second transition joins, with a feedback place closing the loop. The engine marks which transitions are enabled in the current marking.
education
petri·§ Murata 1989 / ISO-IEC 15909-1 (place/transition net)
Petri net — Mutual Exclusion — two processes, one resource 5 places, 4 transitions, 12 arcs. Marking {idleA:1, idleB:1, mutex:1}. Enabled: enterA, enterB. Mutual Exclusion — two processes, one resource idleA A idle idleB B idle mutex resource critA A critical critB B critical enterA exitA enterB exitB
Mutual exclusion with a shared resource
The canonical concurrency pattern as a Petri net — two processes competing for a single Mutex token. Either process may enter its critical section, but the shared token guarantees they never do so at the same time. Both entry transitions show as enabled until one fires and consumes the resource.
industrial & process
petri·§ Murata 1989 (place/transition net firing rule)
Petri net — After fire: T1 3 places, 2 transitions, 4 arcs. Marking {P2:1}. Enabled: T2. Class: state machine, workflow net. After fire: T1 P1 P2 P3 T1 T2
Firing a transition advances the marking
The same three-place net before and after firing — the `fire:` directive replays a transition, so the rendered marking is the state *after* the token moved from P1 to P2, and the engine now highlights T2 as the newly enabled transition.
education
petri·§ van der Aalst 1998 workflow nets (a Murata place/transition net)
Petri net — Order workflow 6 places, 4 transitions, 10 arcs. Marking {in:1}. Enabled: split. Class: workflow net. Order workflow in received pick invoice packed billed out shipped split pack bill ship
Order-fulfilment workflow net (WF-net)
A van der Aalst workflow net — a single source place and single sink place bracket an AND-split/join that runs picking and invoicing concurrently before shipping. The engine detects the WF-net structure and reports it in the SVG description.
business & operations
petri·§ Murata 1989 + Marsan 1995 (GSPN timed transitions)
Petri net — Producer / Consumer (bounded buffer) 4 places, 2 transitions, 8 arcs. Marking {pReady:1, free:3, cReady:1}. Enabled: produce. Class: marked graph. Producer / Consumer (bounded buffer) pReady producer ready free free slots used used slots K=3 cReady consumer ready produce deposit consume withdraw λ=0.8
Producer / consumer with a bounded buffer
The bounded-buffer producer/consumer pattern as a Petri net — complementary free/used slot places enforce the buffer size, a timed withdraw transition models the consumer's rate, and place capacity caps the buffer at three slots. Tokens flowing through free→used→free show backpressure as a structural property.
industrial & process

Found this useful?

Schematex is free, fully open source, and zero-dependency. A star helps other developers discover it.