Связи имеют как минимум две важные переменные. Переменная потока и переменная непотока (а затем потоки, но не будем об этом говорить). Для ясности я буду ссылаться на коннектор Fluid и его переменные m_flow (переменная потока) и p (не переменная потока).
При создании компонентов здания важно указать, устанавливает ли этот компонент значение для m_flow или p. Например, вы не хотите соединять две составляющие потери давления (устанавливает m_flow) вместе.
Соединители жидкости в MSL определены как port_a (проектный вход) и port_b (проектный выход). Чтобы указать, устанавливает ли порт m_flow или нет, DynamicPipe выбирает использование компонента PartialTwoPort, который имеет объект (черный эллипс) в слое значков, который переключает его видимость на основе параметра (port_a_exposesState), который может быть изменен при расширении PartialTwoPort (т. Е. , PartialTwoPortFlow).
Однако эта функция не работает. Параметр не изменит свое отображение при изменении параметра (т.е. черный эллипс на DynamicPipe никогда не исчезает).
Ниже приведен простой пример, демонстрирующий концепцию. При моделировании модели RunMe параметр showBall = false, потому что число ‹> 1. Однако мяч все еще виден.
Частичная модель, устанавливающая объект, который должен появиться / исчезнуть:
partial model ballIcon
// input Boolean showBall; // Tried this as well to no avail.
protected
parameter Boolean showBall = true;
annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={
Ellipse(
extent={{-40,40},{40,-40}},
lineColor={0,0,0},
fillPattern=FillPattern.HorizontalCylinder,
fillColor={255,255,0},
visible=showBall)}),
Diagram(coordinateSystem(
preserveAspectRatio=false)));
end ballIcon;
Расширяющаяся модель:
model extendsBallIcon
extends ballIcon(showBall=(number==1));
parameter Real number = 1;
end extendsBallIcon;
Модель, которая должна показывать шар, который появляется или исчезает в зависимости от "числа":
model RunMe
extendsBallIcon Ball(number=3)
annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
end RunMe;
Есть ли что-то, что можно исправить в этом подходе, чтобы графический интерфейс компонента при использовании (то есть на уровне диаграммы) работал? Или же GUI соединителей должен захватывать элемент потока / непотока, который определяется компонентом, чтобы помочь в использовании модели (т. Е. Изменить port_a с входного отверстия проекта описания на определенную переменную потока).
Использование Dymola 2017 (протестировано с такими же результатами на Dymola 2016)
Обновление:
Знание того, что простой случай работает с DynamicSelect, приводит меня к реальному приложению. Следующее изменение приводит к тому, что значок не переключает свою видимость.
В extendsBallIcon заменяем:
extends ballIcon(showBall=(number==1));
parameter Real number = 1;
с участием
// Boolean Example
extends ballIcon(showBall=(number==true));
final parameter Boolean number = (modelStructure==Modelica.Fluid.Types.ModelStructure.av_b);
parameter Modelica.Fluid.Types.ModelStructure modelStructure = Modelica.Fluid.Types.ModelStructure.av_b;