簡體   English   中英

Modelica (OpenModelica) 中參數的單位定義,在參數文件的范圍內找不到

[英]Definition of unit in Modelica (OpenModelica) for parameters, cannot be found in scope of parameters file

我是 Modelica 編程的新手(我在 Ubuntu 1.8 上使用 OpenModelica 和文本編輯器),我必須定義一些單位,其中之一是 min^(-1),我寫了“ type min_1=Real (unit="min^(-1)"); " 在一個擴展名為 .mo 的模型文件中(在這個文件中我沒有方程,我只有單位定義),在另一個 Modelica 文件(一個記錄文件)中我有只有參數定義(無方程),例如參數 min_1 beta=0.002; ,但是當我運行整個模型時,我有一個錯誤只涉及(至少顯然,因為我沒有其他錯誤)這個特定的單元,因為它說 min_1 沒有找到只包含參數定義的文件的范圍(但是min_1 是這個文件,事實上,顯然,我定義的其他單位沒有同樣的問題),所以我無法理解真正的問題是什么,因為錯誤真的很模糊。 在我嘗試定義單位之前,所有參數都定義為 Real,並且模型繪制得非常完美,所以我很確定唯一可能的問題出在這 2 個文件中。 (當然,我整個模型的所有 Modelica 文件都位於同一文件夾中)。

要定義我在 .mo 文件(模型文件)中編寫的單位文件:

model def_units
type dlkg=Real(unit="dl/kg");
type mg_1=Real(unit="mg^(-1)");
type kg_1=Real(unit="1/kg");
type min_kg_pmol=Real(unit="min*kg/pmol");
type min_1=Real(unit="min^(-1)");
type mg_kg_min=Real(unit="mg/kg/min");
type mg_kg_min_pmol_l=Real(unit="mg/kg/min*pmol*l");
type mg_kg_min_pmol_kg=Real(unit="mg/kg/min*pmol*kg");
type mg_kg=Real(unit="mg/kg");
type pmol_kg_mg_dl=Real(unit="pmol/kg*(mg/dl)");
type pmol_kg_min_dl=Real(unit="pmol/kg*(min/dl)");
end def_units;

為了定義我的參數,我在一個單獨的 .mo 文件(一個記錄文件)中寫了這個:

record param
parameter min_1 alpha=0.001 ;
parameter min_1 beta=0.002;
parameter dl_kg gamma=0.003;
parameter mg_kg_min delta=0.004;
/* [... ] */
/* many other parameters defined in this way */
/* [... ] */
end param;

我沒有使用/導入任何圖書館,那些是國際體系的標准單位,它們只是在它們之間有點“連接”,在互聯網上閱讀我發現定義更具體的東西的唯一方法,比如在這種情況下,是我在上面編寫代碼的方式(我的主管也批准了我定義單位的方式)。

在這種情況下可能有什么問題?

如果可以,請盡量簡單具體地解釋一下。

任何幫助和建議將不勝感激。

提前致謝。

似乎工作正常,但您需要在參數記錄中導入 def_units 元素,或者您需要將它們定義為parameter def_units.min_1 beta=0.002; 我還建議將 def_units 從模型更改為包。 在 modelica.org 上的 Modelica Specification 或 Modelica Book: http ://book.xogeny.com/ 中閱讀有關 Modelica 導入和不同 Modelica 類(例如包、記錄、模型和塊)的更多信息。

文件 def_units.mo

model def_units
  type dl_kg=Real(unit="dl/kg");
  type mg_1=Real(unit="mg^(-1)");
  type kg_1=Real(unit="1/kg");
  type min_kg_pmol=Real(unit="min*kg/pmol");
  type min_1=Real(unit="min^(-1)");
  type mg_kg_min=Real(unit="mg/kg/min");
  type mg_kg_min_pmol_l=Real(unit="mg/kg/min*pmol*l");
  type mg_kg_min_pmol_kg=Real(unit="mg/kg/min*pmol*kg");
  type mg_kg=Real(unit="mg/kg");
  type pmol_kg_mg_dl=Real(unit="pmol/kg*(mg/dl)");
  type pmol_kg_min_dl=Real(unit="pmol/kg*(min/dl)");
end def_units;

文件參數.mo

record param
  import def_units.*; // you need to import all definitions from def_units!
  parameter min_1 alpha=0.001 ;
  parameter min_1 beta=0.002;
  parameter dl_kg gamma=0.003;
  parameter mg_kg_min delta=0.004;
  /* [... ] */
  /* many other parameters defined in this way */
  /* [... ] */
end param;

文件腳本 t.mos

loadFile("def_units.mo"); getErrorString();
loadFile("param.mo"); getErrorString();
instantiateModel(param); getErrorString();

使用 OpenModelica 編譯器 OMC 運行腳本:

adrpo33@ida-0030 MINGW64 /c/home/adrpo33/dev/OMTesting/bugs/units
$ ~/dev/OpenModelica/build/bin/omc t.mos
true
""
true
""
"class param
  parameter Real alpha(unit = \"min^(-1)\") = 0.001;
  parameter Real beta(unit = \"min^(-1)\") = 0.002;
  parameter Real gamma(unit = \"dl/kg\") = 0.003;
  parameter Real delta(unit = \"mg/kg/min\") = 0.004;
end param;
"
""

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM