在参数文件的作用域中找不到Modelica(OpenModelica)中参数的单位定义



我是Modelica编程的新手(我在Ubuntu 1.8上使用OpenModelica和文本编辑器(,我必须定义一些单元,其中一个是min^(-1(,我在一个扩展名为.mo的模型文件中写了"type min_1=Real(unit="min^(-1(";",在另一个Modelica文件(记录文件(中,我只有参数定义(没有方程(,但当我运行整个模型时,我只对这个特定的单元有一个错误(至少很明显,因为我没有其他错误(,因为它说min_1没有找到只包含参数定义的文件的范围(但min_1存在就是这个文件,事实上,很明显,我对我定义的其他单元没有同样的问题(,所以我不明白这个错误的真正问题是什么,因为这个错误真的很模糊。在我尝试定义单位之前,所有参数都被定义为Real,模型绘制得很完美,所以我很确定唯一可能的问题位于这两个文件中。(当然,我整个Model的所有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;

我没有使用/导入任何库,这些库是国际体系的标准单位,它们只是在它们之间"连接"在一起,在互联网上阅读,我发现定义更具体的东西的唯一方法,比如在本例中,是我在上面写代码的方式(我的主管也批准了我定义单位的方式(。

在这种情况下会出现什么问题?

如果可以的话,请试着用一种简单而具体的方式来解释。

如有任何帮助和建议,我们将不胜感激。

提前谢谢。

看起来工作正常,但您需要在param记录中导入def_units元素,或者需要将它们定义为parameter def_units.min_1 beta=0.002;我还建议将def_units从模型更改为包。在Modelica.org或Modelica Book上的Modelica规范中阅读有关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;

文件参数.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;
"
""

最新更新