Code: Select all
VAR
i : INT;
Tnv : INT;
Tstec : REAL;
x : ARRAY[0..39] OF INT := 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11,
-12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30, -31;
y : ARRAY[0..39] OF REAL := 75.0, 75.0, 75.0, 75.0, 75.0, 75.0, 75.0, 75.0, 75.0, 75.0, 75.0, 75.0, 76.6, 78.6, 80.7, 82.7, 84.8, 86.8, 88.8, 90.8,
92.9, 94.9, 96.9, 98.8, 100.8, 102.8, 104.8, 106.8, 108.7, 110.7, 112.6, 114.6, 116.5, 118.5, 120.4, 122.3, 124.2, 126.2, 128.1, 130.0;
z : ARRAY[0..39] OF REAL := 45.3, 47.1, 48.8, 50.5, 52.2, 53.9, 55.5, 57.2, 58.8, 60.4, 62.0, 63.6, 65.2, 66.7, 68.3, 69.8, 71.4, 72.9, 74.4, 76.0,
77.5, 79.0, 80.5, 82.0, 83.4, 84.9, 86.4, 87.8, 89.3, 90.8, 92.2, 93.6, 95.1, 96.5, 97.9, 99.4, 100.8, 102.2, 103.6, 105.0;
r : ARRAY[0..39] OF REAL := 42.6, 44.1, 45.7, 47.2, 48.6, 50.1, 51.6, 53.0, 54.5, 55.9, 57.3, 58.7, 60.1, 61.5, 62.8, 64.2, 65.5, 66.9, 68.2, 69.6,
70.9, 72.2, 73.5, 74.8, 76.1, 77.4, 78.7, 80.0, 81.3, 82.5, 83.8, 85.1, 86.3, 87.6, 88.8, 90.1, 91.3, 92.5, 93.8, 95.0;
END_VAR
// --- Block Parameters -----------------------
VAR_INPUT
in_Tnv : REAL;
in_Tstec : REAL;
END_VAR
VAR_IN_OUT
// I/O Parameters
END_VAR
VAR_OUTPUT
out_Tg_ot_nv_105_70 : REAL;
out_Tg_ot_nv_95_70 : REAL;
out_Tg_ot_stec_105_70 : REAL;
out_Tg_ot_stec_95_70 : REAL;
END_VAR
// --- END Block Parameters --------------------
BEGIN
//--- Производим округление Тнв до целого числа (в большую сторону 3.56 -> 4) и переводим в формат INT ---
Tnv := REAL_TO_INT(ROUND(in_Tnv));
Tstec := in_Tstec;
//----------------------------------------------------------------------------------------------------------
//--- По Т наружнего воздуха -------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------
//--- Если Тнв выше 8 градусов, то приравниваем ее к 8 градусам ---
IF Tnv > 8 THEN
Tnv := 8;
END_IF;
//--- Если Тнв ниже -31 градусов, то приравниваем ее к -31 градусу ---
IF Tnv < -31 THEN
Tnv := -31;
END_IF;
//--- Вычисляем температуру сетевой воды по графику 105/70 и по графику 95/70 ---
FOR i:=0 TO 39 BY 1 DO
IF Tnv = x[i] THEN
out_Tg_ot_nv_105_70:=z[i];
out_Tg_ot_nv_95_70:=r[i];
END_IF;
END_FOR;
//----------------------------------------------------------------------------------------------------------
//--- По Т приходящего теплоносителя от СТЭЦ ---------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------
//--- Если Т приходящего теплоносителя меньше или равна 75, то берем строчку при Тнв = -3
IF Tstec <= 75 THEN
out_Tg_ot_stec_105_70:=z[11];
out_Tg_ot_stec_95_70:=r[11];
ELSE
//--- Вычисляем температуру сетевой воды по графику 107/70 и по графику 95/70 ---
FOR i:=12 TO 39 BY 1 DO
IF (Tstec >= y[i]) AND (Tstec < y[i+1]) THEN
out_Tg_ot_stec_105_70:=z[i];
out_Tg_ot_stec_95_70:=r[i];
END_IF;
END_FOR;
END_IF;
//--- Если Т приходящего теплоносителя больше или равна 130, то берем строчку при Тнв = -31
IF Tstec >= y[39] THEN
out_Tg_ot_stec_105_70:=z[39];
out_Tg_ot_stec_95_70:=r[39];
END_IF;
END_FUNCTION_BLOCK