cbd_merge.alc 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. include "primitives.alh"
  2. include "modelling.alh"
  3. include "object_operations.alh"
  4. include "conformance_scd.alh"
  5. String function map_P2F(model : Element, name : String):
  6. return readAssociationDestination(model, set_pop(allAssociationDestinations(model, name, "P2F_block")))!
  7. Boolean function main(model : Element):
  8. Element all_blocks
  9. String element_name
  10. Float current_time
  11. String time_block
  12. all_blocks = allInstances(model, "PartialRuntime/Block")
  13. while (set_len(all_blocks) > 0):
  14. element_name = set_pop(all_blocks)
  15. if (set_len(allOutgoingAssociationInstances(model, element_name, "P2F_block")) > 0):
  16. // Element already exists in full, so copy existing attributes
  17. if (is_nominal_instance(model, element_name, "ICBlock")):
  18. instantiate_attribute(model, element_name, "last_in", read_attribute(model, map_P2F(model, element_name), "last_in"))
  19. if (is_nominal_instance(model, element_name, "IntegratorBlock")):
  20. instantiate_attribute(model, element_name, "last_out", read_attribute(model, map_P2F(model, element_name), "last_out"))
  21. instantiate_attribute(model, element_name, "signal", read_attribute(model, map_P2F(model, element_name), "signal"))
  22. else:
  23. // Element doesn't exist, so initialize with 0.0
  24. instantiate_attribute(model, element_name, "signal", 0.0)
  25. instantiate_link(model, "P2F_block", "", element_name, element_name)
  26. if (set_len(allInstances(model, "FullRuntime/Time")) > 0):
  27. // Time already exists, so copy the value
  28. current_time = read_attribute(model, set_pop(allInstances(model, "FullRuntime/Time")), "current_time")
  29. else:
  30. // No time yet, so initialize
  31. current_time = 0.0
  32. time_block = instantiate_node(model, "PartialRuntime/Time", "")
  33. instantiate_attribute(model, time_block, "start_time", current_time)
  34. instantiate_attribute(model, time_block, "current_time", current_time)
  35. return True!