Browse Source

runtime metamodel added, something wong with i/o in modelverse

Simon Van Mierlo 8 years ago
parent
commit
eabd604d13

+ 7 - 6
integration/code/pdevs_client.alc

@@ -2,16 +2,17 @@ include "primitives.alh"
 include "services.alh"
 include "modelling.alh"
 include "object_operations.alh"
+include "utils.alh"
+include "io.alh"
 
 Boolean function main(model : Element):
 	String port
     String the_input
     String devs_model
 	port = comm_connect("pypdevs_simulator")
-    
-    log(dict_to_string(model))
-    
-    log("Sending model...")
+        
+    log("(PDEVS) task name = " + get_taskname())
+    log("(PDEVS) Sending model...")
     comm_set(port, read_attribute(model, set_pop(allInstances(model, "MyString/MyString")), "value"))
     log(port)
     
@@ -19,12 +20,12 @@ Boolean function main(model : Element):
         if (comm_hasInput(port)):
             log(cast_v2s(has_input()))
             the_input = comm_get(port)
-            log("Got input from simulator!")
+            log("(PDEVS) Got input from simulator!")
             log(the_input)
             output(the_input)
         if (has_input()):
             the_input = input()
-            log("Got input from console!")
+            log("(PDEVS) Got input from console/ps simulator!")
             log(cast_v2s(the_input))
             if (is_physical_string(the_input)):
                 comm_set(port, the_input)

+ 58 - 15
interface/PDEVS/console.py

@@ -63,6 +63,9 @@ def register_service():
 def start_pypdevs_client(conn):
     init('msdl.uantwerpen.be:8001')
     login("admin", "admin")
+
+    conn.send(get_taskname())
+    conn.close()
     
     print("Remove ParallelDEVS simulator client")
     try:
@@ -77,11 +80,10 @@ def start_pypdevs_client(conn):
     except ModelExists:
         pass
 
+    controller = Controller()
+    
     print("Starting PyPDEVS client...")
-    task_name = transformation_execute_AL("models/paralleldevs_simulator", {"MyString": "models/example_PS_DEVS_String"}, {})
-
-    conn.send(task_name)
-    conn.close()
+    transformation_execute_AL("models/paralleldevs_simulator", {"MyString": "models/example_PS_DEVS_String"}, {})
         
 if __name__ == '__main__':
     freeze_support()    
@@ -177,28 +179,52 @@ if __name__ == '__main__':
             
         print("Execute DEVS->String transformation")
         transformation_execute_AL("models/paralleldevs_to_string", {"ParallelDEVS": "models/example_PS_DEVS"}, {"MyString": "models/example_PS_DEVS_String"})
+        
+        # Remove the runtime metamodel for ProductionSystem
+        print("Remove ProductionSystem runtime metamodel")
+        try:
+            model_delete("formalisms/ProductionSystemRuntime")
+        except ModelverseException:
+            pass
+            
+        # Add the runtime metamodel for ProductionSystem
+        print("Add ProductionSystem runtime metamodel")
+        try:
+            model_add("formalisms/ProductionSystemRuntime", "formalisms/SimpleClassDiagrams", open("../../models/production_system_runtime.mvc").read())
+        except ModelExists:
+            pass
+            
+        print("Remove model")
+        try:
+            model_delete("models/example_PS_runtime")
+        except ModelverseException:
+            pass
+
+        print("Add model")
+        try:
+            model_add("models/example_PS_runtime", "formalisms/ProductionSystemRuntime", open("../../models/example_PS_runtime.mvc").read())
+        except ModelExists:
+            pass
     
     print("Starting PyPDEVS client")    
     parent_conn, child_conn = Pipe()
     p1 = Process(target=start_pypdevs_client, args=(child_conn,))
     p1.start()
-    print 'got process output: %s' % parent_conn.recv()
-
-    """
-    print("Remove PDEVS model")
+    pdevs_client_taskname = parent_conn.recv()
+        
+    print("Remove ProductionSystem simulator")
     try:
-        model_delete("models/produce_consume_pdevs")
+        model_delete("models/ps_simulator")
     except ModelverseException:
         pass
 
-    print("Add PDEVS model")
+    # TODO: Make this a transformation to a trace metamodel
+    print("Add ProductionSystem simulator")
     try:
-        model_add("models/produce_consume_pdevs", "formalisms/ParallelDEVS", open("../../models/produce_consume_PDEVS.mvc").read())
+        transformation_add_AL({"ProductionSystemRuntime": "formalisms/ProductionSystemRuntime", "ParallelDEVS": "formalisms/ParallelDEVS"}, {}, "models/ps_simulator", open("../../integration/code/ps_simulator.alc", "r").read())
     except ModelExists:
         pass
-    """
     
-    '''
     controller = Controller()
 
     def set_defaults(inp, defaultlist):
@@ -341,7 +367,24 @@ if __name__ == '__main__':
     output_thread = threading.Thread(target=outputter)
     output_thread.daemon = True
     output_thread.start()
-
+    
+    print("Execute PS simulator")
+    transformation_execute_AL("models/ps_simulator", {"ProductionSystemRuntime": "models/example_PS_runtime", "ParallelDEVS": "models/example_PS_DEVS"}, {}, tracability_model="models/PS_DEVS_traceability", statechart=(controller, "mv_input", "mv_output"))
+    controller.addInput(Event("mv_input", "input", [pdevs_client_taskname]))
+    
     print("Starting controller")
     controller.start()
-    '''
+
+    """
+    print("Remove PDEVS model")
+    try:
+        model_delete("models/produce_consume_pdevs")
+    except ModelverseException:
+        pass
+
+    print("Add PDEVS model")
+    try:
+        model_add("models/produce_consume_pdevs", "formalisms/ParallelDEVS", open("../../models/produce_consume_PDEVS.mvc").read())
+    except ModelExists:
+        pass
+    """

