123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- import logging
- from bokeh.plotting import figure, output_file, show
- from case_study.units.ct_based.ObstacleFMU import ObstacleFMU
- from case_study.units.ct_based.PowerFMU import PowerFMU
- from case_study.units.ct_based.WindowFMU import WindowFMU
- l = logging.getLogger()
- l.setLevel(logging.DEBUG)
- def env_up(time):
- return 1.0
- def env_down(time):
- return 0.0
- cosim_step_size = 0.001
- num_internal_steps = 10
- stop_time = 6.0;
- power = PowerFMU("power", 1e-08, 1e-08, cosim_step_size/num_internal_steps,
- J=0.085,
- b=5,
- K=1.8,
- R=0.15,
- L=0.036,
- V_a=12)
- window_radius = 0.017
- window = WindowFMU("window", 1e-08, 1e-08, cosim_step_size/num_internal_steps,
- J=0.085,
- r=window_radius,
- b = 150,
- c = 1e3) # c = 1e5 makes this an unstable system.
- obstacle = ObstacleFMU("obstacle", 1e-08, 1e-08, cosim_step_size/num_internal_steps,
- c=1e5,
- fixed_x=0.45)
- power.enterInitMode()
- window.enterInitMode()
- obstacle.enterInitMode()
- # Solve initialisation.
- # Notice the order in which the FMUs can be given inputs and obtained outputs.
- power.setValues(0, 0, {power.i: 0.0,
- power.omega: 0.0,
- power.theta: 0.0,
- power.up: env_up(0.0),
- power.down: env_down(0.0)
- })
- pOut = power.getValues(0, 0, [power.omega, power.theta])
- window.setValues(0, 0, {window.omega_input: pOut[power.omega],
- window.theta_input: pOut[power.theta],
- window.theta: 0.0,
- window.omega: 0.0
- })
- wOut = window.getValues(0, 0, [window.tau, window.x])
- obstacle.setValues(0, 0, {obstacle.x: wOut[window.x]})
- oOut = obstacle.getValues(0, 0, [obstacle.F])
- # Coupling equation for power
- power_tau = - ( wOut[window.tau] + window_radius * oOut[obstacle.F])
- power.setValues(0, 0, {power.tau: power_tau})
- power.exitInitMode()
- window.exitInitMode()
- obstacle.exitInitMode()
- trace_i = [0.0]
- trace_omega = [0.0]
- trace_x = [0.0]
- trace_F = [0.0]
- times = [0.0]
- time = 0.0
- for step in range(1, int(stop_time / cosim_step_size) + 1):
-
- # set old values for window (this is not ideal)
- pOut = power.getValues(step-1, 0, [power.omega, power.theta, power.i])
-
- window.setValues(step, 0, {window.omega_input: pOut[power.omega],
- window.theta_input: pOut[power.theta]})
- window.doStep(time, step, 0, cosim_step_size)
- wOut = window.getValues(step, 0, [window.tau, window.x])
-
- obstacle.setValues(step, 0, {obstacle.x: wOut[window.x]})
- obstacle.doStep(time, step, 0, cosim_step_size)
- oOut = obstacle.getValues(step, 0, [obstacle.F])
-
- # Coupling equation
- power_tau = - ( wOut[window.tau] + window_radius * oOut[obstacle.F])
-
- power.setValues(step, 0, {power.tau: power_tau,
- power.up: env_up(time),
- power.down: env_down(time)})
-
- power.doStep(time, step, 0, cosim_step_size)
- pOut = power.getValues(step, 0, [power.omega, power.theta, power.i])
-
- trace_omega.append(pOut[power.omega])
- trace_i.append(pOut[power.i])
- trace_x.append(wOut[window.x])
- trace_F.append(oOut[obstacle.F])
- time += cosim_step_size
- times.append(time)
- color_pallete = [
- "#e41a1c",
- "#377eb8",
- "#4daf4a",
- "#984ea3",
- "#ff7f00",
- "#ffff33",
- "#a65628",
- "#f781bf"
- ]
- output_file("./results.html", title="Results")
- p = figure(title="Plot", x_axis_label='time', y_axis_label='')
- p.line(x=times, y=trace_omega, legend="trace_omega", color=color_pallete[0])
- p.line(x=times, y=trace_i, legend="trace_i", color=color_pallete[1])
- show(p)
- output_file("./results_x.html", title="Results")
- p = figure(title="Plot", x_axis_label='time', y_axis_label='')
- p.line(x=times, y=trace_x, legend="trace_x", color=color_pallete[2])
- show(p)
- output_file("./results_F.html", title="Results")
- p = figure(title="Plot", x_axis_label='time', y_axis_label='')
- p.line(x=times, y=trace_F, legend="trace_F", color=color_pallete[3])
- show(p)
|