【问题标题】:NullPointerException when compile_fmu used for simulation of Dymola *.mo file from library当 compile_fmu 用于模拟库中的 Dymola *.mo 文件时出现 NullPointerException
【发布时间】:2018-11-26 16:08:19
【问题描述】:

我使用的库是基于 MSL 和 Modelica Buildings 库的。该模型可以由 Dymola 进行模拟,而不会出现任何错误消息或警告。 MODELICAPATH 也在 bashrc 和 PYTHONPATH 中设置。我使用 JModelica 2.1、Python 2.7 和 Ubuntu 16.04。
显然找到了库和模型,所以我认为路径不是实际问题。 当我使用 compile_fmu 来模拟不属于库的模型时,一切正常。所以对我来说,pymodelica 的库结构或类似问题似乎存在问题。你知道这里发生了什么吗?

from pymodelica import compile_fmu
...
fmu=compile_fmu('BuildingModel.Examples.ExampleBuilding','ExampleBuilding.mo')

错误信息:

File 'ExampleBuilding.mo' is part of library at '/home/debs/Schreibtisch/BuildingModel', using library instead.
Unknown program error, java.lang.NullPointerException
Traceback (most recent call last):
  File "Building_Simulation.py", line 239, in <module>
    fmu=compile_fmu('BuildingModel.Examples.ExampleBuilding','ExampleBuilding.mo')
  File "/home/debs/Downloads/JModelica/JModelica/Python/pymodelica/compiler.py", line 141, in compile_fmu
    separate_process, jvm_args)       
  File "/home/debs/Downloads/JModelica/JModelica/Python/pymodelica/compiler.py", line 248, in _compile_unit
    compiler_options, compile_to, compiler_log_level, jvm_args)
  File "/home/debs/Downloads/JModelica/JModelica/Python/pymodelica/compiler.py", line 362, in compile_separate_process
    return log.end();
  File "/home/debs/Downloads/JModelica/JModelica/Python/pymodelica/compiler_logging.py", line 334, in end
    raise JError("%s\n%s" % (exception.message, exception.stacktrace))