+ 4 - 0
interface/PDEVS/modelverse.py

@@ -1015,6 +1015,10 @@ def model_types(model_name):
     output = _handle_output("Success: ", split=True)
     return set(output)
 
+def get_taskname():
+    """Fetch the taskname of the current connection."""
+    return taskname
+
 import atexit
 def _close_model():
     if mode == MODE_MODIFY:

+ 75 - 0
models/example_PS_runtime.mvc

@@ -0,0 +1,75 @@
+Generator WheelsGenerator {
+    Wheels w_for_g {}
+}
+Generator TracksGenerator {
+    Tracks t_for_g {}
+}
+Generator BodyGenerator {
+    Body b_for_g {}
+}
+Generator MachineGunGenerator {
+    MachineGun mg_for_g {}
+}
+Generator WaterCannonGenerator {
+    WaterCannon wc_for_g {}
+}
+
+ConveyorBelt w_g_to_assembler {
+    capacity = 2
+}
+ConveyorBelt t_g_to_assembler {
+    capacity = 2
+}
+ConveyorBelt b_g_to_assembler {
+    capacity = 2
+}
+ConveyorBelt mg_g_to_assembler {
+    capacity = 2
+}
+ConveyorBelt wc_g_to_assembler {
+    capacity = 2
+}
+
+M_To_Conv(WheelsGenerator, w_g_to_assembler) {}
+M_To_Conv(TracksGenerator, t_g_to_assembler) {}
+M_To_Conv(BodyGenerator, b_g_to_assembler) {}
+M_To_Conv(MachineGunGenerator, mg_g_to_assembler) {}
+M_To_Conv(WaterCannonGenerator, wc_g_to_assembler) {}
+
+Assembler assembler {}
+
+Conv_To_M(w_g_to_assembler, assembler) {}
+Conv_To_M(t_g_to_assembler, assembler) {}
+Conv_To_M(b_g_to_assembler, assembler) {}
+Conv_To_M(mg_g_to_assembler, assembler) {}
+Conv_To_M(wc_g_to_assembler, assembler) {}
+
+QualityControl qualitycontrol {}
+ConveyorBelt assembler_to_qualitycontrol {
+    capacity = 2
+}
+M_To_Conv(assembler, assembler_to_qualitycontrol) {}
+Conv_To_M(assembler_to_qualitycontrol, qualitycontrol) {}
+
+Repair repair {}
+ConveyorBelt qualitycontrol_broken_to_repair {
+    capacity = 2
+}
+QC_To_Conv(qualitycontrol, qualitycontrol_broken_to_repair) {}
+Conv_To_M(qualitycontrol_broken_to_repair, repair) {}
+
+Collector collector {}
+ConveyorBelt qualitycontrol_to_collector {
+    capacity = 2
+}
+M_To_Conv(qualitycontrol, qualitycontrol_to_collector) {}
+Conv_To_M(qualitycontrol_to_collector, collector) {}
+
+ConveyorBelt repair_to_collector {
+    capacity = 2
+}
+M_To_Conv(repair, repair_to_collector) {}
+Conv_To_M(repair_to_collector, collector) {}
+
+Operator op1 {}
+Operator op2 {}

+ 0 - 1
models/production_system_design.mvc

@@ -28,5 +28,4 @@ Association QC_To_Conv(QualityControl, ConveyorBelt) {}
 Association Conv_To_Conv(ConveyorBelt, ConveyorBelt) {}
 Association Conv_To_M(ConveyorBelt, Machine) {}
 Association Op_To_M(Operator, Machine) {}
-Association P_On_Conv(Part, ConveyorBelt) {}
 Association Gen_To_Part(Generator, Part) {}

+ 37 - 0
models/production_system_runtime.mvc

@@ -0,0 +1,37 @@
+SimpleAttribute String {}
+SimpleAttribute Integer {}
+
+Class Machine {}
+Class Processor: Machine {}
+Class Assembler: Processor {}
+Class QualityControl: Processor {}
+Class Repair: Processor {}
+Class Generator: Machine {}
+Class Collector: Machine {
+    WarAPCs: Integer
+    RiotAPCs: Integer
+}
+Class ConveyorBelt {
+    capacity: Integer
+}
+Class Operator {}
+Class Item {}
+Class Part: Item {}
+Class Wheels: Part {}
+Class Tracks: Part {}
+Class Body: Part {}
+Class MachineGun: Part {}
+Class WaterCannon: Part {}
+Class FinishedProduct: Item {}
+Class WarAPC: FinishedProduct {}
+Class RiotAPC: FinishedProduct {}
+
+Association M_To_Conv(Machine, ConveyorBelt) {}
+Association QC_To_Conv(QualityControl, ConveyorBelt) {}
+Association Conv_To_Conv(ConveyorBelt, ConveyorBelt) {}
+Association Conv_To_M(ConveyorBelt, Machine) {}
+Association Op_To_M(Operator, Machine) {}
+Association Gen_To_Part(Generator, Part) {}
+
+Association Conv_To_I(ConveyorBelt, Item) {}
+Association Proc_To_Item(Processor, Item) {}

File diff suppressed because it is too large
+ 4 - 4
models/ps_to_devs.mvc