2016-09-22 18 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流體庫,不會因爲我自己的流體界面而陷入困境,那將會很不錯。