Skip to content

Commit 2fb4bc1

Browse files
committed
[ModelicaSystem] add ModelicaSystemRunner
1 parent d21e7df commit 2fb4bc1

1 file changed

Lines changed: 55 additions & 0 deletions

File tree

OMPython/ModelicaSystem.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
OMCSessionLocal,
3030

3131
OMSessionABC,
32+
OMSessionRunner,
3233
OMPathABC,
3334
)
3435

@@ -2569,3 +2570,57 @@ class ModelicaSystemDoE(ModelicaDoEOMC):
25692570
"""
25702571
Compatibility class.
25712572
"""
2573+
2574+
2575+
class ModelicaSystemRunner(ModelicaSystemABC):
2576+
"""
2577+
Class to simulate a Modelica model using a pre-compiled model binary.
2578+
"""
2579+
2580+
def __init__(
2581+
self,
2582+
work_directory: Optional[str | os.PathLike] = None,
2583+
session: Optional[OMSessionABC] = None,
2584+
) -> None:
2585+
if session is None:
2586+
session = OMSessionRunner()
2587+
2588+
if not isinstance(session, OMSessionRunner):
2589+
raise ModelicaSystemError("Only working if OMCsessionDummy is used!")
2590+
2591+
super().__init__(
2592+
work_directory=work_directory,
2593+
session=session,
2594+
)
2595+
2596+
def setup(
2597+
self,
2598+
model_name: Optional[str] = None,
2599+
variable_filter: Optional[str] = None,
2600+
) -> None:
2601+
"""
2602+
Needed definitions to set up the runner class. This class expects the model (defined by model_name) to exists
2603+
within the working directory. At least two files are needed:
2604+
2605+
* model executable (as '<model_name>' or '<model_name>.exe'; in case of Windows additional '<model_name>.bat'
2606+
is expected to evaluate the path to needed dlls
2607+
* the model initialization file (as '<model_name>_init.xml')
2608+
"""
2609+
2610+
if self._model_name is not None:
2611+
raise ModelicaSystemError("Can not reuse this instance of ModelicaSystem "
2612+
f"defined for {repr(self._model_name)}!")
2613+
2614+
if model_name is None or not isinstance(model_name, str):
2615+
raise ModelicaSystemError("A model name must be provided!")
2616+
2617+
# set variables
2618+
self._model_name = model_name # Model class name
2619+
self._variable_filter = variable_filter
2620+
2621+
# test if the model can be executed
2622+
self.check_model_executable()
2623+
2624+
# read XML file
2625+
xml_file = self._session.omcpath(self.getWorkDirectory()) / f"{self._model_name}_init.xml"
2626+
self._xmlparse(xml_file=xml_file)

0 commit comments

Comments
 (0)