|
@@ -97,7 +97,6 @@ Void function create_schedule(model : Element, is_time_zero : Boolean):
|
|
|
String new_schedule
|
|
|
Boolean ready
|
|
|
|
|
|
- log("Fetching all blocks")
|
|
|
all_blocks = allInstances(model, "Block")
|
|
|
visited = create_node()
|
|
|
to_visit = create_node()
|
|
@@ -107,50 +106,86 @@ Void function create_schedule(model : Element, is_time_zero : Boolean):
|
|
|
else:
|
|
|
log("Make normal schedule!")
|
|
|
schedule = instantiate_node(model, "Schedule", "schedule_run")
|
|
|
+ instantiate_attribute(model, schedule, "active", True)
|
|
|
+ log("Instantiated attribute")
|
|
|
|
|
|
while (read_nr_out(all_blocks) > 0):
|
|
|
- log("Loop 1")
|
|
|
element_name = set_pop(all_blocks)
|
|
|
if (bool_not(set_in(visited, element_name))):
|
|
|
list_append(to_visit, element_name)
|
|
|
|
|
|
while (list_len(to_visit) > 0):
|
|
|
- log("Loop 2")
|
|
|
element_name = list_read(to_visit, list_len(to_visit) - 1)
|
|
|
if (reverseKeyLookup(model["metamodel"]["model"], dict_read_node(model["type_mapping"], model["model"][element_name])) == "DelayBlock"):
|
|
|
if (is_time_zero):
|
|
|
- log("Checking all incoming 0")
|
|
|
incoming_links = allIncomingAssociationInstances(model, element_name, "InitialCondition")
|
|
|
else:
|
|
|
incoming_links = create_node()
|
|
|
else:
|
|
|
- log("Checking all incoming n")
|
|
|
incoming_links = allIncomingAssociationInstances(model, element_name, "Link")
|
|
|
ready = True
|
|
|
|
|
|
while (list_len(incoming_links) > 0):
|
|
|
- log("Loop 3")
|
|
|
link = set_pop(incoming_links)
|
|
|
source = readAssociationSource(model, link)
|
|
|
- log("Read association")
|
|
|
if (bool_not(set_in(visited, source))):
|
|
|
list_append(to_visit, source)
|
|
|
ready = False
|
|
|
|
|
|
- log("Check ready!")
|
|
|
if (ready):
|
|
|
- log("Ready!")
|
|
|
new_schedule = instantiate_node(model, "Schedule", "")
|
|
|
- log("Instantiate 1")
|
|
|
- instantiate_link(model, "ConnectedBlock", "", schedule, element_name)
|
|
|
- log("Instantiate 2")
|
|
|
+ log("Instantiate active")
|
|
|
+ log(cast_e2s(new_schedule))
|
|
|
+ instantiate_attribute(model, new_schedule, "active", False)
|
|
|
+ log("ACTIVE OK")
|
|
|
+ instantiate_link(model, "LinkedBlock", "", schedule, element_name)
|
|
|
instantiate_link(model, "NextSchedule", "", schedule, new_schedule)
|
|
|
- log("Instantiate 3")
|
|
|
schedule = new_schedule
|
|
|
list_delete(to_visit, list_len(to_visit) - 1)
|
|
|
set_add(visited, element_name)
|
|
|
|
|
|
- log("Done!")
|
|
|
+ return !
|
|
|
+
|
|
|
+String function readType(model : Element, name : String):
|
|
|
+ return reverseKeyLookup(model["metamodel"]["model"], dict_read_node(model["type_mapping"], model["model"][name]))!
|
|
|
+
|
|
|
+Void function list_CBD(model : Element):
|
|
|
+ Element all_elements
|
|
|
+ String elem
|
|
|
+ String block
|
|
|
+
|
|
|
+ output("Blocks:")
|
|
|
+ all_elements = allInstances(model, "Block")
|
|
|
+ while (read_nr_out(all_elements) > 0):
|
|
|
+ elem = set_pop(all_elements)
|
|
|
+ output(((" " + elem) + ": ") + readType(model, elem))
|
|
|
+
|
|
|
+ output("Links:")
|
|
|
+ all_elements = allInstances(model, "Link")
|
|
|
+ while (read_nr_out(all_elements) > 0):
|
|
|
+ elem = set_pop(all_elements)
|
|
|
+ output(((" " + reverseKeyLookup(model["model"], read_edge_src(model["model"][elem]))) + " --> ") + reverseKeyLookup(model["model"], read_edge_dst(model["model"][elem])))
|
|
|
+
|
|
|
+ output("Initial conditions:")
|
|
|
+ all_elements = allInstances(model, "InitialCondition")
|
|
|
+ while (read_nr_out(all_elements) > 0):
|
|
|
+ elem = set_pop(all_elements)
|
|
|
+ output(((" " + reverseKeyLookup(model["model"], read_edge_src(model["model"][elem]))) + " --> ") + reverseKeyLookup(model["model"], read_edge_dst(model["model"][elem])))
|
|
|
+
|
|
|
+ output("Schedule @ 0:")
|
|
|
+ elem = "schedule_init"
|
|
|
+ while (allOutgoingAssociationInstances(model, elem, "LinkedBlock")):
|
|
|
+ block = set_pop(readAssociationSource(model, set_pop(allOutgoingAssociationInstances(model, elem, "LinkedBlock"))))
|
|
|
+ output(" " + block)
|
|
|
+ elem = set_pop(readAssociationSource(model, set_pop(allOutgoingAssociationInstances(model, elem, "LinkedBlock"))))
|
|
|
+
|
|
|
+ output("Schedule @ 0:")
|
|
|
+ elem = "schedule_run"
|
|
|
+ while (allOutgoingAssociationInstances(model, elem, "LinkedBlock")):
|
|
|
+ block = set_pop(readAssociationSource(model, set_pop(allOutgoingAssociationInstances(model, elem, "LinkedBlock"))))
|
|
|
+ output(" " + block)
|
|
|
+ elem = set_pop(readAssociationSource(model, set_pop(allOutgoingAssociationInstances(model, elem, "LinkedBlock"))))
|
|
|
+
|
|
|
return !
|
|
|
|
|
|
Void function execute_cbd(model : Element):
|
|
@@ -169,6 +204,8 @@ Void function execute_cbd(model : Element):
|
|
|
output(" list -- list blocks and connections")
|
|
|
output(" help -- this information")
|
|
|
output(" exit -- select another model")
|
|
|
+ elif (cmd == "list"):
|
|
|
+ list_CBD(model)
|
|
|
elif (cmd == "exit"):
|
|
|
return!
|
|
|
else:
|