Определение модуля в Modelica (OpenModelica) для параметров не может быть найдено в области файла параметров - PullRequest
0 голосов
/ 27 октября 2018

Я новичок в программировании Modelica (я использую OpenModelica и текстовый редактор в Ubuntu 1.8), и мне нужно определить некоторые единицы, одним из них является min ^ (- 1), и я сделал это, написав "тип min_1 = Real (unit = "min ^ (- 1)"); "в файле модели с расширением .mo (в этом файле у меня нет уравнений, у меня есть только определения единиц измерения) и в другом файле Modelica (файл записи ) У меня есть только определения параметров (без уравнений), например параметр min_1 бета = 0,002; , но когда я запускаю всю модель, у меня появляется ошибка, касающаяся только (по крайней мере, очевидно, потому что у меня нет других ошибок) этого конкретного модуля, потому что он говорит, что min_1 не найдена область файла, которая содержит только определения параметров (но min_1 присутствует в этом файле, на самом деле, по-видимому, у меня нет такой же проблемы с другими единицами, которые я определил), поэтому я не могу понять, в чем реальная проблема с этим, потому что ошибка действительно расплывчатая. До того, как я попытался определить единицы измерения, все параметры были определены как реальные, и модель построена идеально, поэтому я почти уверен, что единственная возможная проблема находится в этих двух файлах. (Естественно, все файлы 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;

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

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

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

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

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

1 Ответ

0 голосов
/ 28 октября 2018

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