首页 文章

如何基于参数更新对象的可见性

提问于
浏览
2

连接至少有两个重要变量 . 流量变量和非流量变量(然后流式传输,但不要谈论那些) . 为清楚起见,我将引用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在使用时(即在图层上)将起作用?或者连接器GUI需要捕获由组件定义的流/非流元素以帮助模型使用(即,将port_a从描述设计入口改变为定义的流变量) .

使用Dymola 2017(在Dymola 2016上测试的结果相同)

Update:

了解使用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;

1 回答

  • 2

    Modelica语言规范在第18.6.6节中说明:“图形注释中的任何值(坐标,颜色,文本等)都可以使用DynamicSelect表达式依赖于类变量 . ”也就是说,仅当 showBalltrue 时,示例中的 visible=DynamicSelect(true, showBall) 才会显示椭圆 .

相关问题