Ich habe eine parameter
, die immer aus anderen Parametern berechnet wird, und muss public
sein, so dass es von anderen Komponentenmodellen in meinem Projekt verwendet werden kann. Grundsätzlich ist es ein globalparameter
in einem Objekt sehr ähnlich dem Objekt TIL.SystemInformationManager
.Ausblenden (Unterdrücken) Globale öffentliche Parameter-Dialogfeld (Modelica Dymola)
Da es berechnet wird, ist es sinnlos, es in einem Dialogfeld anzuzeigen; und die Verwendung von annotation(dialog(enable=false))
kann zu Verwirrung und Frustration führen, weil der Benutzer es immer aus keinem guten Grund deaktiviert sieht.
Weil es public
sein muss, kann ich das Schlüsselwort protected
nicht verwenden.
Es kann nicht final
sein, weil es vom Modell eingestellt wird, das es verwendet.
Zuletzt muss es eine parameter
sein, und keine Variable, weil ich es verwende, um ein Array zu dimensionieren.
Hier ist das Modell. Die Idee ist, dass in sim2
Sie den Anschlusstyp ct
gesetzt, die dann n
des Arrays der Größe berechnet myArray
, die in allen Verbinderkomponenten verwendet:
package VerySimpleSIM
model Sim2
parameter Integer ct = 0 "Connector type";
final parameter Integer n = if (ct > 0) then 2 else 0;
end Sim2;
connector MyConnector "Connector with array size set by global parameter n"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//This parameter is always set by the component using the connector,
//so I don't want to show it in any dialog box.
parameter Integer n;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Real myArray[n];
end MyConnector;
model Creator
protected
outer Sim2 sim2 "System information manager";
public
MyConnector cnctrB(final n=sim2.n) annotation (Placement(transformation(extent={{80,-10},{100,10}})));
equation
//Create arbitrary values for testing: time + 0.1 * {1,2,...,n}
cnctrB.myArray = {time + 0.1 * i for i in 1:sim2.n};
end Creator;
model Changer
protected
outer Sim2 sim2 "System information manager";
public
MyConnector cnctrA(final n=sim2.n) annotation (Placement(transformation(extent={{-100,-10},{-80,10}})));
MyConnector cnctrB(final n=sim2.n) annotation (Placement(transformation(extent={{80,-10},{100,10}})));
equation
//Output = sin(2 * pi * input)
cnctrB.myArray = Modelica.Math.sin(2 * Modelica.Constants.pi .* cnctrA.myArray);
end Changer;
model TestSim2
inner Sim2 sim2(ct=1) annotation (Placement(transformation(extent={{20,20},{40,40}})));
Changer changer annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
Creator creator annotation (Placement(transformation(extent={{-40,-10},{-20,10}})));
equation
connect(creator.cnctrB, changer.cnctrA) annotation (Line(points={{-21,0},{-9,0}}));
annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram(coordinateSystem(preserveAspectRatio=false)));
end TestSim2;
end VerySimpleSIM;
Nach der Modelica-Spezifikation 'connectorSizing' hat nichts mit dem Versteck der Ergebnisse zu tun. Nur um klar zu sein, 'connectorSizing' kann nur für' Integer' Typen verwendet werden. Selbst wenn dies in einigen nicht standardmäßigen folgenden Tools verwendet werden könnte, würde es im Allgemeinen nicht funktionieren. Auch ein kleiner Tippfehler, die Anmerkung ist 'Dialog' (Modelica ist case sensitive). –
@Dietmar 1. In der Tat, meine Frage "hat nichts mit dem Verstecken von Ergebnissen zu tun". Sehen Sie sich die Frage noch einmal an. 2. Hast du das in Dymola probiert? Ich habe gerade alle acht Kombinationen von 'Integer' /' Real' 'Dialog' /' dialog' und 'true' /' false' getestet. Das einzige, was Dymola in Bezug auf die Anzeige des 'Parameters' in der Dialogbox ** interessierte, war 'wahr'/'falsch'. Ich habe Dymola Version 2016 FD01 (32-Bit), 2015-10.13. Welche Version verwendest du? Wenn das alles stimmt und du mich abgelehnt hast, würdest du darüber nachdenken, es zu entfernen? –