Пример функционального блока (язык SCL) в Step7, для выбора уставки регулятору системы отопления по графику 105/70 (у нас кое-где применяется) и 95/70.
Несложный функциональный блок обрабатывает входящую текущую температуру наружного воздуха и температуру приходящего теплоносителя (REAL). Т.е. можно использовать либо по температуре наружного воздуха, либо, если неисправен или отсутствует датчик Тнв, то определять уставку по температуре приходящего теплоносителя. Верней, результат выводится по обоим управляющим величинам (REAL).
В архиве сам FB с исходником и, в качестве примера, скан температурного графика, по которому сконфигурирован FB.
Test_tgr.zip
[RUS] Пример FB по выбору уставки для отопления по графику
-
- Posts: 501
- Joined: Tue Jun 27, 2006 5:52 am
- Location: Russia
-
- Posts: 13
- Joined: Wed Aug 18, 2010 6:03 am
Re: [RUS] Пример FB по выбору уставки для отопления по графи
закончился срок хранения файлова
-
- Posts: 501
- Joined: Tue Jun 27, 2006 5:52 am
- Location: Russia
Re: [RUS] Пример FB по выбору уставки для отопления по графи
95/70
Срезка по -3, это мой регион. По своему региону - советоваться надо с заказчиком
Срезка по -3, это мой регион. По своему региону - советоваться надо с заказчиком
Function Block
Show
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