Функціональний блок який імітує роботу датчиків рівня для ємності з одним входом і одним виходом, яка в імітаційній моделі установки використовується як дозатори D1 та D2 (рис.1).
рис.1. Зображення імітованої установки для перевірки роботи блоків PACFramework.
На вході блока входять значення вхідної та вихідної витрат (в м3/с або в л/с), на виході формується значення рівня L
в метрах, або сантиметрах в залежності від розмірності входів. Імітуються також сигналізатори LSH
та LSL
.
Параметри V0
, Vmax
та S
задаються ззовні або за замовченням. Параметр d_t
- означує періодичність виклику для правильного розрахунку динаміки. Може використовуватися для зміни швидкості імітації.
FUNCTION_BLOCK "smLevelCyl1"
VAR_INPUT
INIT : Bool; // команда ініціалізації (задання початкових умов)
Fin : Real; // вхідна витрата задається в м3/с або в л/с
Fout : Real; // вихідна витрата задається в м3/с або в л/с
END_VAR
VAR_OUTPUT
L : Real; // рівень в метрах або в сантиметрах
LSH : Bool; // сигналізатор верхнього рівня
LSL : Bool; // сигналізатор нижнього рівня
END_VAR
VAR
d_t : Real := 0.1; // періодичність виклику в сек
V0 : Real; // значення обєму при ініціалізації моделі
V : Real; // об'єм рідини в ємності
Vmax : Real := 50.0; // об'єм ємності
S : Real := 20.0; // задається в м2 при витратах м3/с або см2 при витратах л/с
END_VAR
BEGIN
IF INIT THEN
V := V0; (*мінімальний обєм*)
ELSE
V := V + d_t * (Fin - Fout); (* приріст об'єму *)
IF V < 0.0 THEN V := 0.0; END_IF; (* обмеження по мінімуму *)
IF V > Vmax THEN V := Vmax; END_IF; (* обмеження по максимуму*)
L := V / S;
LSH := (V / Vmax) > 0.999; (* сигналізатор верхнього рівня*)
LSL := (V / Vmax) > 0.001; (* сигналізатор нижнього рівня*)
END_IF;
END_FUNCTION_BLOCK