diff --git a/.gitignore b/.gitignore index b93e9c6af37c30a0406bcb76090cd4e4cce58dc7..1a3dca2911edc332c3c76dcfd6b351c310a28ae6 100644 --- a/.gitignore +++ b/.gitignore @@ -4,5 +4,10 @@ src/gen/ /case-study-sorting-pkg/out*/ /case-study-sorting-pkg/.idea /case-study-sorting-pkg/.gradle/ +/case-study-sorting-pkg/build/ +/case-study-sorting-pkg/src/gen-res/ +/out*/ +/.idea +/.gradle/ *.class logs/ diff --git a/case-study-sorting-pkg/libs/pnml-relast-engine-fatjar-0.1.jar b/case-study-sorting-pkg/libs/pnml-relast-engine-fatjar-0.1.jar index d497d256a7cb3dd0201559f447490b23cff21b7f..07e243a4637c1493f47348f370ca9ff37748184d 100644 Binary files a/case-study-sorting-pkg/libs/pnml-relast-engine-fatjar-0.1.jar and b/case-study-sorting-pkg/libs/pnml-relast-engine-fatjar-0.1.jar differ diff --git a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/Main.java b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/Main.java index 115993ec2d940b587e9e8c8b69af4f8eaa9c0222..f25ada35978894e76e896cefa42038b8667e22a8 100644 --- a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/Main.java +++ b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/Main.java @@ -1,26 +1,16 @@ package de.tudresden.inf.st.sorting; -import de.tudresden.inf.st.pnml.jastadd.model.PetriNet; -import de.tudresden.inf.st.pnml.jastadd.model.PnmlParser; import de.tudresden.inf.st.sorting.fake.FakeServerNode; -import de.tudresden.inf.st.sorting.handlers.ControlEndHandler; -import de.tudresden.inf.st.sorting.handlers.ControlGetHandler; -import de.tudresden.inf.st.sorting.handlers.ShowResultHandler; -import de.tudresden.inf.st.sorting.handlers.SortColorHandler; -import de.tudresden.inf.st.sorting.nodes.*; import org.ros.node.DefaultNodeMainExecutor; import org.ros.node.NodeConfiguration; import org.ros.node.NodeMainExecutor; -import java.util.ArrayList; -import java.util.List; import java.net.URI; public class Main { private static final String ROS_HOST = "localhost"; private static final String ROS_MASTER_URI = "http://localhost:11311"; - private static final String MQTT_HOST = "localhost"; private static final NodeConfiguration nodeConfiguration = NodeConfiguration.newPublic(ROS_HOST); private static final NodeMainExecutor nodeMainExecutor = DefaultNodeMainExecutor.newDefault(); @@ -29,47 +19,7 @@ public class Main { nodeConfiguration.setMasterUri(URI.create(ROS_MASTER_URI)); - // LOAD THE LOCAL NETS - - List<String> petriNetPaths = new ArrayList<>(); - petriNetPaths.add("src/main/resources/nets/SelectorNode.pnml"); - petriNetPaths.add("src/main/resources/nets/LeftControllerNode.pnml"); - petriNetPaths.add("src/main/resources/nets/RightControllerNode.pnml"); - petriNetPaths.add("src/main/resources/nets/SynchronizerNode.pnml"); - petriNetPaths.add("src/main/resources/nets/FeedbackNode.pnml"); - - List<PetriNet> petriNets = new ArrayList<>(); - - for(String petriNetPath : petriNetPaths){ - petriNets.add(PnmlParser.parsePnml(petriNetPath, false).get(0)); - } - - // NODE CONFIGURATION - - // SelectorNode selectorNode = new SelectorNode("SelectorNode", petriNets.get(0), MQTT_HOST); - // selectorNode.registerHandler("SortGreen", new SortColorHandler(1)); - // selectorNode.registerHandler("SortRed", new SortColorHandler(1)); - // selectorNode.registerHandler("SortBlue", new SortColorHandler(1)); - - // LeftControllerNode leftControllerNode = new LeftControllerNode("LeftControllerNode", petriNets.get(1), MQTT_HOST); - // RightControllerNode rightControllerNode = new RightControllerNode("RightControllerNode", petriNets.get(2), MQTT_HOST); - SynchronizerNode synchronizerNode = new SynchronizerNode("SynchronizerNode", petriNets.get(3), MQTT_HOST); - synchronizerNode.registerHandler("Get", new ControlGetHandler(1)); - synchronizerNode.registerHandler("End", new ControlEndHandler(1)); - - // FeedbackNode feedbackNode = new FeedbackNode("FeedbackNode", petriNets.get(4), MQTT_HOST); - // feedbackNode.registerHandler("ShowFeedback", new ShowResultHandler(1)); - - // START THE NODES - - // new Thread(() -> nodeMainExecutor.execute(selectorNode, nodeConfiguration)) {{start();}}; - // new Thread(() -> nodeMainExecutor.execute(leftControllerNode, nodeConfiguration)) {{start();}}; - // new Thread(() -> nodeMainExecutor.execute(rightControllerNode, nodeConfiguration)) {{start();}}; - new Thread(() -> nodeMainExecutor.execute(synchronizerNode, nodeConfiguration)) {{start();}}; - // new Thread(() -> nodeMainExecutor.execute(feedbackNode, nodeConfiguration)) {{start();}}; - // FAKE NODES FOR TESTING - new Thread(() -> nodeMainExecutor.execute(new FakeServerNode("pickService", "PickServiceNode"), nodeConfiguration)) {{start();}}; new Thread(() -> nodeMainExecutor.execute(new FakeServerNode("placeService", "PlaceServiceNode"), nodeConfiguration)) {{start();}}; diff --git a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/ControlEndHandler.java b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/ControlEndHandler.java index 8c34668fbfa898cb8ef57bf7e2cb9abe8809060c..c9f912c745f5df8fe23a9ce185e0a0a358af2581 100644 --- a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/ControlEndHandler.java +++ b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/ControlEndHandler.java @@ -19,6 +19,7 @@ public class ControlEndHandler extends TransitionHandler { } } } + return maps; }; diff --git a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/PickAbortHandler.java b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/PickAbortHandler.java index 4bd3fa8008d4dc2f6d22113cd8798cc53f042ba7..9c78fe1e14d9d659505b7533eba12843f8a3cbbe 100644 --- a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/PickAbortHandler.java +++ b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/PickAbortHandler.java @@ -3,6 +3,7 @@ package de.tudresden.inf.st.sorting.handlers; import de.tudresden.inf.st.pnml.engine.execution.TransitionHandler; import de.tudresden.inf.st.sorting.constants.TokenConstants; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.function.Function; @@ -15,7 +16,16 @@ public class PickAbortHandler extends TransitionHandler { for (Map<String, Object> m : maps) { m.replace(TokenConstants.PICK_SUCCESS, "abort"); } - return maps; + + List<Map<String, Object>> res = new ArrayList<>(); + + for(Map<String, Object> m : maps){ + if(!m.get(TokenConstants.TRACE).toString().contains("safety")){ + res.add(m); + } + } + + return res; }; public PickAbortHandler(int priority) { diff --git a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/PickHandler.java b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/PickHandler.java index 3ce105da4486c98afdf2e09e8f46a48a14751e1c..a826857e554413d749b8d1cb838b25f6df5bc907 100644 --- a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/PickHandler.java +++ b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/PickHandler.java @@ -1,7 +1,9 @@ package de.tudresden.inf.st.sorting.handlers; import de.tudresden.inf.st.pnml.engine.execution.TransitionHandler; +import de.tudresden.inf.st.sorting.constants.TokenConstants; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.function.Function; @@ -18,7 +20,17 @@ public class PickHandler extends TransitionHandler { e.printStackTrace(); } - return maps; + List<Map<String, Object>> res = new ArrayList<>(); + + for(Map<String, Object> m : maps){ + if(!m.get(TokenConstants.TRACE).toString().contains("safety")){ + String oldTrace = m.get(TokenConstants.TRACE).toString(); + m.replace(TokenConstants.TRACE, oldTrace + "-pickToSafety"); + res.add(m); + } + } + + return res; }; public PickHandler(int priority) { diff --git a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/PickSuccessHandler.java b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/PickSuccessHandler.java index 84a99255849fd9797eadefabbf5d6f139734af8e..3f246ecfebae374617e136c707c86b70e1672cd0 100644 --- a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/PickSuccessHandler.java +++ b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/PickSuccessHandler.java @@ -15,6 +15,7 @@ public class PickSuccessHandler extends TransitionHandler { for (Map<String, Object> m : maps) { m.replace(TokenConstants.PICK_SUCCESS, "success"); } + return maps; }; diff --git a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/PlaceAbortHandler.java b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/PlaceAbortHandler.java index 8ecb6cba739bf74755b6ed73e46eab87103ebb76..fbec6caf24d9f7310cb99ba453d714f534896d39 100644 --- a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/PlaceAbortHandler.java +++ b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/PlaceAbortHandler.java @@ -3,6 +3,7 @@ package de.tudresden.inf.st.sorting.handlers; import de.tudresden.inf.st.pnml.engine.execution.TransitionHandler; import de.tudresden.inf.st.sorting.constants.TokenConstants; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.function.Function; @@ -10,12 +11,21 @@ import java.util.function.Function; public class PlaceAbortHandler extends TransitionHandler { final static Function<List<Map<String, Object>>, List<Map<String, Object>>> PLACE_ABORT_HANDLING_FUNCTION = maps -> { - System.out.println("Executing PICK_ABORT_HANDLING_FUNCTION."); + System.out.println("Executing PLACE_ABORT_HANDLING_FUNCTION."); for (Map<String, Object> m : maps) { m.replace(TokenConstants.PLACE_SUCCESS, "abort"); } - return maps; + + List<Map<String, Object>> res = new ArrayList<>(); + + for(Map<String, Object> m : maps){ + if(!m.get(TokenConstants.TRACE).toString().contains("safety")){ + res.add(m); + } + } + + return res; }; public PlaceAbortHandler(int priority) { diff --git a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/PlaceHandler.java b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/PlaceHandler.java index fb4d629cf06cf2f1068bd6987b9d6f898bb3cf4f..9ffb63c34deaa4b52fac3c4c87f0589b9521147f 100644 --- a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/PlaceHandler.java +++ b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/PlaceHandler.java @@ -1,7 +1,9 @@ package de.tudresden.inf.st.sorting.handlers; import de.tudresden.inf.st.pnml.engine.execution.TransitionHandler; +import de.tudresden.inf.st.sorting.constants.TokenConstants; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.function.Function; @@ -18,7 +20,18 @@ public class PlaceHandler extends TransitionHandler { e.printStackTrace(); } - return maps; + List<Map<String, Object>> res = new ArrayList<>(); + + for(Map<String, Object> m : maps){ + if(!m.get(TokenConstants.TRACE).toString().contains("safety") + && (!m.get(TokenConstants.TRACE).toString().contains("pickToSafety") + || !m.get(TokenConstants.PICK_SUCCESS).toString().equals("false"))){ + res.add(m); + return res; + } + } + + return res; }; public PlaceHandler(int priority) { diff --git a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/PlaceSuccessHandler.java b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/PlaceSuccessHandler.java index 6c1bdd660e4cd5d6e1c09c1f2b64db37f8d60af3..91cb0d418267e6945e9024f9606f0bb73c4ca8ea 100644 --- a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/PlaceSuccessHandler.java +++ b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/PlaceSuccessHandler.java @@ -14,8 +14,8 @@ public class PlaceSuccessHandler extends TransitionHandler { for (Map<String, Object> m : maps) { m.replace(TokenConstants.PLACE_SUCCESS, "success"); - } + return maps; }; diff --git a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/SafetyUsageHandler.java b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/SafetyUsageHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..61889e2b7c3841d942cd9fadedff6cc2bf4567a6 --- /dev/null +++ b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/SafetyUsageHandler.java @@ -0,0 +1,27 @@ +package de.tudresden.inf.st.sorting.handlers; + +import de.tudresden.inf.st.pnml.engine.execution.TransitionHandler; +import de.tudresden.inf.st.sorting.constants.TokenConstants; + +import java.util.List; +import java.util.Map; +import java.util.function.Function; + +public class SafetyUsageHandler extends TransitionHandler { + + final static Function<List<Map<String, Object>>, List<Map<String, Object>>> SM_HANDLING_FUNCTION = maps -> { + System.out.println("Executing SM_HANDLING_FUNCTION."); + + for (Map<String, Object> m : maps) { + String oldT = m.get(TokenConstants.TRACE).toString(); + String newT = oldT + "-safety"; + m.replace(TokenConstants.TRACE, newT); + } + + return maps; + }; + + public SafetyUsageHandler(int priority) { + super(priority, SM_HANDLING_FUNCTION); + } +} diff --git a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/SensorDataProcessingHandler.java b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/SensorDataProcessingHandler.java index f640562d8ec6f16525715fdfdf41e1aa356a4662..137f0e566fab3d318389426e842a751b256fa8f7 100644 --- a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/SensorDataProcessingHandler.java +++ b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/handlers/SensorDataProcessingHandler.java @@ -4,12 +4,12 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; import de.tudresden.inf.st.pnml.engine.execution.TransitionHandler; +import de.tudresden.inf.st.pnml.jastadd.model.PnmlParser; import de.tudresden.inf.st.sorting.constants.TokenConstants; import java.io.IOException; import java.lang.reflect.Type; import java.nio.file.Files; -import java.nio.file.Path; import java.util.List; import java.util.Map; import java.util.function.Function; @@ -20,7 +20,8 @@ public class SensorDataProcessingHandler extends TransitionHandler { System.out.println("Executing GET_DATA_HANDLING_FUNCTION."); try { - Map<String, Object> fakeRes = parse(Files.readString(Path.of("/doc/FakeConfig.json"))); + Map<String, Object> fakeRes = parse( + Files.readString(PnmlParser.toTempPath("/docs/FakeConfig.json"))); for(Map<String, Object> m : maps){ m.replace(TokenConstants.HUMAN_DETECTED, fakeRes.get("sensor")); @@ -41,4 +42,4 @@ public class SensorDataProcessingHandler extends TransitionHandler { Type mapType = new TypeToken<Map<String, Object>>(){}.getType(); return gson.fromJson(s, mapType); } -} +} \ No newline at end of file diff --git a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/launcher/ExecutorLauncher.java b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/launcher/ExecutorLauncher.java index 4afc1647ff936bf39ce9f562173d6581a84c1d97..5ac7a2aa89885e6bd91f141acc43c1aec6addd58 100644 --- a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/launcher/ExecutorLauncher.java +++ b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/launcher/ExecutorLauncher.java @@ -28,6 +28,12 @@ public class ExecutorLauncher extends NodeLauncher { executorNode.registerHandler("PlacingFail", new PlaceFailHandler(1)); executorNode.registerHandler("PlacingAbort", new PlaceAbortHandler(1)); + executorNode.registerHandler("TransitionSafe", new SafetyUsageHandler(1)); + executorNode.registerHandler("SafeToSensorCall", new SafetyUsageHandler(1)); + executorNode.registerHandler("SafeToUnsafe", new SafetyUsageHandler(1)); + executorNode.registerHandler("UnsafeToSensorCall", new SafetyUsageHandler(1)); + executorNode.registerHandler("TransitionUnsafe", new SafetyUsageHandler(1)); + new Thread(() -> nodeMainExecutor.execute(executorNode, nodeConfiguration)) {{start();}}; } } diff --git a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/launcher/SensorLauncher.java b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/launcher/SensorLauncher.java index 5ba5e63f4fe17918ec9dc4418e957caf61bb98ab..08f0d50ba41f54d5bb4a38e29ffccf680ed076d6 100644 --- a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/launcher/SensorLauncher.java +++ b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/launcher/SensorLauncher.java @@ -14,7 +14,7 @@ public class SensorLauncher extends NodeLauncher { nodeConfiguration.setMasterUri(URI.create(ROS_MASTER_URI)); - String petriNetPath = "/nets/SelectorNode.pnml"; + String petriNetPath = "/nets/SensorNode.pnml"; PetriNet petriNet = PnmlParser.parsePnml(petriNetPath, true).get(0); SensorNode sensorNode = new SensorNode("SensorNode", petriNet, MQTT_HOST); diff --git a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/nodes/ExecutorNode.java b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/nodes/ExecutorNode.java index 9a99c2a10e41e4ae7164e66dc34475f5dbac53a6..ece0d05821b0c8552cbf032112cbd55ecc85a82e 100644 --- a/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/nodes/ExecutorNode.java +++ b/case-study-sorting-pkg/src/main/java/de/tudresden/inf/st/sorting/nodes/ExecutorNode.java @@ -4,22 +4,48 @@ import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode; import de.tudresden.inf.st.pnml.jastadd.model.*; import de.tudresden.inf.st.sorting.constants.TokenConstants; +import java.util.ArrayList; import java.util.List; public class ExecutorNode extends DiNeRosNode { + private static final int SENSOR_INTERVAL = 20000; + private long lastSensingTime = 0; public ExecutorNode(String nodeName, PetriNet petriNet, String rcHost) { super(nodeName, petriNet, rcHost, "mqtt"); } + public boolean hasIntervalPassed() { + long elapsedTime = System.currentTimeMillis() - lastSensingTime; + return elapsedTime >= SENSOR_INTERVAL; + } + @Override protected TransitionSelectionResult onChange(List<Transition> list) { + /*StringBuilder tList = new StringBuilder(); + + for(Transition t : list) { + tList.append(" - "); + tList.append(t.getId()); + } + + System.out.println("ENABLED: " + tList);*/ + for (Transition t : list) { + if (t.getId().equals("UnsafeToSensorCall") || t.getId().equals("SafeToSensorCall")){ + if(lastSensingTime == 0 || hasIntervalPassed()){ + lastSensingTime = System.currentTimeMillis(); + System.out.println("Firing: " + t.getId() + " (interval)"); + return new FiringSelectionSuccess(t); + } + } + if (t.getId().equals("TransitionUnsafe")) { for (Place p : t.incomingPlaces()) { if (p.getId().equals("SensorResponse")) { + System.out.println(marking.resolveBalloonPlace(p).getBalloonMarking(0).getValue()); if (parseToken(marking.resolveBalloonPlace(p).getBalloonMarking(0). getValue()).get(TokenConstants.HUMAN_DETECTED).equals("true")) { System.out.println("Firing: " + t.getId()); @@ -43,7 +69,24 @@ public class ExecutorNode extends DiNeRosNode { } } } - TransitionSelectionResult res = fireRandomEnabledTransition(list); + + List<Transition> filteredList = new ArrayList<>(); + + for(Transition t : list){ + if (!t.getId().equals("UnsafeToSensorCall") && !t.getId().equals("SafeToSensorCall")){ + filteredList.add(t); + } + } + + /*for(RefPlace rp : this.petriNet.allRefPlaces()){ + if(rp.getId().contains("PickUnsafeRef")){ + for(Arc a : rp.getOutArcs()){ + System.out.println(a.getId() + " from " + a.getSource().getId() + " to " + a.getTarget().getId()); + } + } + }*/ + + TransitionSelectionResult res = fireRandomEnabledTransition(filteredList); if(res.isFiringSelectionSuccess()){ System.out.println("Firing: " + res.asFiringSelectionSuccess().getTransition().getId()); diff --git a/case-study-sorting-pkg/doc/FakeConfig.json b/case-study-sorting-pkg/src/main/resources/docs/FakeConfig.json similarity index 100% rename from case-study-sorting-pkg/doc/FakeConfig.json rename to case-study-sorting-pkg/src/main/resources/docs/FakeConfig.json diff --git a/case-study-sorting-pkg/doc/TokenFormat.json b/case-study-sorting-pkg/src/main/resources/docs/TokenFormat.json similarity index 100% rename from case-study-sorting-pkg/doc/TokenFormat.json rename to case-study-sorting-pkg/src/main/resources/docs/TokenFormat.json diff --git a/case-study-sorting-pkg/src/main/resources/nets/ExecutorNode.pnml b/case-study-sorting-pkg/src/main/resources/nets/ExecutorNode.pnml index 1091e4cef8b3e1bd741ec1b7dbcfa0c3a102ab07..b264828c2630d114c0b83658b8402ce406deb4ac 100644 --- a/case-study-sorting-pkg/src/main/resources/nets/ExecutorNode.pnml +++ b/case-study-sorting-pkg/src/main/resources/nets/ExecutorNode.pnml @@ -150,6 +150,10 @@ </arc> <arc id="a22" source="PickingFail" target="PickOutput"> </arc> + <arc id="a24n1" source="PickingAbort" target="PickUnsafeRef"> + </arc> + <arc id="a24n2" source="PickUnsafeRef" target="PickingAbort"> + </arc> </page> <page id="PlaceService"> <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> @@ -294,6 +298,10 @@ </arc> <arc id="a27" source="PlaceSafeRef" target="Place"> </arc> + <arc id="a34n1" source="PlacingAbort" target="PlaceUnsafeRef"> + </arc> + <arc id="a34n2" source="PlaceUnsafeRef" target="PlacingAbort"> + </arc> </page> <page id="SafetyModel"> <place id="Unsafe"> @@ -307,8 +315,8 @@ <subnet>SafetyModel</subnet> <balloonMarking> <tokens> - <token>{ "id" : "NONE", "picksuccess" : "false", "placesuccess" : "false", "sensor" - : "NONE" } + <token>{ "color":"NONE","name":"NONE","pickSuccess":"false","placeSuccess":"false", + "humanDetected":"false","sensorData":"NONE","trace":"-safety", "locked" : "true" } </token> </tokens> </balloonMarking> diff --git a/case-study-sorting-pkg/src/main/resources/nets/SynchronizerNode.pnml b/case-study-sorting-pkg/src/main/resources/nets/SynchronizerNode.pnml index c96d49cdec29d6dda51db8bd8c023a68f3b6a891..ef8029c1d73fc9137d4c49c362cb6d3c93e8c673 100644 --- a/case-study-sorting-pkg/src/main/resources/nets/SynchronizerNode.pnml +++ b/case-study-sorting-pkg/src/main/resources/nets/SynchronizerNode.pnml @@ -145,8 +145,6 @@ <text>GetShared</text> </name> <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> - - <node>Synchronizer</node> <subnet>SharedSync</subnet> <balloonMarking> diff --git a/models/grpn/sorting-wf-synced-safe-sensor-grpn-sig.pnml b/models/grpn/sorting-wf-synced-safe-sensor-grpn-sig.pnml index 7f2b6cd0c6a410071806effbbab7ff190b6bb64d..702e01bc803b0fee78314b983f34a8e685f375c3 100644 --- a/models/grpn/sorting-wf-synced-safe-sensor-grpn-sig.pnml +++ b/models/grpn/sorting-wf-synced-safe-sensor-grpn-sig.pnml @@ -8,7 +8,7 @@ <inputsignals> <inputsignal> <inputsignalID>Red</inputsignalID> - <initialvalue>true</initialvalue> + <initialvalue>false</initialvalue> </inputsignal> <inputsignal> <inputsignalID>Blue</inputsignalID> @@ -55,7 +55,8 @@ <subnet>selectorRed</subnet> <balloonMarking> <tokens> - <token> { "id" : "red1", "picksuccess" : "false", "placesuccess" : "false", "sensor" : "NONE" } </token> + <token>{"color" : "green", "name" : "green1", "pickSuccess" : "false", "placeSuccess" : "false", + "humanDetected" : "false", "sensorData" : "", "trace" : "", "locked" : "false" } </token> </tokens> </balloonMarking> </toolspecific> @@ -72,7 +73,8 @@ <subnet>selectorBlue</subnet> <balloonMarking> <tokens> - <token> { "id" : "blue1", "picksuccess" : "false", "placesuccess" : "false", "sensor" : "NONE" } </token> + <token>{"color" : "blue", "name" : "blue1", "pickSuccess" : "false", "placeSuccess" : "false", + "humanDetected" : "false", "sensorData" : "", "trace" : "", "locked" : "false" } </token> </tokens> </balloonMarking> </toolspecific> @@ -89,7 +91,8 @@ <subnet>selectorGreen</subnet> <balloonMarking> <tokens> - <token> { "id" : "green1", "picksuccess" : "false", "placesuccess" : "false", "sensor" : "NONE" } </token> + <token>{"color" : "red", "name" : "red1", "pickSuccess" : "false", "placeSuccess" : "false", + "humanDetected" : "false", "sensorData" : "", "trace" : "", "locked" : "false" } </token> </tokens> </balloonMarking> </toolspecific> @@ -508,9 +511,11 @@ <node>Synchronizer</node> <subnet>SharedSync</subnet> <balloonMarking> - <tokens> - <token> { "id" : "NONE", "picksuccess" : "false", "placesuccess" : "false", "sensor" : "NONE" } </token> - </tokens> + <tokens> + <token>{ "color":"NONE","name":"NONE","pickSuccess":"false","placeSuccess":"false", + "humanDetected":"false","sensorData":"NONE","trace":"NONE", "locked" : "true" } + </token> + </tokens> </balloonMarking> </toolspecific> <initialMarking> @@ -743,6 +748,10 @@ </arc> <arc id="a24" source="PickingAbort" target="PickOutput"> </arc> + <arc id="a24n1" source="PickingAbort" target="PickUnsafeRef"> + </arc> + <arc id="a24n2" source="PickUnsafeRef" target="PickingAbort"> + </arc> </page> <page id="PlaceService"> @@ -861,6 +870,10 @@ </arc> <arc id="a34" source="PlacingAbort" target="PlaceOutput"> </arc> + <arc id="a34n1" source="PlacingAbort" target="PlaceUnsafeRef"> + </arc> + <arc id="a34n2" source="PlaceUnsafeRef" target="PlacingAbort"> + </arc> </page> <page id="SafetyModel"> @@ -870,7 +883,9 @@ <subnet>SafetyModel</subnet> <balloonMarking> <tokens> - <token> { "id" : "NONE", "picksuccess" : "false", "placesuccess" : "false", "sensor" : "NONE" } </token> + <token>{ "color":"NONE","name":"NONE","pickSuccess":"false","placeSuccess":"false", + "humanDetected":"false","sensorData":"NONE","trace":"-safety", "locked" : "true" } + </token> </tokens> </balloonMarking> </toolspecific>