Skip to content

ModelicaSystem cannot instantiate model, but sendExpression works #478

Description

@cbu-hw

I am encountering puzzling behaviour trying to instantiate a simple model that is located at some path (not the current directory), which gets me an exception with exit status 3221225781 (google suggests this is "dll not found") in check_model_executable:

model MyModel
equation
end MyModel;
from OMPython import ModelicaSystem, OMCSessionZMQ
import sys
print(f'{sys.path=}')

print("works")
omc = OMCSessionZMQ()
print(omc.sendExpression("getVersion()"))
omc.sendExpression('loadFile("C:\\Users\\myuser\\Software_local\\Modelica\\Issues\\MyModel.mo")')
omc.sendExpression("instantiateModel(MyModel)")

print("broken")
model = ModelicaSystem(
    fileName='C:\\Users\\myuser\\Software_local\\Modelica\\Issues\\MyModel.mo',
    modelName='MyModel',
)

Output:

> python .\load_package.py
sys.path=['C:\\Users\\myuser\\Software_local\\Modelica\\Issues\\dll_find_problems', 'C:\\Users\\myuser\\AppData\\Local\\miniforge3\\envs\\modelica\\python312.zip', 'C:\\Users\\myuser\\AppData\\Local\\miniforge3\\envs\\modelica\\DLLs', 'C:\\Users\\myuser\\AppData\\Local\\miniforge3\\envs\\modelica\\Lib', 'C:\\Users\\myuser\\AppData\\Local\\miniforge3\\envs\\modelica', 'C:\\Users\\myuser\\AppData\\Local\\miniforge3\\envs\\modelica\\Lib\\site-packages', 'C:\\Users\\myuser\\AppData\\Local\\miniforge3\\envs\\modelica\\Lib\\site-packages\\win32', 'C:\\Users\\myuser\\AppData\\Local\\miniforge3\\envs\\modelica\\Lib\\site-packages\\win32\\lib', 'C:\\Users\\myuser\\AppData\\Local\\miniforge3\\envs\\modelica\\Lib\\site-packages\\Pythonwin']
works
C:\Users\myuser\Software_local\Modelica\Issues\dll_find_problems\load_package.py:6: DeprecationWarning: The class OMCSessionZMQ is depreciated and will be removed in future versions! Please use OMCSession* classes instead!
  omc = OMCSessionZMQ()
v1.28.0-dev.836+gca0c61d2c7.cmake
[OMC log for 'sendExpression(expr=loadFile("C:\Users\myuser\Software_local\Modelica\Issues\MyModel.mo"), parsed=True)']: [syntax:warning:2] Lexer treating \ as \\, since \U is not a valid Modelica escape sequence.
[OMC log for 'sendExpression(expr=loadFile("C:\Users\myuser\Software_local\Modelica\Issues\MyModel.mo"), parsed=True)']: [syntax:warning:2] Lexer treating \ as \\, since \u is not a valid Modelica escape sequence.
[OMC log for 'sendExpression(expr=loadFile("C:\Users\myuser\Software_local\Modelica\Issues\MyModel.mo"), parsed=True)']: [syntax:warning:2] Lexer treating \ as \\, since \S is not a valid Modelica escape sequence.
[OMC log for 'sendExpression(expr=loadFile("C:\Users\myuser\Software_local\Modelica\Issues\MyModel.mo"), parsed=True)']: [syntax:warning:2] Lexer treating \ as \\, since \M is not a valid Modelica escape sequence.
[OMC log for 'sendExpression(expr=loadFile("C:\Users\myuser\Software_local\Modelica\Issues\MyModel.mo"), parsed=True)']: [syntax:warning:2] Lexer treating \ as \\, since \I is not a valid Modelica escape sequence.
[OMC log for 'sendExpression(expr=loadFile("C:\Users\myuser\Software_local\Modelica\Issues\MyModel.mo"), parsed=True)']: [syntax:warning:2] Lexer treating \ as \\, since \M is not a valid Modelica escape sequence.
broken
Traceback (most recent call last):
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\modelica\Lib\site-packages\OMPython\model_execution.py", line 80, in run
    cmdres = subprocess.run(
             ^^^^^^^^^^^^^^^
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\modelica\Lib\subprocess.py", line 571, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['C:/Users/myuser/AppData/Local/Temp/b956fe61-9405-4aa1-b400-649fe415d817/MyModel.exe', '-help=help']' returned non-zero exit status 3221225781.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\modelica\Lib\site-packages\OMPython\modelica_system_abc.py", line 205, in check_model_executable
    returncode = cmd_definition.run()
                 ^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\modelica\Lib\site-packages\OMPython\model_execution.py", line 101, in run
    raise ModelExecutionException(f"Error running model executable {repr(cmdl)}: {ex}") from ex
OMPython.model_execution.ModelExecutionException: Error running model executable ['C:/Users/myuser/AppData/Local/Temp/b956fe61-9405-4aa1-b400-649fe415d817/MyModel.exe', '-help=help']: Command '['C:/Users/myuser/AppData/Local/Temp/b956fe61-9405-4aa1-b400-649fe415d817/MyModel.exe', '-help=help']' returned non-zero exit status 3221225781.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\myuser\Software_local\Modelica\Issues\dll_find_problems\load_package.py", line 12, in <module>
    model = ModelicaSystem(
            ^^^^^^^^^^^^^^^
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\modelica\Lib\site-packages\OMPython\compatibility_v400.py", line 35, in __init__
    super().__init__(*args, **kwargs)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\modelica\Lib\site-packages\OMPython\ModelicaSystem.py", line 68, in __init__
    self.model(
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\modelica\Lib\site-packages\OMPython\modelica_system_omc.py", line 157, in model
    self.buildModel(variable_filter)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\modelica\Lib\site-packages\OMPython\modelica_system_omc.py", line 218, in buildModel
    self.check_model_executable()
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\modelica\Lib\site-packages\OMPython\modelica_system_abc.py", line 207, in check_model_executable
    raise ModelicaSystemError(f"Cannot execute model: {exc}") from exc
OMPython.modelica_system_abc.ModelicaSystemError: Cannot execute model: Error running model executable ['C:/Users/myuser/AppData/Local/Temp/b956fe61-9405-4aa1-b400-649fe415d817/MyModel.exe', '-help=help']: Command '['C:/Users/myuser/AppData/Local/Temp/b956fe61-9405-4aa1-b400-649fe415d817/MyModel.exe', '-help=help']' returned non-zero exit status 3221225781.

I expect that this instantiation with ModelicaSystem works.
By the way, OMPython should really define a __version__ attribute so that one can easily report its version.

I suspect some path/environment problems, so I printed the PATH that Python sees. Please advise what I can do to add more diagnostics on the OMPython side.
The MyModel.bat content in the temporary directory is

@echo off
SET PATH=;C:/OpenModelica1.28.0-dev-64bit/bin/;C:/OpenModelica1.28.0-dev-64bit/lib/x86_64-windows-gnu/omc;%PATH%;
SET ERRORLEVEL=
CALL "%CD%/MyModel.exe" %*
SET RESULT=%ERRORLEVEL%

EXIT /b %RESULT%

Version and OS

  • Python Version 3.12.13 (via conda)
  • OMPython Version 4.1.0
  • OpenModelica Version v1.28.0-dev.836+gca0c61d2c7.cmake
  • OS: Windows 11

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions