拉伸组件,而不是连接器

Stretch component, not connector

有时当组件被拉伸时,我们不希望连接器被拉伸,因为它看起来很难看。例如,参见下面 Modelica.Blocks.Sources.RealExpression 的实例

是否可以在模型中实例化连接器(或其他组件)时添加图形注释来避免这种情况?

目前我看不出有任何方法可以完全按照您的要求进行操作。

请注意,使用

可以防止整个 realExpression 的拉伸
annotation (Icon(coordinateSystem(preserveAspectRatio=true),...),
  Diagram(coordinateSystem(preserveAspectRatio=true),...),

但是,未指定在 RealExpression 的连接器中使用它应防止连接器拉伸 - 但仍允许组件拉伸。

我不知道允许使用现有 RealExpression 块的解决方案。作为解决方法,您可以创建此块的新版本 - 通过扩展它或复制它。

选项 1:扩展 RealExpression 并设置固定大小

您可以创建一个新的、更广泛的真实表达式,扩展原始真实表达式,隐藏原始图标并绘制一个新图标。

缺点:每个尺码需要一个型号,但如果经常使用一个尺码应该没问题。

model RealExpression_600x200
  extends Modelica.Blocks.Sources.RealExpression annotation (
      IconMap(extent={{100,-100},{300,100}}, primitivesVisible=false),
      DiagramMap(extent={{100,-100},{300,100}}, primitivesVisible=false));

equation 

  annotation (
    Diagram(coordinateSystem(extent={{-300,-100},{300,100}})),
    Icon(coordinateSystem(extent={{-300,-100},{300,100}}), graphics={
        Rectangle(
          extent={{-300,40},{300,-40}},
          lineColor={0,0,0},
          lineThickness=5.0,
          fillColor={235,235,235},
          fillPattern=FillPattern.Solid,
          borderPattern=BorderPattern.Raised),
        Text(
          extent={{-300,100},{300,60}},
          textString="%name",
          lineColor={0,0,255}),
        Text(
          extent={{-296,15},{296,-15}},
          lineColor={0,0,0},
          textString="%y")}),
    uses(Modelica(version="3.2.2")));
end RealExpression_600x200;

选项 2:复制 RealExpression 并通过参数设置大小

您也可以复制 RealExpression 并引入一个控制图形注释的参数。可以添加常用尺寸作为选择。您不应该重新缩放组件,而是 select 参数 width 的大小。

block RealExpression "Real expression with varying size, set via parameter"
  parameter Integer width = 10 
    annotation(choices(choice=20 "Regular", 
                       choice=40 "Wide", 
                       choice=80 "Wiiiiiiide"));

  Modelica.Blocks.Interfaces.RealOutput y=0.0 "Value of Real output"
    annotation (
      Dialog(group="Time varying output signal"), 
      Placement(transformation(extent={{10*width/2,-10},{10*width/2+20,10}})));

  annotation (
    Icon(
      coordinateSystem(
        preserveAspectRatio=true, 
        extent={{-100,-100},{100,100}}), 
      graphics={
        Rectangle(
          extent={{-10*width/2,40},{10*width/2,-40}},
          lineColor={0,0,0},
          lineThickness=5.0,
          fillColor={235,235,235},
          fillPattern=FillPattern.Solid,
          borderPattern=BorderPattern.Raised),
        Text(
          extent={{-10*width/2+4,15},{10*width/2-4,-15}},
          lineColor={0,0,0},
          textString="%y"),
        Text(
          extent={{-10*width/2,90},{10*width/2,50}},
          textString="%name",
          lineColor={0,0,255})}),
    uses(Modelica(version="3.2.2")));
end RealExpression;