Определение единицы в Modelica (OpenModelica) для параметров, не может быть найдено в объеме файла параметров

Я новичок в программировании Modelica (я использую OpenModelica и текстовый редактор в Ubuntu 1.8), и мне нужно определить некоторые единицы, одна из них 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;

Я не использовал / не импортировал какие-либо библиотеки, это стандартные единицы Международной системы, они только как бы "сцеплены" между собой, и чтение в Интернете, я нашел единственный способ определить что-то более конкретное, как в этом случае, было способ, которым я написал свой код выше (мой руководитель также одобрил способ, которым я определил свои единицы).

В чем может быть проблема в этом случае?

Пожалуйста, если можете, постарайтесь объяснить просто и конкретно.

Любая помощь и совет будут очень признательны.

Заранее спасибо.


person Dictatrix    schedule 27.10.2018    source источник


Ответы (1)


Кажется, все работает нормально, но вам нужно импортировать элементы def_units в запись параметров, или вам нужно определить их как parameter def_units.min_1 beta=0.002;. Я также предлагаю изменить def_units из модели в пакет. Дополнительные сведения об импорте Modelica и различных классах Modelica, таких как пакеты, записи, модели и блоки, см. В Спецификации Modelica на сайте modelica.org или в книге Modelica Book: 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;
"
""
person Adrian Pop    schedule 28.10.2018