#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-м примере действительно работает, поэтому я планирую использовать его сейчас.