2016-09-22 19 views
2

我有兴趣使用JModelica以及我在Dymola中构建的模型。锅炉的最佳控制:使用流体库w。 DynamicPipe组件使用JModelica

具体而言,我必须使用DynamicPipe组分的锅炉的模型,并且我然后只是将热传递到所述管预热它里面的水,并采用一个泵部件,以控制在整个的压力差锅炉。该模型编译得很好,以FMU使用JModelica和我能够模拟它没有任何问题。

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

我已经写了.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

+0

不太熟悉组件或'Optimica',但是您可以尝试通过轻松放松系统来使问题更容易线性化吗? – jrhodin

+0

嗯 - 我认为问题是在Modelica中使用了一些特殊的语言结构,Optimica/JModelica不喜欢 - 因此与系统构造的好坏没有多大关系。我在[JModelica论坛]上提出了同样的问题(http://www.jmodelica.org/27776)。但我会研究它:-) –

回答

0

因此,一个可以接受的答案是由Fredrik设在JModelica论坛: http://www.jmodelica.org/27776#comment-6468

简单地说:不支持的MSL媒体库。

我的解决方案是专门为我的用例建立了我自己的小型流体库 - 这在单相水的情况下是不费脑子的,它的工作原理非常完美。但我必须承认,如果能够使用MSL流体库,不会因为我自己的流体界面而陷入困境,那将会很不错。