0
HVAC 시스템의 결함 포함 모델을 구현하려고합니다. 오류는 사용자 정의 시간 (이 경우 faultTime = 1000
)에서 시작됩니다. 그러나 if 문의 첫 번째 부분은 전혀 구현되지 않습니다. 다음은 질문Modelica에서 중첩 된 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;
내가 시뮬레이션에 관련 코드의 조각이되어 다음, 오류없이 실행하지만 그것은 바로 처음 1000에 대한 오류가없는 상태를 시뮬레이션하지 않고, faultMode == 1
아래의 식에 간다 초.
보인다. – tbeu
faultMode는 정수형 매개 변수이기 때문에 else-case는 필요하지 않지만 "faultMode == 1 then then ... else"가 더 깨끗한 경우 동의합니다. –
Modelica 3.4 사양의 8.3.4 절 : 스위칭 조건으로 배타적 매개 변수식이없는 방정식 섹션의 If 방정식은 각 분기에서 같은 방정식 수를 가져야합니다. – matth