Модуль: | FLibComplex1 |
Ім'я: | Бібліотека функцій сумісності зі SCADA Complex1. |
Тип: | Спеціальні |
Джерело: | spec_FLibComplex1.so |
Версія: | 1.1.0 |
Автор: | Роман Савоченко |
Опис: | Надає бібліотеку функцій сумісності із SCADA Complex1 фірми ООО НІП "ДІЯ". |
Ліцензія: | GPL |
Спеціальний модуль FLibComplex1 надає в систему OpenSCADA статичну бібліотеку функцій сумісності із SCADA Complex1 фірми НІП "DIYA". Ці функції використовувалися у SCADA системі Complex1 у вигляді алгоблоків для створення внутрішньосистемних обчислень на основі віртуального контролера. Надання бібліотеки цих функцій дозволяє здійснити перенос обчислювальних алгоритмів із системи Complex1.
Для адресації до функцій цієї бібліотеки можна використовувати статичну адресу виклику "Special.FLibComplex1.{Func}()" або динамічну "SYS.Special.FLibComplex1["{Func}"].call()", "SYS.Special.FLibComplex1.{Func}()". Де {Func} — ідентифікатор функції у бібліотеці.
Нижче приведено опис кожної функції бібліотеки. Для кожної функції здійснювалася оцінка часу виконання. Вимірювання здійснювалося на системі з наступними параметрами: Athlon 64 3000+ (ALTLinux 3.0(32біт)) шляхом вимірювання загального часу виконання функції при виклику її 1000 разів. Вибірка здійснювалася за найменшим значенням із п'яти обчислень. Час оточується кутовими дужками та вимірюється у мікросекундах.
Опис: Установка ознаки сигналізації у випадку виходу значення змінної за вказану границю.
Формула:
out = if(val>max || val<min) true; else false;
Опис: Операція розгалуження у відповідності з умовою "<".
Формула:
out=if(in1<(in2_1*in2_2*in2_3*in2_4)) in3_1*in3_2*in3_3*in3_4;
else in4_1*in4_2*in4_3*in4_4;
Опис: Операція розгалуження у відповідності із умовою ">".
Формула:
out=if(in1>(in2_1*in2_2*in2_3*in2_4)) in3_1*in3_2*in3_3*in3_4;
else in4_1*in4_2*in4_3*in4_4;
Опис: Повна перевірка умови, включаючи більше, менше та дорівнює.
Формула:
out = if(in1<(in2_1*in2_2*in2_3*in2_4)) in3_1*in3_2*in3_3*in3_4;
else if( in1>(in4_1*in4_2*in4_3*in4_4) in5_1*in5_2*in5_3*in5_4;
else in6_1*in6_2*in6_3*in6_4;
Опис: Функція містить алгоритм управління збірками дискретних сигналів для засувок та насосів, які містять: ознаки "Open", "Close" та команди "Open", "Close", "Stop". Функція підтримує роботу з імпульсними командами, тобто може знімати сигнал через вказаний проміжок часу.
Параметри:
ID | Параметр | Тип | Режим |
cmdOpen | Команда "Відкрити" | Bool | Вихід |
cmdClose | Команда "Закрити" | Bool | Вихід |
cmdStop | Команда "Стоп" | Bool | Вихід |
stOpen | Стан "Відкрито" | Bool | Вхід |
stClose | Стан "Закрито" | Bool | Вхід |
tCmd | Час утримання команди (s) | Цілий | Вхід |
frq | Період обрахування (мс) | Цілий | Вхід |
Опис: Здійснює ділення збірок змінних.
Формула:
out = (in1_1*in1_2*in1_3*in1_4*in1_5 + in2_1*in2_2*in2_3*in2_4*in2_5 + in3) /
(in4_1*in4_2*in4_3*in4_4*in4_5 + in5_1*in5_2*in5_3*in5_4*in5_5 + in6);
Опис: Обчислення експоненти над групою змінних.
Формула:
out=exp (in1_1*in1_2*in1_3*in1_4*in1_5 + (in2_1*in2_2*in2_3*in2_4*in2_5+in3) /
(in4_1*in4_2*in4_3*in4_4*in4_5+in5) )
Опис: Обчислення витрат газу.
Формула:
f = K1*((K3+K4*x)^K2);
Опис: Ітераційне обчислення з вказаним прирощенням. Коефіцієнт прирощення для різних напрямків різний.
Формула:
out = if( in1 > in2 ) in2 + in3*(in1-in2);
else in2 - in4*(in2-in1);
Опис: Затримка зміни змінної. Практично це фільтр без прив'язки до часу.
Формула:
y = y - Klag*( y - x );
Опис: Просте множення з діленням.
Формула:
out=(in1_1*in1_2*in1_3*in1_4*in1_5*in1_6)/
(in2_1*in2_2*in2_3*in2_4);
Опис: Розгалужене множення+ділення.
Формула:
out=in1_1*in1_2*in1_3*in1_4*in1_5*
(in2_1*in2_2*in2_3*in2_4*in2_5+(in3_1*in3_2*in3_3*in3_4*in3_5)/
(in4_1*in4_2*in4_3*in4_4*in4_5));
Опис: Пропорційно-інтегрально-диференціальний регулятор.
Параметри:
ID | Параметр | Тип | Режим | По замовченню |
var | Змінна | Реальний | Вхід | 0 |
sp | Завдання | Реальний | Вихід | 0 |
max | Макс. шкали | Реальний | Вхід | 100 |
min | Мін. шкали | Реальний | Вхід | 0 |
manIn | Ручний ввід (%) | Реальний | Вхід | 0 |
out | Вихід (%) | Реальний | Повернення | 0 |
auto | Автомат | Логічний | Вхід | 0 |
casc | Каскад | Логічний | Вхід | 0 |
Kp | Kp | Реальний | Вхід | 1 |
Ti | Ти (мс) | Цілий | Вхід | 1000 |
Kd | Kd | Реальний | Вхід | 1 |
Td | Тд (мс) | Цілий | Вхід | 0 |
Tzd | Т затримки похідної (мс) | Цілий | Вхід | 0 |
Hup | Верхня границя виходу (%) | Реальний | Вхід | 100 |
Hdwn | Нижня границя виходу (%) | Реальний | Вхід | 0 |
Zi | Нечутливість (%) | Реальний | Вхід | 1 |
followSp | Слідкувати завданням за змінною у ручному | Логічний | Вхід | 1 |
K1 | Коеф. входу 1 | Реальний | Вхід | 0 |
in1 | Вхід 1 | Реальний | Вхід | 0 |
K2 | Коеф. входу 2 | Реальний | Вхід | 0 |
in2 | Вхід 2 | Реальний | Вхід | 0 |
K3 | Коеф. входу 3 | Реальний | Вхід | 0 |
in3 | Вхід 3 | Реальний | Вхід | 0 |
K4 | Коеф. входу 4 | Реальний | Вхід | 0 |
in4 | Вхід 4 | Реальний | Вхід | 0 |
f_frq | Частота обчислення (Гц) | Реальний | Вхід | 1 |
Структура:
file:pid.png
Опис: Зведення у ступінь.
Формула:
out=(in1_1*in1_2*in1_3*in1_4*in1_5)^
(in2_1*in2_2*in2_3*in2_4*in2_5 + (in3_1*in3_2*in3_3*in3_4*in3_5)/
(in4_1*in4_2*in4_3*in4_4*in4_5));
Опис: Виклик одного з чотирьох варіантів.
Формула:
out = if( sel = 1 ) in1_1*in1_2*in1_3*in1_4;
if( sel = 2 ) in2_1*in2_2*in2_3*in2_4;
if( sel = 3 ) in3_1*in3_2*in3_3*in3_4;
if( sel = 4 ) in4_1*in4_2*in4_3*in4_4;
Опис: Простий підсумок з множенням.
Формула:
out=in1_1*in1_2+in2_1*in2_2+in3_1*in3_2+in4_1*in4_2
+ in5_1*in5_2+in6_1*in6_2+in7_1*in7_2+in8_1*in8_2;
Опис: Підсумок з діленням групи значень.
Формула:
out = in1_1*in1_2*(in1_3+in1_4/in1_5) +
in2_1*in2_2*(in2_3+in2_4/in2_5) +
in3_1*in3_2*(in3_3+in3_4/in3_5) +
in4_1*in4_2*(in4_3+in4_4/in4_5);
Опис: Підсумок з множенням групи значень.
Формула:
out = in1_1*in1_2*(in1_3*in1_4+in1_5) +
in2_1*in2_2*(in2_3*in2_4+in2_5) +
in3_1*in3_2*(in3_3*in3_4+in3_5) +
in4_1*in4_2*(in4_3*in4_4+in4_5);
Деякі об'єкти модуля надають функції користувацького програмування.
Об'єкт "Бібліотека функцій" (SYS.Special.FLibComplex1)
Об'єкт "Користувацька функція" (SYS.Special.FLibComplex1["funcID"])