Post #73
142
Forwarded from Девки любят инженеров (Крен по колено)
This post (sticker, poll or similar) has no web preview. Open in Telegram
- 🔥 1
КО Forwarded from Девки любят инженеров (Крен по колено)
This post (sticker, poll or similar) has no web preview. Open in Telegram
This post (sticker, poll or similar) has no web preview. Open in Telegram
This post (sticker, poll or similar) has no web preview. Open in Telegram

FUNCTION_BLOCK FB_POWER_CONTROL
VAR_INPUT
rSpFreqMin :REAL; // Частота, от которой начинаем контролировать мощность
rSpPow1, rSpPow2 :REAL; // Уставки мощности для точек 1 и 2
rSpFreq1, rSpFreq2 :REAL; // Уставки частоты для точек 1 и 2
rSpPerWarn,rSpPerAlr :REAL; // Пороги отклонения мощности в процентах
rPower, rFreq :REAL; // Текущие мощность и частота насоса
uiSpTimeDelay :UINT; // Задержка возникновения сообщений
END_VAR
VAR_OUTPUT
xWarn, xAlr :BOOL; // Предупредительный и аварийный сигналы
rPerCount :REAL; // Текущее отклонение мощности от расчётной
rPowerCalc :REAL; // Расчетное значение мощности при текущей частоте
END_VAR
VAR
a, b :REAL;
tonDelayWarn :TON;
tonDelayAlr :TON;
END_VAR
// Расчёт коэффициентов линейного уравнения
IF rSpFreq2 - rSpFreq1 <> 0.0 THEN
a := (rSpPow2 - rSpPow1) / (rSpFreq2 - rSpFreq1);
b := (rSpPow1 * rSpFreq2 - rSpPow2 * rSpFreq1) / (rSpFreq2 - rSpFreq1);
ELSE
a := 0.0;
b := 0.0;
END_IF;
// Вычисление рассчетной мощности
rPowerCalc := a * rFreq + b;
// Вычисление отклонения текущей мощности от расчётной
IF rFreq >= rSpFreqMin AND rPowerCalc <> 0.0 AND rPower <> 0.0 THEN
IF rPower < rPowerCalc THEN
rPerCount := (1.0 - rPower / rPowerCalc) * 100.0;
ELSE
rPerCount := (1.0 - rPowerCalc / rPower) * 100.0;
END_IF;
ELSE
rPerCount := 0.0;
END_IF;
// Формирование предупредительного и аварийного сигналов
tonDelayWarn(IN := rPerCount > rSpPerWarn, PT := T#1s * uiSpTimeDelay);
tonDelayAlr(IN := rPerCount > rSpPerAlr, PT := T#1s * uiSpTimeDelay);
xWarn := tonDelayWarn.Q;
xAlr := tonDelayAlr.Q;















