diff --git a/src/main/jastadd/engine/balloonMarking/BalloonExecution.jadd b/src/main/jastadd/engine/balloonMarking/BalloonExecution.jadd index 3dd67509afd60ae1e92546b35991926b3c880bf3..202bd1ba3ddf4ee46391e6827aefe9d33ded0dd4 100644 --- a/src/main/jastadd/engine/balloonMarking/BalloonExecution.jadd +++ b/src/main/jastadd/engine/balloonMarking/BalloonExecution.jadd @@ -11,6 +11,9 @@ aspect BalloonExecution{ syn FiringSelectionFail TransitionSelectionResult.asFiringSelectionFail()=null; eq FiringSelectionFail.asFiringSelectionFail()=this; + syn FiringSelectionNone TransitionSelectionResult.asFiringSelectionNone()=null; + eq FiringSelectionNone.asFiringSelectionNone()=this; + syn boolean TransitionSelectionResult.isFiringSelectionSuccess()=false; eq FiringSelectionSuccess.isFiringSelectionSuccess()=true; @@ -20,6 +23,9 @@ aspect BalloonExecution{ syn boolean TransitionSelectionResult.isFiringSelectionFail()=false; eq FiringSelectionFail.isFiringSelectionFail()=true; + syn boolean TransitionSelectionResult.isFiringSelectionNone()=false; + eq FiringSelectionNone.isFiringSelectionNone()=true; + public Optional<BalloonMarking> BalloonMarking.fireTransition(Transition transition, BalloonCallbackStorage callbackStorage, InputSignalConnector inputSignalConnector,de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode node, boolean requireFlush) { diff --git a/src/main/jastadd/engine/balloonMarking/BalloonExecution.relast b/src/main/jastadd/engine/balloonMarking/BalloonExecution.relast index 66385e38cbd18d299a5f5463b96ab5e181a21cf9..f87f2ebcaa893fc8c0d51e5edd662b997ae25a86 100644 --- a/src/main/jastadd/engine/balloonMarking/BalloonExecution.relast +++ b/src/main/jastadd/engine/balloonMarking/BalloonExecution.relast @@ -7,4 +7,5 @@ abstract TransitionSelectionResult; FiringSelectionSuccess : TransitionSelectionResult; rel FiringSelectionSuccess.Transition -> Transition; FiringSelectionWait : TransitionSelectionResult ::= <WaitingTime:int>; -FiringSelectionFail : TransitionSelectionResult; \ No newline at end of file +FiringSelectionFail : TransitionSelectionResult; +FiringSelectionNone : TransitionSelectionResult; \ No newline at end of file diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java b/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java index d6e9ec4a3ae6594935786444aeb646e1af7de8f7..f34e737e29f1a064a005fc5b3a856b10fdb6a864 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java +++ b/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java @@ -1,16 +1,13 @@ package de.tudresden.inf.st.pnml.engine; import de.tudresden.inf.st.pnml.engine.execution.DefaultFinalTransitionHandler; -import de.tudresden.inf.st.pnml.engine.execution.TransitionHandler; -import de.tudresden.inf.st.pnml.engine.testNodes.DinerosTestNode; +import de.tudresden.inf.st.pnml.engine.example.DinerosTestNode; import de.tudresden.inf.st.pnml.jastadd.model.*; import org.ros.node.DefaultNodeMainExecutor; import org.ros.node.NodeConfiguration; import org.ros.node.NodeMainExecutor; import java.net.URI; -import java.util.ArrayList; -import java.util.List; public class Main { diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/Client.java b/src/main/java/de/tudresden/inf/st/pnml/engine/example/Client.java similarity index 97% rename from src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/Client.java rename to src/main/java/de/tudresden/inf/st/pnml/engine/example/Client.java index 58077a61e21af6d9f1ec43e5a0ceea2ec6b2cdae..28b2d78ece492dd92acd1babc433ce582e791476 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/Client.java +++ b/src/main/java/de/tudresden/inf/st/pnml/engine/example/Client.java @@ -1,4 +1,4 @@ -package de.tudresden.inf.st.pnml.engine.testNodes; +package de.tudresden.inf.st.pnml.engine.example; import org.ros.exception.RemoteException; import org.ros.exception.RosRuntimeException; diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/DinerosTestNode.java b/src/main/java/de/tudresden/inf/st/pnml/engine/example/DinerosTestNode.java similarity index 98% rename from src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/DinerosTestNode.java rename to src/main/java/de/tudresden/inf/st/pnml/engine/example/DinerosTestNode.java index d931a9e9f2f02d4506b4168fe71fc879f104d5a0..d4c5d765b5c7d1b7c60c98a08fcc96e84c79ae09 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/DinerosTestNode.java +++ b/src/main/java/de/tudresden/inf/st/pnml/engine/example/DinerosTestNode.java @@ -1,4 +1,4 @@ -package de.tudresden.inf.st.pnml.engine.testNodes; +package de.tudresden.inf.st.pnml.engine.example; import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode; import de.tudresden.inf.st.pnml.jastadd.model.*; diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/example/SensoricsNode.java b/src/main/java/de/tudresden/inf/st/pnml/engine/example/SensoricsNode.java new file mode 100644 index 0000000000000000000000000000000000000000..99dbc8ab9a4c6d939fb9acad8d128c6743a2ee47 --- /dev/null +++ b/src/main/java/de/tudresden/inf/st/pnml/engine/example/SensoricsNode.java @@ -0,0 +1,76 @@ +package de.tudresden.inf.st.pnml.engine.example; + +import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode; +import de.tudresden.inf.st.pnml.jastadd.model.*; +import org.jetbrains.annotations.NotNull; + +import java.util.Set; + +public class SensoricsNode extends DiNeRosNode { + + public SensoricsNode(String nodeName, PetriNet petriNet, String rcHost, String gcProtocol) { + super(nodeName, petriNet, rcHost, gcProtocol); + } + + @Override + protected void nodeLoop() {} + + @NotNull + private TransitionSelectionResult fireFirstEnabled(Set<Transition> enabledTransitions) { + + + FiringSelectionSuccess fsc = new FiringSelectionSuccess(); + + for (Transition t : enabledTransitions) { + fsc.setTransition(t); + break; + } + + return fsc; + } + + @Override + protected TransitionSelectionResult onMarkingChange(Set<Transition> enabledTransitions) { + + for(Transition t : enabledTransitions){ + + if(t.getId().equals("GetSensorData")){ + FiringSelectionSuccess sel = new FiringSelectionSuccess(); + sel.setTransition(t); + return sel; + } + + if(t.getId().equals("ProcessSensorData")){ + FiringSelectionWait sel = new FiringSelectionWait(); + sel.setWaitingTime(100); + return sel; + } + } + + return new FiringSelectionNone(); + } + + @Override + protected TransitionSelectionResult onSignalChange(Set<Transition> enabledTransitions) { + + for(Transition t : enabledTransitions){ + if(t.getId().equals("GetSensorData")){ + FiringSelectionSuccess sel = new FiringSelectionSuccess(); + sel.setTransition(t); + return sel; + } + } + + return new FiringSelectionNone(); + } + + @Override + protected TransitionSelectionResult onWaitEnded(Set<Transition> enabledTransitions) { + return fireFirstEnabled(enabledTransitions); + } + + @Override + protected TransitionSelectionResult onStartupEnded(Set<Transition> enabledTransitions) { + return new FiringSelectionNone(); + } +} diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/Server.java b/src/main/java/de/tudresden/inf/st/pnml/engine/example/Server.java similarity index 95% rename from src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/Server.java rename to src/main/java/de/tudresden/inf/st/pnml/engine/example/Server.java index 16ec0956bc6ff6897e7d708279de6a7acce9dc82..d037ac0ed6f73572303f2b511b24ea58477e6a91 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/Server.java +++ b/src/main/java/de/tudresden/inf/st/pnml/engine/example/Server.java @@ -1,4 +1,4 @@ -package de.tudresden.inf.st.pnml.engine.testNodes; +package de.tudresden.inf.st.pnml.engine.example; import org.ros.namespace.GraphName; import org.ros.node.AbstractNodeMain; diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/execution/TransitionHandler.java b/src/main/java/de/tudresden/inf/st/pnml/engine/execution/TransitionHandler.java index 321f8e8349bf7a621b2f6c2185c1c57aec628eae..9a2554c9f7bc7444d6c072f7e35bdd93dd061839 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/engine/execution/TransitionHandler.java +++ b/src/main/java/de/tudresden/inf/st/pnml/engine/execution/TransitionHandler.java @@ -14,7 +14,7 @@ public abstract class TransitionHandler{ private String id; private int priority; - private List<String> params = new ArrayList<>(); + protected List<String> params = new ArrayList<>(); public TransitionHandler(String id, int priority, List<String> params) { this.id = id; diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/ros/DiNeRosNode.java b/src/main/java/de/tudresden/inf/st/pnml/engine/ros/DiNeRosNode.java index fc3f24bfc4650d90c54e84b6efdb317a15c24ee3..264194d4b4df7aa748cc77393c8704a69f44971e 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/engine/ros/DiNeRosNode.java +++ b/src/main/java/de/tudresden/inf/st/pnml/engine/ros/DiNeRosNode.java @@ -227,12 +227,17 @@ public abstract class DiNeRosNode extends AbstractNodeMain { } } + if(res.isFiringSelectionNone()){ + return; + } + if (res.isFiringSelectionFail()) { System.err.println("[DiNeROS-Node] [" + nodeName + "] Firing selection action failed!"); return; } - System.out.println("FIRING TRANSITION"); + System.out.println("[DiNeROS-Node] [" + nodeName + "] " + + "Firing Transition " + res.asFiringSelectionSuccess().getTransition().getId()); marking.fireTransition(res.asFiringSelectionSuccess() .getTransition(), callbackStorage, inputSignalConnector, this, true);