| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- import target
- from sccd.runtime.statecharts_core import Event
- import threading
- from Options import Options
- from CBDMultipleOutput.models.HarmonicOscilator import CircleCBDDerivative
- from CBDMultipleOutput.Source.CBD import CBD
- if __name__ == '__main__':
- options = Options(delta = 0.01)
- options.setMaxIterations(1000);
- #cbdModel = EvenNumberGen("EvenNumbersGenerator")
- cbdModel = CircleCBDDerivative("CircleCBDDerivative", options.getDeltaT())
- # Use keep_running false for as fast as possible simulation.
- controller = target.Controller(options, cbdModel)
-
- def set_defaults(inp, defaultlist):
- for i, v in enumerate(defaultlist):
- if len(inp) == i + 1:
- inp.append(v)
-
- def get_bool(val):
- if val.lower() in ["true", "yes", "1"]:
- return True
- else:
- return False
- def raw_inputter():
- while 1:
- inp = raw_input().split(" ")
- action = inp[0]
- if action == "continuous":
- params = []
- elif action == "realtime":
- set_defaults(inp, [1.0])
- params = [inp[1]]
- elif action == "big_step":
- params = []
- elif action == "small_step":
- params = []
- elif action == "pause":
- params = []
- elif action == "add_breakpoint":
- if len(inp) < 5:
- print("Adding a breakpoint requires 4 parameters!")
- continue
- # Merge together the final part again
- params = [inp[1], " ".join(inp[2:-2]).replace("\\n", "\n").replace("\\t", "\t"), get_bool(inp[-2]), get_bool(inp[-1])]
- print("Generated parameters: " + str(params))
- elif action == "del_breakpoint":
- if len(inp) < 2:
- print("Breakpoint removal requires 1 parameter!")
- continue
- params = [inp[1]]
- elif action == "toggle_breakpoint":
- params = [inp[1]]
- elif action == "list_breakpoints":
- params = []
- elif action == "god_event":
- if len(inp) != 3:
- print("God events require 2 parameters!")
- continue
- params = [inp[1], eval(inp[2])]
- elif action == "help":
- print("Supported operations:")
- print(" continuous")
- print(" --> Simulate until termination time is reached")
- print(" pause")
- print(" --> Pause the simulation")
- print(" realtime [realtime_scale]")
- print(" --> Simulate in realtime")
- print(" realtime_scale can speed up or slow down the pace")
- print(" big_step")
- print(" --> Simulate a big step")
- print(" small_step")
- print(" --> Simulate a small step")
- print(" add_breakpoint name function enabled disable_on_trigger")
- print(" --> Add a breakpoint that will pause simulation when function returns True")
- print(" the function should contain a definition of the 'breakpoint' function")
- print(" and must take 1 parameter")
- print(" enabled indicates whether or not the breakpoint should be checked")
- print(" disable_on_trigger determines if the breakpoint should auto-disable")
- print(" after being triggered")
- print(" del_breakpoint name")
- print(" --> Remove a breakpoint")
- print(" toggle_breakpoint name")
- print(" --> Toggle the designated breakpoint")
- print(" list_breakpoints")
- print(" --> List all breakpoints")
- print(" god_event signal_name new_value")
- print(" --> Updates the last value of the signal")
- print("")
- print("Defaults: ")
- print(" realtime_scale --> 1.0")
- continue
- else:
- print("Command not understood: " + str(inp))
- continue
- controller.addInput(Event(action, "user_input", params))
-
- input_thread = threading.Thread(target=raw_inputter)
- input_thread.daemon = True
- input_thread.start()
- output_listener = controller.addOutputListener(["user_output"])
- def outputter():
- while 1:
- print output_listener.fetch(-1)
- output_thread = threading.Thread(target=outputter)
- output_thread.daemon = True
- output_thread.start()
- controller.start()
|