Я хотел бы иметь пакет, который выходит из другого базового пакета.Базовый пакет содержит тип вектора и константы с именем для каждого номера индекса вектора.Он также содержит векторную константу, которая присваивает каждому элементу значение (описывающее некоторое свойство элемента).В расширенном пакете я хотел бы добавить один элемент векторного типа и добавить одно новое имя для нового индекса, а также добавить к векторной константе один элемент с определенным значением (описывающим некоторое свойство вещества).
Используя технику с replaceable - extend - redeclare, очень просто расширить векторный тип с помощью элемента, а также добавить в пакет новое целое число константы для добавленного элемента.Но я не уверен, как добавить вектор константы с новым элементом.
Приведенный ниже код работает в JModelica (2.4), но включает в себя как повторную декларацию, так и копирование значений из исходного базового пакета.Однако в Medium3 JModelica не принимает четвертое выражение redeclare для вектора константы mw.Но если я вместо этого сделаю оператор redeclare в качестве первой строки после расширения, это сработает (см. Раздел Fritzson 4.3.1).Однако переопределение должно быть подтипом оригинала, а Real3] не является подтипом Real [2], но компилятор, похоже, все равно справляется.
Когда я пробую тот же код в OpenModelica (1.13), я получаюсообщение об ошибке из-за того, что я повторно объявил константу, и ошибка уже при первом объявлении в Medium3.Я не уверен, что это правильное сообщение об ошибке, и оно не отображается в JModelica.
В противном случае OpenModelica (и JModelica) принимают оба Medium2 без каких-либо предупреждений или ошибок.И эти тесты, просто меняя среду, используемую в LiquidCon.
Мой главный вопрос: есть ли более прямое решение для расширения пакета носителя с одним веществом, как описано выше, чем мой код, и чтоявляется более стандартным (и, конечно, работает с JModelica, OpenModelica и Modelica в целом).
Конечно, интересно разобраться, что здесь говорится в стандарте Modelica, и тогда мы сможем донести эту информацию до организаций, стоящих за JModelica и OpenModelica, в виде отчетов об ошибках.
Буду признателен за ваш вклад/ Ян Петр
Ниже выписка из пакета DEMO_v8
package Medium2
replaceable constant String name = "Two components" "Medium name";
replaceable constant Integer nc = 2 "Number of substances";
replaceable type Concentration = Real[nc] "Substance conc";
replaceable constant Real[nc] mw = {10, 20} "Substance weight";
constant Integer A = 1 "Substance index";
constant Integer B = 2 "Substance index";
end Medium2;
package Medium3
import M2 = DEMO_v8.Medium2;
extends M2
(redeclare constant String name="Three components" "Medium name",
redeclare constant Integer nc=3 "Number of substances",
redeclare type Concentration = Real[nc] "Substance conc");
redeclare constant Real[nc] mw = cat(1,M2.mw,{30}) "Substance weight";
constant Integer C = 3 "Substance index";
end Medium3;
connector LiquidCon
replaceable package medium=DEMO_v8.Medium3;
medium.Concentration c "Substance conc";
flow Real F (unit="m3/s") "Flow rate";
end LiquidCon;