Bläddra i källkod

Fixed input processing in DEVS model

Yentl Van Tendeloo 7 år sedan
förälder
incheckning
92a0dfcde7
1 ändrade filer med 11 tillägg och 5 borttagningar
  1. 11 5
      model/model.py

+ 11 - 5
model/model.py

@@ -200,6 +200,7 @@ class ModelverseKernel(AtomicDEVS):
         was_empty = len(self.state.tasks) == 0
         if self.state.commands is not None:
             self.state.commands = None
+            self.state.mvk.returnvalue = None
             return self.state
 
         if self.state.mvk is None:
@@ -234,8 +235,9 @@ class ModelverseKernel(AtomicDEVS):
             elif self.state.phase == "input":
                 # Process inputs
                 if self.state.inputs.get(self.state.current_task, None):
-                    value = self.state.inputs[self.state.current_task]
+                    value = self.state.inputs[self.state.current_task][0]
                     commands = self.state.mvk.execute_yields(self.state.current_task, "set_input", [value], self.state.reply)
+                    self.state.mvk.returnvalue = None
                     if commands is None:
                         self.state.inputs[self.state.current_task].pop(0)
                 else:
@@ -279,13 +281,17 @@ class ModelverseKernel(AtomicDEVS):
         return self.state
 
     def outputFnc(self):
+        outputs = {}
         if self.state.mvk is None:
             # Ask the root first
-            return {self.to_mvs: [[("RR", [])]]}
+            outputs[self.to_mvs] = [[("RR", [])]]
         elif self.state.waiting:
-            return {self.to_mvs: [self.state.commands]}
+            outputs[self.to_mvs] = [self.state.commands]
 
-        return {}
+        if self.state.mvk and self.state.mvk.returnvalue is not None:
+            outputs[self.to_mvi] = [self.state.mvk.returnvalue]
+
+        return outputs
 
     def timeAdvance(self):
         if self.state.phase == "init_task" and self.state.all_failed:
@@ -325,7 +331,7 @@ class ModelverseInterface(AtomicDEVS):
     def extTransition(self, inputs):
         for inp in inputs[self.from_mvk]:
             self.state.output.append(inp)
-        print("Got event at MvI: " + str(inputs))
+        print("Event history: " + str(self.state.output))
         return self.state
 
     def outputFnc(self):