在 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),并且我在扩展名为 .mo 的模型文件中写了“ type min_1=Real(unit="min^(-1)"); ”(在这个文件中我没有方程,我只有单位定义),并且在另一个 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;
我没有 use/import 任何库,那些是国际系统的标准单位,它们之间只有一点点 "concatenated",在互联网上阅读是我发现定义更多东西的唯一方法具体的,就像在这种情况下,是我在上面编写代码的方式(我的主管也批准了我定义单位的方式)。
在这种情况下可能是什么问题?
如果可以的话,请尽量简单具体的解释一下。
任何帮助和建议将不胜感激。
提前致谢。
似乎工作正常,但您需要在参数记录中导入 def_units 个元素,或者您需要将它们定义为 parameter def_units.min_1 beta=0.002;
我还建议将 def_units 从模型更改为包。
在 modelica.org 上的 Modelica 规范或 Modelica 书籍: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;
文件param.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;
"
""
我是 Modelica 编程的新手(我在 Ubuntu 1.8 上使用 OpenModelica 和文本编辑器),我必须定义一些单位,其中之一是 min^(-1),并且我在扩展名为 .mo 的模型文件中写了“ type min_1=Real(unit="min^(-1)"); ”(在这个文件中我没有方程,我只有单位定义),并且在另一个 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;
我没有 use/import 任何库,那些是国际系统的标准单位,它们之间只有一点点 "concatenated",在互联网上阅读是我发现定义更多东西的唯一方法具体的,就像在这种情况下,是我在上面编写代码的方式(我的主管也批准了我定义单位的方式)。
在这种情况下可能是什么问题?
如果可以的话,请尽量简单具体的解释一下。
任何帮助和建议将不胜感激。
提前致谢。
似乎工作正常,但您需要在参数记录中导入 def_units 个元素,或者您需要将它们定义为 parameter def_units.min_1 beta=0.002;
我还建议将 def_units 从模型更改为包。
在 modelica.org 上的 Modelica 规范或 Modelica 书籍:http://book.xogeny.com/.
文件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;
文件param.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;
"
""