|
@@ -195,6 +195,7 @@ Void function step_simulation(model : Element):
|
|
|
String block
|
|
|
String elem
|
|
|
String blocktype
|
|
|
+ String output_string
|
|
|
|
|
|
time = "time"
|
|
|
if (cast_s2i(cast_v2s(read_attribute(model, time, "current_time"))) == 0):
|
|
@@ -202,33 +203,64 @@ Void function step_simulation(model : Element):
|
|
|
else:
|
|
|
schedule = "schedule_run"
|
|
|
|
|
|
- output("==== START ====")
|
|
|
+ output_string = "("
|
|
|
while (read_nr_out(allOutgoingAssociationInstances(model, schedule, "LinkedBlock")) > 0):
|
|
|
block = readAssociationDestination(model, set_pop(allOutgoingAssociationInstances(model, schedule, "LinkedBlock")))
|
|
|
schedule = readAssociationDestination(model, set_pop(allOutgoingAssociationInstances(model, schedule, "NextSchedule")))
|
|
|
|
|
|
// Execute "block"
|
|
|
blocktype = readType(model, block)
|
|
|
- unset_attribute(model, block, "signal")
|
|
|
if (blocktype == "ConstantBlock"):
|
|
|
signal = read_attribute(model, block, "value")
|
|
|
- log("Value: " + cast_v2s(read_attribute(model, block, "value")))
|
|
|
elif (blocktype == "AdditionBlock"):
|
|
|
signal = 0.0
|
|
|
incoming = allIncomingAssociationInstances(model, block, "Link")
|
|
|
while (read_nr_out(incoming) > 0):
|
|
|
selected = readAssociationSource(model, set_pop(incoming))
|
|
|
- log("V += " + cast_v2s(read_attribute(model, selected, "signal")))
|
|
|
signal = signal + cast_s2f(cast_v2s(read_attribute(model, selected, "signal")))
|
|
|
+ elif (blocktype == "MultiplyBlock"):
|
|
|
+ signal = 0.0
|
|
|
+ incoming = allIncomingAssociationInstances(model, block, "Link")
|
|
|
+ while (read_nr_out(incoming) > 0):
|
|
|
+ selected = readAssociationSource(model, set_pop(incoming))
|
|
|
+ signal = signal * cast_s2f(cast_v2s(read_attribute(model, selected, "signal")))
|
|
|
+ elif (blocktype == "NegatorBlock"):
|
|
|
+ incoming = allIncomingAssociationInstances(model, block, "Link")
|
|
|
+ while (read_nr_out(incoming) > 0):
|
|
|
+ selected = readAssociationSource(model, set_pop(incoming))
|
|
|
+ signal = float_neg(cast_s2f(cast_v2s(read_attribute(model, selected, "signal"))))
|
|
|
+ elif (blocktype == "InverseBlock"):
|
|
|
+ incoming = allIncomingAssociationInstances(model, block, "Link")
|
|
|
+ while (read_nr_out(incoming) > 0):
|
|
|
+ selected = readAssociationSource(model, set_pop(incoming))
|
|
|
+ signal = float_division(1.0, cast_s2f(cast_v2s(read_attribute(model, selected, "signal"))))
|
|
|
+ elif (blocktype == "DelayBlock"):
|
|
|
+ if (schedule == "schedule_init"):
|
|
|
+ incoming = allIncomingAssociationInstances(model, block, "InitialCondition")
|
|
|
+ while (read_nr_out(incoming) > 0):
|
|
|
+ selected = readAssociationSource(model, set_pop(incoming))
|
|
|
+ signal = cast_s2f(cast_v2s(read_attribute(model, selected, "signal")))
|
|
|
+ else:
|
|
|
+ signal = read_attribute(model, block, "memory")
|
|
|
+
|
|
|
+ // Update memory
|
|
|
+ incoming = allIncomingAssociationInstances(model, block, "Link")
|
|
|
+ while (read_nr_out(incoming) > 0):
|
|
|
+ selected = readAssociationSource(model, set_pop(incoming))
|
|
|
+ unset_attribute(model, block, "memory")
|
|
|
+ instantiate_attribute(model, block, "memory", cast_s2f(cast_v2s(read_attribute(model, selected, "signal"))))
|
|
|
+
|
|
|
+ unset_attribute(model, block, "signal")
|
|
|
instantiate_attribute(model, block, "signal", signal)
|
|
|
- output(((" " + block) + " = ") + cast_v2s(read_attribute(model, block, "signal")))
|
|
|
+ output_string = output_string + (((block + " = ") + cast_v2s(signal)) + "; ")
|
|
|
+ output_string = output_string + ")"
|
|
|
|
|
|
// Increase simulation time
|
|
|
Integer new_time
|
|
|
new_time = cast_s2i(cast_v2s(read_attribute(model, time, "current_time"))) + 1
|
|
|
unset_attribute(model, time, "current_time")
|
|
|
instantiate_attribute(model, time, "current_time", new_time)
|
|
|
- output("==== END ====")
|
|
|
+ output(output_string)
|
|
|
|
|
|
return !
|
|
|
|