pymodelica.compiler_exceptions.JError: 
java.lang.NullPointerException
    at org.jmodelica.modelica.compiler.CommonForIndex.addReplacementEntry(Unknown Source)
    at org.jmodelica.modelica.compiler.FIterExp.splitArrayExp(Unknown Source)
    at org.jmodelica.modelica.compiler.FArray.splitArrayExp(Unknown Source)
    at org.jmodelica.modelica.compiler.InstArrayComponentDecl.Define_splitBindingFExp(Unknown Source)
    at org.jmodelica.modelica.compiler.ASTNode.Define_splitBindingFExp(Unknown Source)
    at org.jmodelica.modelica.compiler.InstNode.splitBindingFExp(Unknown Source)
    at org.jmodelica.modelica.compiler.InstNode.Define_splitBindingFExp(Unknown Source)
    at org.jmodelica.modelica.compiler.ASTNode.Define_splitBindingFExp(Unknown Source)
    at org.jmodelica.modelica.compiler.InstNode.splitBindingFExp(Unknown Source)
    at org.jmodelica.modelica.compiler.InstNode.Define_splitBindingFExp(Unknown Source)
    at org.jmodelica.modelica.compiler.ASTNode.Define_splitBindingFExp(Unknown Source)
    at org.jmodelica.modelica.compiler.InstNode.splitBindingFExp(Unknown Source)
    at org.jmodelica.modelica.compiler.InstAssignable.getBindingFExp_compute(Unknown Source)
    at org.jmodelica.modelica.compiler.InstAssignable.getBindingFExp(Unknown Source)
    at org.jmodelica.modelica.compiler.InstAssignable.hasBindingFExp(Unknown Source)
    at org.jmodelica.modelica.compiler.InstAssignable.isCircular_compute(Unknown Source)
    at org.jmodelica.modelica.compiler.InstAssignable.isCircular(Unknown Source)
    at org.jmodelica.modelica.compiler.FIdUseInstAccess.isCircular(Unknown Source)
    at org.jmodelica.modelica.compiler.FIdUseExp.isCircularCalc(Unknown Source)
    at org.jmodelica.modelica.compiler.FAbstractExp.isCircular_compute(Unknown Source)
    at org.jmodelica.modelica.compiler.FAbstractExp.isCircular(Unknown Source)
    at org.jmodelica.modelica.compiler.FExp.ceval(Unknown Source)
    at org.jmodelica.modelica.compiler.FExp.ceval(Unknown Source)
    at org.jmodelica.modelica.compiler.MutableSize.evaluate(Unknown Source)
    at org.jmodelica.modelica.compiler.MutableSize.get(Unknown Source)
    at org.jmodelica.modelica.compiler.InstComponentDecl.childDimensionLength(Unknown Source)
    at org.jmodelica.modelica.compiler.InstComponentDecl.getInstComponentDeclList_compute(Unknown Source)
    at org.jmodelica.modelica.compiler.InstComponentDecl.getInstComponentDeclList(Unknown Source)
    at org.jmodelica.modelica.compiler.InstComposite.getInstComponentDecls(Unknown Source)
    at org.jmodelica.modelica.compiler.InstNode.compareCompositeTypes(Unknown Source)
    at org.jmodelica.modelica.compiler.InstComposite.subType(Unknown Source)
    at org.jmodelica.modelica.compiler.InstNode.compareCompositeTypes(Unknown Source)
    at org.jmodelica.modelica.compiler.InstArrayComponentDecl.subType(Unknown Source)
    at org.jmodelica.modelica.compiler.InstNode.compareCompositeTypes(Unknown Source)
    at org.jmodelica.modelica.compiler.InstComposite.subType(Unknown Source)
    at org.jmodelica.modelica.compiler.InstNode.compareCompositeTypes(Unknown Source)
    at org.jmodelica.modelica.compiler.InstComposite.subType(Unknown Source)
    at org.jmodelica.modelica.compiler.InstNode.compareCompositeTypes(Unknown Source)
    at org.jmodelica.modelica.compiler.InstComposite.subType(Unknown Source)
    at org.jmodelica.modelica.compiler.InstNode.subType(Unknown Source)
    at org.jmodelica.modelica.compiler.InstComponentDecl.typeCheckReplacingComponent(Unknown Source)
    at org.jmodelica.modelica.compiler.InstReplacingComposite.typeCheck(Unknown Source)
    at org.jmodelica.modelica.compiler.ErrorChecker$TypeChecker.check(Unknown Source)
    at org.jmodelica.modelica.compiler.ASTNode.allChecks(Unknown Source)
    at org.jmodelica.modelica.compiler.InstNode.collectErrors(Unknown Source)
    at org.jmodelica.modelica.compiler.InstComponentDecl.collectErrors(Unknown Source)
    at org.jmodelica.modelica.compiler.InstNode.collectErrors(Unknown Source)
    at org.jmodelica.modelica.compiler.InstExtends.collectErrors(Unknown Source)
    at org.jmodelica.modelica.compiler.InstNode.collectErrors(Unknown Source)
    at org.jmodelica.modelica.compiler.InstComponentDecl.collectErrors(Unknown Source)
    at org.jmodelica.modelica.compiler.InstNode.collectErrors(Unknown Source)
    at org.jmodelica.modelica.compiler.InstBaseClassDecl.collectErrors(Unknown Source)
    at org.jmodelica.modelica.compiler.InstFullClassDecl.collectErrors(Unknown Source)
    at org.jmodelica.modelica.compiler.InstLibNode.collectErrors(Unknown Source)
    at org.jmodelica.modelica.compiler.ASTNode.errorCheck(Unknown Source)
    at org.jmodelica.modelica.compiler.InstClassDecl.checkErrorsInModelInstance(Unknown Source)
    at org.jmodelica.modelica.compiler.ModelicaCompiler.doInstantiateModel(Unknown Source)
    at org.jmodelica.modelica.compiler.ModelicaCompiler.instantiateModel(Unknown Source)
    at org.jmodelica.modelica.compiler.ModelicaCompiler.instantiateModel(Unknown Source)
    at org.jmodelica.modelica.compiler.ModelicaCompiler.doCompileModel(Unknown Source)
    at org.jmodelica.modelica.compiler.ModelicaCompiler.compileModel(Unknown Source)
    at org.jmodelica.modelica.compiler.ModelicaCompiler.doCompileUnit(Unknown Source)
    at org.jmodelica.modelica.compiler.ModelicaCompiler.compileUnit(Unknown Source)
    at org.jmodelica.modelica.compiler.ModelicaCompiler.compileUnit(Unknown Source)
    at org.jmodelica.modelica.compiler.ModelicaCompiler.compileModelFromCommandLine(Unknown Source)
    at org.jmodelica.modelica.compiler.ModelicaCompiler.main(Unknown Source)

【问题讨论】:

    标签: jmodelica


    【解决方案1】:

    JModelica.org 可以毫无问题地处理结构化库。您可以从日志的第一行看到它检测到您引用的文件在库中。该问题看起来是一个错误,该错误会触发在模型中某处的组件数组的修改中使用的某些表达式。我建议尝试最新版本(当前为 2.4)。

    我还建议使用库外部的工作目录,这样生成的文件就不会在库中结束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多