我是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,并且模型绘制完美,因此,我很确定唯一可能的问题位于这两个文件中。 (自然地,整个模型的所有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;
我没有使用/导入任何库,它们是国际体系的标准单元,它们只是它们之间的“连接”,在Internet上阅读是我发现定义更具体内容的唯一方法,例如本例,是我上面编写代码的方式(我的主管也批准了我定义单位的方式)。
在这种情况下可能是什么问题?
如果可以的话,请尝试以简单而具体的方式进行解释。
任何帮助和建议将不胜感激。
谢谢。
答案 0 :(得分:1)
似乎工作正常,但是您需要在参数记录中导入def_units元素,或者需要将它们定义为parameter def_units.min_1 beta=0.002;
我还建议将def_units从模型更改为包。
在modelica.org或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;
"
""