簡體   English   中英

替換 Modelica 中已棄用的 function 基數(c)

[英]Replacement of deprecated function cardinality(c) in Modelica

文檔中指出, cardinality() function 已被棄用,不應再使用。 但是,它仍然在 ThermoSysPro 等庫中使用。

例如

if (cardinality(C) == 0) then
 some code
end if;

其中CFluidInletFluidOutlet

誰能舉一個簡單的例子來說明如何替換它?

通常的解決方案是使連接器有條件,如果啟用,您需要連接它。

對於物理連接器,您可以查看如何處理熱端口和支持: Modelica.Electrical.Analog.Interfaces.ConditionalHeatPort Modelica.Mechanics.Rotational.Interfaces.PartialElementaryOneFlangeAndSupport2

對於控制信號,您可以查看如何在Modelica.Fluid.Sources.Boundary_pT Modelica.Fluid.Sources.Boundary_ph中處理p_inh_in

然而,ThermoSysPro 的連接器不屬於這兩個類別,理想情況下也應該清理干凈。

我知道的唯一可以在這方面使用的是connectorSizing注釋。 它在MLS第 18.7 章中進行了描述。

它在 Modelica 標准庫中被多次使用,例如在Modelica.Blocks.Math.MinMax中通過參數nu使用。 使用時,該工具會根據與它的連接數自動設置nu的修飾符。

  parameter Integer nu(min=0) = 0 "Number of input connections"
    annotation (Dialog(connectorSizing=true));
  Modelica.Blocks.Interfaces.RealVectorInput u[nu];

在下面的示例中,在圖形層中創建連接時,Dymola 會自動生成nu=2 我已經刪除了圖形注釋,以使代碼更具可讀性。

model ExCS
  Modelica.Blocks.Math.MinMax minMax(nu=2);
  Modelica.Blocks.Sources.Sine sine(freqHz=6.28);
  Modelica.Blocks.Sources.Constant const(k=0.5);

equation 
  connect(sine.y, minMax.u[1]);
  connect(const.y, minMax.u[2]);
end ExCS;

cardinality()運算符用於Modelica.Fluid.Sources.BaseClasses.PartialSource ,並以類似的方式用於其他流體庫( IBSPAAixLibBuildingsBuildingSystemsIDEAS ),形式為

  // Only one connection allowed to a port to avoid unwanted ideal mixing
  for i in 1:nPorts loop
    assert(cardinality(ports[i]) <= 1,"
      each ports[i] of boundary shall at most be connected to one component.
      If two or more connections are present, ideal mixing takes
      place with these connections, which is usually not the intention
      of the modeller. Increase nPorts to add an additional port.
     ");
   end for;

我偶爾會收到一些用戶的模型,這些用戶以某種方式最終連接到多個ports[i] 這是如何發生的還不清楚,但我發現使用cardinality()有助於捕捉這種情況,否則可能會導致用戶無意且難以檢測到的流體端口中的混合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM