Ich kann leider nichts für den Ansatz mit dem Petrinetz
Um ein wenig Verständnis für mein Problem zu erhalten zeige ich hier ein kleines Beispiel und versuche es zu erläutern.
Dieses Bild zeigt ein SIPN (Signal Interpretiertes Petrinetz) mit vier Plätzen (A,C,D,F) und drei Transitionen (t2,t3,t5). Die Plätze A und D sind zu Beginn markiert (schwarzer Punkt). Während ein Platz markiert ist, ist seine Ausgabe aktiv.
Eine Transition darf schalten (bspw. Markierung von D zu F verschieben) sofern
- Alle Plätze vor ihr eine Marke enthalten (für t5 wäre das "D")
- Alle Plätze nach ihr keine Marke enthalten (für t5 wäre das "F")
- Alle Bedingungen erfüllt sind (für t5 wäre das in2 = TRUE)
Diese Schaltbedingungen sind auch nochmals in der angefügten AWL ersichtlich.
Code:
Function_Block FB 7
TITLE =
VERSION : 1.0
VAR
STABLE : BOOL ;
A : BOOL :=TRUE;
D : BOOL :=TRUE;
C : BOOL ;
F : BOOL ;
END_VAR
BEGIN
NETWORK
TITLE = Stable
STAR: A #STABLE;
ON #STABLE;
S #STABLE;
NETWORK
TITLE =t2
A #A;
AN #C;
A "in1";
R #A;
S #C;
R #STABLE;
NETWORK
TITLE =t5
A #D;
AN #F;
A "in2";
R #D;
S #F;
R #STABLE;
NETWORK
TITLE =t3
A #C;
A #F;
AN #D;
AN #A;
R #C;
R #F;
S #D;
S #A;
R #STABLE;
NETWORK
TITLE =Stable Test
AN #STABLE;
JC STAR;
NETWORK
TITLE =A
A #A;
R "out1";
NETWORK
TITLE =D
A #D;
R "out2";
NETWORK
TITLE =C
A #C;
S "out1";
NETWORK
TITLE =F
A #F;
S "out2";
END_FUNCTION_BLOCK
Die beiden Networks bezüglich Stable sind in der Darstellung nicht ersichtlich und representieren die Schaltregeln von Petrinetzen.
Wenn ich die von dir aufgeführte "Reset" Funktion in den Funktionsbaustein integrieren wollte müsste ich für jede mögliche Kombination der möglichen Markierungen:
A+D
A+F
C+D
C+F
jeweils eine Transition in den Stop-Modus ergänzen.
Hinzu kommt noch, dass es in Petrinetzen keine Möglichkeit gibt eine Reihenfolge für Transitionen festzulegen, dadurch müsste ich bei jeder vorher existierenden Transition eine weitere Bedingung AN "stop_mode" ergänzen um sicherzustellen, dass auch tatsächlich die Stop Markierung erreicht werden kann.
Bei diesem Beispiel ist es eventuell noch möglich dies zu implementieren, jedoch in meinem "Real-Beispiel" mit 28 Plätzen und 24 Transitionen zumindest grafisch nicht darstellbar.