Я пытаюсь реализовать модель системы отопления, вентиляции и кондиционирования воздуха с учетом ошибок. Ошибка начинается в определенное пользователем время, в данном случае faultTime = 1000
. Однако первая часть оператора if вообще не реализована. Ниже приведен фрагмент кода, имеющего отношение к вопросу.
fcuModel FCU;
Modelica.Blocks.Continuous.LimPID PI(k = 300, Ti = 1, yMax = 1, yMin = 1e-4);
parameter Real faultTime = 1000;
// fault modes: 0-normal, 1-fan failed, 2-valve stuck shut...
parameter Integer faultMode = 1;
equation
connect(PI.u_m,FCU.Ts_zon); // connects zone temperature to PID measurement
PI.u_s = 21; // set-point for zone temperature
if time<faultTime then
PI.y = FCU.val;
PI.y = FCU.fs;
else
if faultMode == 0 then
PI.y = FCU.val;
PI.y = FCU.fs;
elseif faultMode == 1 then
PI.y = FCU.val;
FCU.fs = 1e-4;
end if;
end if;
Когда я имитирую, он работает без ошибок, но он напрямую переходит к уравнениям в faultMode == 1
, без моделирования безотказного состояния в течение первых 1000 секунд.