Я недавно начал использовать Modelica (OpenModelica) в качестве инструмента моделирования, и я столкнулся с проблемой, касающейся использования внутренних / внешних функций.Я пытаюсь создать модель среды, содержащую значения температуры и давления окружающей среды, чтобы другие модели могли использовать эти значения.Я пытался сделать это с внутренними и внешними ключевыми словами, но продолжаю получать следующее предупреждение:
Не найдено соответствующего «внутреннего» объявления для компонента .Real component.T0 объявлен как «внешний».Существующие «внутренние» компоненты: .Real ambient.T0;определено в области: Test.Ambient.Проверьте, не ошиблись ли вы именем «внешнего» компонента.Пожалуйста, объявите «внутренний» компонент с тем же именем в верхней области видимости.Продолжая выравнивание, рассматривая только объявление 'external' component.
Ниже этих строк вы можете увидеть упрощение кода, который я пытаюсь выполнить.
Три модели под этими строками содержатся в пакете с именем Test.
Модель для окружающей среды, в которой температура T0 определяется как внутренняя:
within Test;
model Ambient
inner Real T0;
equation
T0 = 300;
end Ambient;
модель компонента, который пытается вызвать T0 через внешний оператор:
within Test;
model Component
Real T;
outer Real T0;
parameter Real k = 2;
equation
T = k * time + T0;
end Component;
Обе модели ambient и компонент перетаскиваются в объединенную модель:
within Test;
model System
Test.Ambient ambient annotation(
Placement(visible = true, transformation(origin = {-30, 30}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
Test.Component component annotation(
Placement(visible = true, transformation(origin = {30, -10}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
equation
end System;
При запуске System I я получаювышеупомянутое предупреждение.Кроме того, существует одна переменная больше, чем уравнения (что имеет смысл, поскольку она не может соединить Component.T0 с Ambient T0)