Проблема С Расширяемым Соединителем Массива

#modelica #dymola

Вопрос:

Я пытаюсь использовать разъем с возможностью расширения массива следующим образом:

 model MWE
  expandable connector ControlBus
    extends Modelica.Icons.SignalBus;
  end ControlBus;
  ControlBus controlBus[1];
  Modelica.Blocks.Math.Gain gain(k=1);
equation 
  connect(gain.u, controlBus[1].a);
end MWE;
 

…однако Dymola выдает ошибку о том, что элемент » а » не найден в расширении записи.

Странно, но если я объявлю целочисленный параметр после объявления шины управления (не раньше!) и использую его для указания размера шины управления, он будет работать так, как ожидалось, без ошибок:

 model MWE
  expandable connector ControlBus
    extends Modelica.Icons.SignalBus;
  end ControlBus;
  ControlBus controlBus[k];
  Modelica.Blocks.Math.Gain gain(k=1);
  parameter Integer k=1;
equation 
  connect(gain.u, controlBus[1].a);
end MWE;
 

Мой главный вопрос заключается в том, разрешено ли в Modelica иметь разъем с возможностью расширения массива? Если да, то какие-либо проблемы с моим первым подходом или у Dymola есть какая-то ошибка (которая, по-видимому, устранена с помощью обходного пути во втором подходе)?

ИЗМЕНИТЬ: добавление другого связанного примера, в котором порядок объявления, по-видимому, влияет на расширяемые соединители:

 model MWE
  expandable connector ControlBus
    Real variable;
  end ControlBus;
  ControlBus controlBus;
  Modelica.Blocks.Sources.RealExpression realExpression(y=controlBus.variable);
end MWE;
 

Здесь Дымола дает предупреждение о проверке, но будет компилироваться. Однако, если бы я объявил controlBus после реального выражения, он бы не жаловался.

Комментарии:

1. Я попробовал это в OpenModelica (работает, без предупреждений). Еще одно интересное сообщение , которое дал мне Даймола, когда я пытался, было Connected variables must have subscripts that can be expanded into literals. , но 1 является буквальным.

2. @sjoelund. se спасибо, что проверили это

Ответ №1:

В Modelica нет ничего, что делало бы этот пример незаконным; a является необъявленным членом компонента расширяемого соединителя controlBus[1] . https://specification.modelica.org/maint/3.5/connectors-and-connections.html#expandable-connectors

Похоже, что Dymola нуждается в улучшении, чтобы справиться с этим делом, и при условии, что не произойдет ничего странного, что будет сделано в следующем очередном выпуске.

Комментарии:

1. Спасибо за комментарий здесь. Тем временем, обходной подход в моем 2-м примере действительно работает, поэтому я планирую использовать его сейчас.