This is the Dymola library for Petri net, and has been converted into a Modelica package for convenience.
ObjectStab.petri1.StartPlace
model StartPlace
constant Boolean DymolaCompatibility=true;
Boolean state(start=true);
PlaceCut place(booleans=[state]);
equation
when Initial(Time) then
state = true;
end when;
end StartPlace;
ObjectStab.petri1.Place
model Place
constant Boolean DymolaCompatibility=true;
Boolean state(start=false);
PlaceCut place(booleans=[state]);
equation
when Initial(Time) then
state = false;
end when;
end Place;
ObjectStab.petri1.Transition
| Name | Default | Description |
|---|---|---|
| condLabel | " " | Condition as string (e.g. x > 0) |
model Transition
constant Boolean DymolaCompatibility=true;
parameter String condLabel=" "
"Condition as string (e.g. x > 0)";
Real status;
Boolean condition(start=false);
Boolean inState(start=false);
Boolean outState(start=false);
TransitionCut in_(booleans=[inState]);
TransitionCut out(booleans=[outState]);
ConditionCut c1(booleans=[condition]);
ConditionCut c2(booleans=[condition]);
equation
when inState and condition and not Initial(Time) then
status = SetBoolean2(inState, false, outState, true);
end when;
end Transition;
ObjectStab.petri1.PlaceCut
connector PlaceCut "Cut of a petri net place (or state of a state machine)" constant Boolean DymolaCompatibility=true; extends CutBase; end PlaceCut;
ObjectStab.petri1.TransitionCut
connector TransitionCut "Cut of a petri net transition" constant Boolean DymolaCompatibility=true; extends CutBase; end TransitionCut;
ObjectStab.petri1.ConditionCut
connector ConditionCut "Condition cut of a petri net transition" constant Boolean DymolaCompatibility=true; extends CutBase; end ConditionCut;
ObjectStab.petri1.Parallel
| Name | Default | Description |
|---|---|---|
| condLabel | "" | Condition as string (e.g. x > 0) |
model Parallel
constant Boolean DymolaCompatibility=true;
parameter String condLabel=""
"Condition as string (e.g. x > 0)";
Real status;
Boolean inState;
Boolean outState1;
Boolean outState2;
Boolean condition;
TransitionCut in_(booleans=[inState]);
TransitionCut out1(booleans=[outState1]);
TransitionCut out2(booleans=[outState2]);
ConditionCut c1(booleans=[condition]);
ConditionCut c2(booleans=[condition]);
equation
when inState and condition and not Initial(Time) then
status = SetBoolean3(inState, false, outState1, true, outState2, true);
end when;
end Parallel;
ObjectStab.petri1.Synchronize
| Name | Default | Description |
|---|---|---|
| condLabel | "" | Condition as string (e.g. x > 0) |
model Synchronize
constant Boolean DymolaCompatibility=true;
parameter String condLabel=""
"Condition as string (e.g. x > 0)";
Real status;
Boolean inState1;
Boolean inState2;
Boolean outState;
Boolean condition;
TransitionCut in1(booleans=[inState1]);
TransitionCut in2(booleans=[inState2]);
TransitionCut out(booleans=[outState]);
ConditionCut c1(booleans=[condition]);
ConditionCut c2(booleans=[condition]);
equation
when inState1 and inState2 and condition and not Initial(Time) then
status = SetBoolean3(inState1, false, inState2, false, outState, true);
end when;
end Synchronize;