diff --git a/requirements.txt b/requirements.txt index e49f08b..bb038c3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -19,3 +19,4 @@ isort black pre-commit cosapp_fmu @ git+ssh://git@github.com/twiinIT/cosapp-fmu.git@master +OMPython diff --git a/rocket_twin/systems/control/controller.fmu b/rocket_twin/systems/control/controller.fmu deleted file mode 100644 index aa8b11e..0000000 Binary files a/rocket_twin/systems/control/controller.fmu and /dev/null differ diff --git a/rocket_twin/systems/control/controller/controller.fmu b/rocket_twin/systems/control/controller/controller.fmu new file mode 100644 index 0000000..0cc0086 Binary files /dev/null and b/rocket_twin/systems/control/controller/controller.fmu differ diff --git a/rocket_twin/systems/station/station.py b/rocket_twin/systems/station/station.py index fc16f6a..49f9ce2 100644 --- a/rocket_twin/systems/station/station.py +++ b/rocket_twin/systems/station/station.py @@ -2,6 +2,7 @@ from cosapp_fmu.FMUsystem import FMUSystem from rocket_twin.systems import Clock, Pipe, Rocket, Tank +from rocket_twin.utils import create_FMU class Station(System): @@ -16,7 +17,7 @@ class Station(System): ------ """ - def setup(self, fmu_path=None): + def setup(self, model_path=None, model_name=None): self.add_child(Tank("g_tank")) self.add_child(Pipe("pipe")) self.add_child(Rocket("rocket")) @@ -24,8 +25,9 @@ def setup(self, fmu_path=None): self.connect(self.g_tank.outwards, self.pipe.inwards, {"w_out": "w_in"}) self.connect(self.pipe.outwards, self.rocket.inwards, {"w_out": "w_in"}) - if fmu_path is not None: + if model_path is not None: self.add_child(Clock("clock")) + fmu_path = create_FMU(model_path, model_name) self.add_child(FMUSystem("controller", fmu_path=fmu_path)) self.connect(self.clock.outwards, self.controller.inwards, {"time_var": "ti"}) self.connect(self.controller.outwards, self.g_tank.inwards, {"wg": "w_command"}) diff --git a/rocket_twin/tests/test_sequences_fmu.py b/rocket_twin/tests/test_sequences_fmu.py index 2708f2a..e102370 100644 --- a/rocket_twin/tests/test_sequences_fmu.py +++ b/rocket_twin/tests/test_sequences_fmu.py @@ -8,7 +8,9 @@ class TestSequencesFMU: def test_sequence_fmu(self): - sys = Station("sys", fmu_path="rocket_twin/systems/control/controller.fmu") + model_path = r"rocket_twin\\systems\\control\\controller.mo" + model_name = "controller" + sys = Station("sys", model_path=model_path, model_name=model_name) driver = sys.add_driver(RungeKutta(order=4, time_interval=[0, 15], dt=0.01)) init = {"g_tank.weight_p": 10.0, "rocket.tank.weight_p": 0.0} values = { diff --git a/rocket_twin/utils/__init__.py b/rocket_twin/utils/__init__.py index 0c17755..3cae999 100644 --- a/rocket_twin/utils/__init__.py +++ b/rocket_twin/utils/__init__.py @@ -1,3 +1,4 @@ from rocket_twin.utils.run_sequences import run_sequences +from rocket_twin.utils.create_fmu import create_FMU -__all__ = ["run_sequences"] +__all__ = ["run_sequences", "create_FMU"] diff --git a/rocket_twin/utils/create_fmu.py b/rocket_twin/utils/create_fmu.py new file mode 100644 index 0000000..30f8e12 --- /dev/null +++ b/rocket_twin/utils/create_fmu.py @@ -0,0 +1,19 @@ +import os +import rocket_twin.systems.control +from OMPython import ModelicaSystem + +def create_FMU(model_path, model_name): + + fmu_path = os.path.join(rocket_twin.systems.control.__path__[0], model_name) + try: + os.mkdir(fmu_path) + except OSError: + pass + os.chdir(fmu_path) + mod=ModelicaSystem(model_path,model_name) + fmu = mod.convertMo2Fmu() + for filename in os.listdir(fmu_path): + if filename != (model_name + ".fmu"): + os.remove(filename) + + return fmu \ No newline at end of file