Skip to content
Snippets Groups Projects
Commit 236a0247 authored by Sebastian Ebert's avatar Sebastian Ebert
Browse files

signal change notification

parent 56855e61
No related branches found
No related tags found
No related merge requests found
......@@ -116,8 +116,8 @@ dependencies {
implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.11.2'
// ragconnectClasspath group: 'de.tudresden.inf.st', name: 'ragconnect.base', version: '0.2.3'
// ragconnectClasspath group: 'de.tudresden.inf.st', name: 'ragconnect.base', '1.0.0-alpha-214'
ragconnectClasspath 'de.tudresden.inf.st:ragconnect:1.0.0-alpha-214'
// ragconnectClasspath fileTree(include: ['ragconnect.base-fatjar-1.0.0-alpha.jar'], dir: './libs')
// ragconnectClasspath 'de.tudresden.inf.st:ragconnect:1.0.0-alpha-214'
ragconnectClasspath fileTree(include: ['ragconnect.base-fatjar-1.0.1.jar'], dir: './libs')
// vis
implementation group: 'de.tudresden.inf.st', name: 'dumpAst', version: '1.2.1-77'
......@@ -166,7 +166,9 @@ def ecoreInputFiles = [ecoreFile]
def ecoreOutputFiles = [ecoreRelastAspect,
ecoreRelastGrammar]
def relastInputFiles = [ecoreRelastGrammar, './src/main/jastadd/base/marking/Marking.relast', './src/main/jastadd/engine/connection/SignalConnection.relast','./src/main/jastadd/engine/balloonMarking/BalloonMarking.relast', './src/main/jastadd/engine/balloonMarking/BalloonExecution.relast', './src/main/jastadd/base/io/IoPN.relast', './src/main/jastadd/base/clauses/expressions.relast']
def relastInputFiles = [ecoreRelastGrammar, './src/gen/jastadd/Marking.relast', './src/gen/jastadd/SignalConnection.relast',
'./src/gen/jastadd/BalloonMarking.relast', './src/main/jastadd/engine/balloonMarking/BalloonExecution.relast',
'./src/gen/jastadd/IoPN.relast', './src/gen/jastadd/expressions.relast']
def relastOutputFiles = ['src/gen/jastadd/pnml/placeTransition.ast', 'src/gen/jastadd/pnml/placeTransition.jadd']
task ecoreToRelast(type: JavaExec) {
......@@ -223,6 +225,7 @@ task ragConnect(type: JavaExec) {
'src/main/jastadd/engine/connection/Dineros.connect',
'--rootNode=InputSignalConnector',
'--List=JastAddList',
'--protocols=mqtt,java',
'--incremental=param',
'--tracing=flush',
'--experimental-jastadd-329',
......
No preview for this file type
......@@ -4,6 +4,7 @@ BalloonTransition ::= <BalloonCallbacks:java.util.List<de.tudresden.inf.st.pnml.
rel BalloonTransition.Transition -> Transition;
abstract TransitionSelectionResult;
FiringSelectionSuccess : TransitionSelectionResult ::= Transition:Transition;
FiringSelectionSuccess : TransitionSelectionResult;
rel FiringSelectionSuccess.Transition -> Transition;
FiringSelectionWait : TransitionSelectionResult ::= <WaitingTime:int>;
FiringSelectionFail : TransitionSelectionResult;
\ No newline at end of file
......@@ -7,3 +7,5 @@ InputSignalTransformation maps String s to boolean {:
return false;
:}
send SignalConnection.CurrentValue;
\ No newline at end of file
......@@ -36,7 +36,7 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
try {
marking = petriNet.initializeBalloonMarking();
callbackStorage = petriNet.initializeCallbackStorage();
PetriNetInitializer.initInputSignalConnections(petriNet, rcHost, gcProtocol, inputSignalConnector);
PetriNetInitializer.initInputSignalConnections(petriNet, rcHost, gcProtocol, inputSignalConnector, this);
} catch (IOException | SAXException | ParserConfigurationException e) {
e.printStackTrace();
}
......@@ -110,18 +110,24 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
private void onStartupEndedInternal(Set<Transition> enabledTransitions){
System.out.println("Calling onStartupEndedInternal");
TransitionSelectionResult res = onStartupEnded(enabledTransitions);
getTransitionSelectionResult(res);
}
private void onMarkingChangeInternal(Set<Transition> enabledTransitions){
System.out.println("Calling onMarkingChangeInternal");
TransitionSelectionResult res = onMarkingChange(enabledTransitions);
getTransitionSelectionResult(res);
}
private void onSignalChangeInternal(Set<Transition> enabledTransitions){
System.out.println("Calling onSignalChangeInternal");
TransitionSelectionResult res = onSignalChange(enabledTransitions);
getTransitionSelectionResult(res);
......@@ -129,6 +135,8 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
private void onWaitEndedInternal(Set<Transition> enabledTransitions){
System.out.println("Calling onWaitEndedInternal");
TransitionSelectionResult res = onWaitEnded(enabledTransitions);
getTransitionSelectionResult(res);
......
......@@ -39,37 +39,46 @@ public class DinerosTestNode extends DiNeRosNode {
}
@NotNull
private FiringSelectionSuccess fireFirstEnabled(Set<Transition> enabledTransitions) {
private TransitionSelectionResult fireFirstEnabled(Set<Transition> enabledTransitions) {
System.out.println("Calling fireFirstEnabled");
FiringSelectionSuccess fsc = new FiringSelectionSuccess();
for(Transition t : enabledTransitions){
System.out.println("Firing transition: " + t.getId());
System.out.println(marking.print());
System.out.println("-------------------------------");
//System.out.println(marking.print());
fsc.setTransition(t);
break;
}
if(enabledTransitions.size() == 0){
return new FiringSelectionFail();
}
return fsc;
}
@Override
protected TransitionSelectionResult onMarkingChange(Set<Transition> enabledTransitions) {
System.out.println("Calling onMarkingChange");
return fireFirstEnabled(enabledTransitions);
}
@Override
protected TransitionSelectionResult onSignalChange(Set<Transition> enabledTransitions) {
System.out.println("Calling onSignalChange");
return fireFirstEnabled(enabledTransitions);
}
@Override
protected TransitionSelectionResult onWaitEnded(Set<Transition> enabledTransitions) {
System.out.println("Calling onWaitEnded");
return fireFirstEnabled(enabledTransitions);
}
@Override
protected TransitionSelectionResult onStartupEnded(Set<Transition> enabledTransitions) {
System.out.println("Calling onStartupEnded");
return fireFirstEnabled(enabledTransitions);
}
}
package de.tudresden.inf.st.pnml.engine.transform;
import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode;
import de.tudresden.inf.st.pnml.engine.testNodes.DinerosTestNode;
import de.tudresden.inf.st.pnml.jastadd.model.*;
import java.io.IOException;
......@@ -75,26 +77,33 @@ public class PetriNetInitializer {
target.setMutableTransitionInformation(tri);
}
public static void initInputSignalConnections(PetriNet petriNet, String host, String protocol, InputSignalConnector inputSignalConnector) throws IOException {
public static void initInputSignalConnections(PetriNet petriNet, String host, String protocol, InputSignalConnector inputSignalConnector, DiNeRosNode node) throws IOException {
for(String signalId : petriNet.getInputSignalDefinition().keySet()){
// mqtt connections
SignalConnection sc = new SignalConnection();
sc.setCurrentValue(Boolean.parseBoolean(petriNet.getInputSignalDefinition().get(signalId)));
sc.setId(signalId);
inputSignalConnector.addSignalConnection(sc);
sc.connectCurrentValue(protocol + "://" + host + "/" + signalId);
// internal java connections
sc.connectCurrentValue("java://localhost:00/" + signalId, false);
inputSignalConnector.ragconnectJavaRegisterConsumer("java://localhost:00/" + signalId,
bytes -> node.notify(DiNeRosNode.NOTIFICATION_SIGNAL_CHANGE));
}
}
public void init(PetriNet petriNet, String host, String protocol, InputSignalConnector isc){
public void init(PetriNet petriNet, String host, String protocol, InputSignalConnector isc, DiNeRosNode node){
for(Transition t : petriNet.allTransitions()){
initMutableTransitionInformation(null, t, t.asDinerosTransition());
}
try {
initInputSignalConnections(petriNet, host, protocol, isc);
initInputSignalConnections(petriNet, host, protocol, isc, node);
} catch (IOException e) {
e.printStackTrace();
}
......
<?xml version="1.0" encoding="UTF-8"?>
<pnml
xmlns="http://www.pnml.org/version-2009/grammar/pnml">
<net id="NodeNetTest-1" type="http://www.pnml.org/version-2009/grammar/ptnet">
<name>
<text>NodeNetTest-1</text>
</name>
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<inputsignals>
<inputsignal>
<inputsignalID>is1</inputsignalID>
<initialvalue>false</initialvalue>
</inputsignal>
</inputsignals>
</toolspecific>
<page id="top">
<page id="sourcePage">
<place id="p1">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<node>n1</node>
<subnet>s1</subnet>
<balloonMarking>
<tokens>
<token> { "id" : "red1", "target" : "binRed" } </token>
</tokens>
</balloonMarking>
</toolspecific>
<initialMarking>
<text>1</text>
</initialMarking>
<name>
<text>p1</text>
<graphics>
<offset x="0" y="0" />
</graphics>
</name>
<graphics>
<position x="0" y="0" />
</graphics>
</place>
<place id="p2">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<node>n1</node>
<subnet>s1</subnet>
</toolspecific>
<name>
<text>p2</text>
<graphics>
<offset x="0" y="0" />
</graphics>
</name>
<graphics>
<position x="0" y="0" />
</graphics>
</place>
<transition id="t1">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<node>n1</node>
<subnet>s1</subnet>
<inputsignalbinding>
</inputsignalbinding>
<inputsignalclause>is1</inputsignalclause>
</toolspecific>
<name>
<text>t1</text>
<graphics>
<offset x="0" y="0" />
</graphics>
</name>
<graphics>
<position x="0" y="0" />
</graphics>
</transition>
<arc id="a1" source="p1" target="t1">
</arc>
<arc id="a2" source="t1" target="p2">
</arc>
</page>
</page>
</net>
</pnml>
\ No newline at end of file
......@@ -3,7 +3,7 @@
xmlns="http://www.pnml.org/version-2009/grammar/pnml">
<net id="NodeNetTest-0" type="http://www.pnml.org/version-2009/grammar/ptnet">
<name>
<text>TopicNet</text>
<text>NodeNetTest-0</text>
</name>
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<inputsignals>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment