Сделайте ввод условным и используйте внутренний постоянный блок, если он не активен.
Ниже приведен минимальный пример (без графических аннотаций, чтобы сделать код более гладким):
block ConditionalInput
import Modelica.Blocks;
parameter Boolean useInput = false "true: use input connector for source signal. false: use 0";
Blocks.Interfaces.RealInput u if useInput "Variable input value";
// Output only needed for exemplary equation
Blocks.Interfaces.RealOutput y "Output value";
protected
Blocks.Interfaces.RealOutput val "Helper to access the actual value";
Blocks.Sources.Constant const(k=0) if not useInput;
equation
connect(const.y, y);
connect(u, y);
// Exemplary equation
y = val * 3;
end ConditionalInput;
Вы можете просто создать экземпляр этого блока, и он будет использовать 0 для val
. В тех случаях, когда вам нужен вход, активируйте его, установив useInput=true
.
Примечание. В этом примере используются условные компоненты. Стандарт Modelica разрешает их использование только в операторах соединения. Доступ к u
в регулярных уравнениях не разрешен, поэтому защищенный RealOutput val
включен.
Другими словами: запрещено писать
y = if useInput then u else 0;
, поэтому защищенный Constant
Блок источника, необходимы операторы RealOutput
и connect
.