首页 文章

锅炉的最佳控制:使用Fluid Library w . 使用JModelica的DynamicPipe组件

提问于
浏览
2

我有兴趣将 JModelica 与我在 Dymola 中构建的模型一起使用 .

具体来说,我有一个使用 DynamicPipe 组件的锅炉模型,然后我只是将热量传递到管道以加热其中的水,并使用泵组件来控制整个锅炉的压力差 . 该模型使用 JModelica 编译好 FMU 并且我能够毫无问题地模拟它 .

但是,我现在不想找到一个最佳的控制序列来使锅炉进入某个工作点,这里停止工作 .

我写了一个带有优化问题的.mop文件,但是当我调用 transfer_optimization_problem 时,我收到以下错误:

Warning: Ignored enumeration typed variable:
eval parameter Modelica.Fluid.Types.ModelStructure boiler.boilerFMU.boiler.pipe.modelStructure = Modelica.Fluid.Types.ModelStructure.av_b "Determines whether flow or volume models are present at the ports" /* Modelica.Fluid.Types.ModelStructure.av_b */
Java error occurred:
Exception in thread "main" java.lang.UnsupportedOperationException: Cannot convert expression to MX: size(A, 1)
at org.jmodelica.optimica.compiler.FExp.toMX(FExp.java:4516)
at org.jmodelica.optimica.compiler.FMaxExp.toMX(FMaxExp.java:560)
at org.jmodelica.optimica.compiler.FExp.toMXVector(FExp.java:4497)
at org.jmodelica.optimica.compiler.FAssignStmt.updateExpressionsAccordingToStatement(FAssignStmt.java:385)
at org.jmodelica.optimica.compiler.FFunctionDecl.generateFinalExpressionVector(FFunctionDecl.java:1365)
at org.jmodelica.optimica.compiler.FFunctionDecl.toMXFunction_compute(FFunctionDecl.java:2878)
at org.jmodelica.optimica.compiler.FFunctionDecl.toMXFunction(FFunctionDecl.java:2865)
at org.jmodelica.optimica.compiler.FFunctionCall.toMXVector(FFunctionCall.java:1578)
at org.jmodelica.optimica.compiler.FFunctionCallStmt.updateExpressionsAccordingToStatement(FFunctionCallStmt.java:391)
at org.jmodelica.optimica.compiler.FFunctionDecl.generateFinalExpressionVector(FFunctionDecl.java:1365)
at org.jmodelica.optimica.compiler.FFunctionDecl.toMXFunction_compute(FFunctionDecl.java:2878)
at org.jmodelica.optimica.compiler.FFunctionDecl.toMXFunction(FFunctionDecl.java:2865)
at org.jmodelica.optimica.compiler.FFunctionCall.toMXVector(FFunctionCall.java:1578)
at org.jmodelica.optimica.compiler.FFunctionCallStmt.updateExpressionsAccordingToStatement(FFunctionCallStmt.java:391)
at org.jmodelica.optimica.compiler.FFunctionDecl.generateFinalExpressionVector(FFunctionDecl.java:1365)
at org.jmodelica.optimica.compiler.FFunctionDecl.toMXFunction_compute(FFunctionDecl.java:2878)
at org.jmodelica.optimica.compiler.FFunctionDecl.toMXFunction(FFunctionDecl.java:2865)
at org.jmodelica.optimica.compiler.FFunctionCall.toMXVector(FFunctionCall.java:1578)
at org.jmodelica.optimica.compiler.FFunctionCall.toMX(FFunctionCall.java:1562)
at org.jmodelica.optimica.compiler.FDotSubExp.toMX(FDotSubExp.java:544)
at org.jmodelica.optimica.compiler.FVariable.parameterEquationToMXBindingExpression(FVariable.java:3807)
at org.jmodelica.optimica.compiler.FVariable.findMXBindingExpressionIfPresent(FVariable.java:3770)
Traceback (most recent call last):
File "boiler_opt.py", line 89, in <module>
op = transfer_optimization_problem("BoilerOptimization.Opt", paths, compiler_log_level='error')
File "/opt/jmodelica/Python/pyjmi/casadi_interface.py", line 171, in transfer_optimization_problem
accept_model=accept_model)
File "/opt/jmodelica/Python/modelicacasadi_transfer/modelica_casadi_transfer_wrapper.py", line 156, in transfer_optimization_problem
_get_options(compiler_options), compiler_log_level)
File "/opt/jmodelica/Python/modelicacasadi_transfer/modelica_casadi_transfer_wrapper.py", line 179, in _transfer_optimica
return modelicacasadi_wrapper._transferOptimizationProblem(ocp, class_name, files, options, log_level)
File "/opt/jmodelica/Python/modelicacasadi_wrapper/modelicacasadi_wrapper.py", line 3417, in _transferOptimizationProblem
return _modelicacasadi_wrapper._transferOptimizationProblem(*args)
RuntimeError: a java error occurred; details were printed

显然,对于指定模型结构的 DynamicPipe 模型中的枚举类型,它并不高兴 .

为了检查确实是我的模型是问题,我将其线性化并在优化问题中使用了线性化版本;这很完美 .

有关如何处理这个的任何想法? :-)

问候,

乔金 -

UPDATE: 我在JModelica论坛上问了同样的问题,回复如下 . 但是,我还没有找到解决错误的解决方案:http://www.jmodelica.org/27776#comment-6467

1 回答

  • 0

    所以Fredrik在JModelica论坛上提供了一个可接受的答案:http://www.jmodelica.org/27776#comment-6468

    简单地说: The MSL Media Library is not supported.

    我的解决方案是专门为我的用例构建我自己的小流体库 - 在单相水的情况下这是一个明智的选择,并且它完美地工作 . 但我必须承认,能够使用MSL流体库是不错的,不能用自己的流体接口锁定自己 .

相关问题