значение по умолчанию для неподключенного RealInput - PullRequest
2 голосов
/ 08 апреля 2020

У меня есть модель Modelica с разъемом RealInput. Обычно к этому входу подключается постоянный блок источника со значением 0, но иногда (не часто) используются разные значения или изменяющиеся во времени сигналы.

Есть ли возможность / решение для не подключать постоянный блок источника и изменить модель на значение по умолчанию , если нет поступающего сигнала (то есть RealInput не подключен снаружи)? В настоящее время я получаю предупреждение о том, что модель не сбалансирована, если RealInput не подключен извне.

Я ищу аналогичное решение, такое как функции Modelica, где для входов или параметров можно определить значение по умолчанию , которое может иметь значение по умолчанию, если ничего не указано.

1 Ответ

3 голосов
/ 08 апреля 2020

Сделайте ввод условным и используйте внутренний постоянный блок, если он не активен.

Ниже приведен минимальный пример (без графических аннотаций, чтобы сделать код более гладким):

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...