Skip to content

Commit f81cdce

Browse files
committed
[ModelicaSystem] add ModelicaSystemRunner
1 parent ae240a5 commit f81cdce

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

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

0 commit comments

Comments
 (0)