From 93b53358d34ef869aaa64f7d292c8e42c87228e5 Mon Sep 17 00:00:00 2001 From: SebastianEbert <sebastian.ebert@tu-dresden.de> Date: Fri, 7 Jul 2023 12:21:34 +0200 Subject: [PATCH] added none-result, added sample sensorics node --- .../balloonMarking/BalloonExecution.jadd | 6 ++ .../balloonMarking/BalloonExecution.relast | 3 +- .../de/tudresden/inf/st/pnml/engine/Main.java | 5 +- .../engine/{testNodes => example}/Client.java | 2 +- .../DinerosTestNode.java | 2 +- .../st/pnml/engine/example/SensoricsNode.java | 76 +++++++++++++++++++ .../engine/{testNodes => example}/Server.java | 2 +- .../engine/execution/TransitionHandler.java | 2 +- .../inf/st/pnml/engine/ros/DiNeRosNode.java | 7 +- 9 files changed, 95 insertions(+), 10 deletions(-) rename src/main/java/de/tudresden/inf/st/pnml/engine/{testNodes => example}/Client.java (97%) rename src/main/java/de/tudresden/inf/st/pnml/engine/{testNodes => example}/DinerosTestNode.java (98%) create mode 100644 src/main/java/de/tudresden/inf/st/pnml/engine/example/SensoricsNode.java rename src/main/java/de/tudresden/inf/st/pnml/engine/{testNodes => example}/Server.java (95%) diff --git a/src/main/jastadd/engine/balloonMarking/BalloonExecution.jadd b/src/main/jastadd/engine/balloonMarking/BalloonExecution.jadd index 3dd6750..202bd1b 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 66385e3..f87f2eb 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 d6e9ec4..f34e737 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 58077a6..28b2d78 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 d931a9e..d4c5d76 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 0000000..99dbc8a --- /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 16ec095..d037ac0 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 321f8e8..9a2554c 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 fc3f24b..264194d 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); -- GitLab