Модуль підсистеми «DAQ» BlockCalc надає в систему OpenSCADA механізм створення користувацьких обчислень. Механізм обчислень ґрунтується на формальній мові блокових схем (функціональних блоків).
Також модулем реалізуються функції горизонтального резервування, а саме спільної роботи з віддаленою станцією цього ж рівня. Крім синхронізації значень і архівів атрибутів параметрів модулем здійснюється синхронізація значень блоків блокової схеми, з метою безударного підхоплення алгоритмів.
Мови блокового програмування ґрунтуються на понятті блокових схем (функціональних блоків). При чому в залежності від сутності блоку блокові схеми можуть бути: логічними схемами, схемами релейного логіки, моделлю технологічного процесу та інше. Суть блокової схеми полягає в тому, що вона містить перелік блоків і зв'язки між ними.
З формальної точки зору блок — це елемент (функція), який має входи, виходи і алгоритм обчислення. Виходячи з концепції середовища програмування, блок — це кадр значень, асоційований з об'єктом функції.
Звісно, входи і виходи блоків потрібно з'єднувати для отримання цілісної блокової схеми. Передбачено наступні типи зв'язків:
міжблокові, підключення входу одного блоку до виходу іншого, входу одного блоку до входу іншого і вихід одного блоку до входу іншого;
далекі міжблокові, з'єднання блоків контролерів різних блокових схем даного модуля;
коефіцієнти, перетворення входу в постійну, всі входи/виходи за замовчуванням ініціюються як постійні;
зовнішній атрибут параметра.
Умовно з'єднання блоків можна зобразити як зв'язки між блоками в цілому (рис. 1) або деталізація зв'язків (рис. 2). В процесі зв'язування параметрів блоків допустимо з'єднання параметрів будь-якого типу. При цьому, в процесі обчислення буде виконуватися автоматичне приведення типів.
Рис. 1. Загальні зв'язки між блоками блокової схеми
Рис. 2. Деталізовані зв'язки між блоками
1. Контролер модуля
Кожен контролер цього модуля містить блокову схему, яку він обраховує із зазначеним періодом. Для надання обчислених даних в систему OpenSCADA в контролері можуть створюватися параметри. Приклад вкладки конфігурації контролера даного типу зображений на рис.3.
Рис. 3. Вкладка конфігурації контролера.
За допомогою цієї вкладки можна встановити:
стан контролера, а саме: Статус, "Ввімкнено", "Запущено" та ім'я БД, яка містить конфігурацію;
ідентифікатор, ім'я та опис контролера;
стан, в який переводити контролер при завантаженні: "Вмикати" і "Запускати";
імена таблиць для зберігання параметрів і блоків контролера;
політику планування обчислення, пріоритет і число ітерацій в одному циклі завдання обчислення блокової схеми контролера.
2. Блокова схема контролера
Блокова схема формується за допомогою вкладки блоків контролера, конфігурації блоку (рис.4) та його зв'язків (рис.5).
Блоки блокової схеми можуть зв'язуватися як між собою, так і підключатися до атрибутів параметрів. Самі блоки при цьому не містять структури входів/виходів (IO), а містять значення, виходячи зі структури IO пов'язаної функції. Функції для зв'язування з блоком використовуються з об'єктної моделі системи OpenSCADA.
Будь-який блок може в будь-який момент виключений з обробки та переконфігурований, після чого може бути знову включений в обробку. Зв'язки між блоками можуть конфігуруватися без винятку блоків з обробки та зупинки контролера. Значення всіх IO, не охоплених зв'язками, можуть бути змінені в процесі обробки.
За допомогою вкладки блоків можна:
додати блок в блокову схему;
видалити блок з блокової схеми;
проконтролювати загальну кількість, кількість включених і кількість оброблюваних блоків.
Рис. 4. Вкладка конфігурації блоку блокової схеми.
За допомогою форми конфігурації блоку можна встановити:
стан блоку, а саме: "Ввімкнений" і "Обробляється";
ідентифікатор, ім'я та опис блоку;
стан, в який переводити блок при завантаженні: "Вмикати" і "Обробляти";
вказати блок, який повинен обов'язково виконуватись перед даними;
призначити робочу функцію з об'єктної моделі, перейти до функції для ознайомлення.
Рис. 5. Вкладка конфігурації зв'язків блоку блокової схеми.
За допомогою вкладки конфігурації зв'язків блоку блокової схеми можна встановити зв'язки для кожного параметра блоку окремо.
Підтримуються наступні типи зв'язків:
міжблокові: підключення входу блоку до виходу іншого блоку, входу одного блоку до входу іншого і виходу одного блоку до входу іншого;
дальні міжблокові; з'єднання блоків з різних контролерів даного модуля;
коефіцієнт; перетворення входу в константу, всі входи/виходи за замовчуванням ініційовані як константи;
зовнішній атрибут параметра.
Для установки значень параметрів блоку призначена відповідна вкладка (рис.6).
Відповідно з реалізацією функцій користувача в системі OpenSCADA підтримуються чотири основних типи IO: ціле, дійсне, логічне і рядок.
Рис. 6. Вкладка конфігурації значень параметрів блоку блокової схеми.
Модулем передбачено особливу обробку низки входів/виходів блоку:
f_frq — Частота обчислення або час після останнього обчислення блоку, негативне у секундах, для планування за CRON, тільки читання.
f_start — Прапорець першого виконання блоку, запуск, тільки читання.
f_stop — Прапорець останнього виконання блоку, зупинка, тільки читання.
this — Об'єкт цього блоку.
3. Параметри контролеру
Модуль надає тільки один тип параметрів "Стандартний". Параметр слугує для відображення обчислених в блоках даних на атрибути параметрів контролера. Приклад вкладки конфігурації параметра наведено на рис.7.
<BLK_IO> — параметр блоку, блокової схеми; для постійної значень встановлюється в значення атрибуту; <AID> — ідентифікатор атрибуту параметра; <ANM> — ім'я атрибута параметра.
4. Копіювання блокових схем
Для спрощення і прискорення процедури розробки складних і повторюваних блокових схем передбачено механізм копіювання елементів блокової схеми як окремо, так і блокових схем цілком. Механізм копіювання інтегрований в ядро OpenSCADA і працює прозоро.
5. API користувацького програмування
Деякі об'єкти модуля надають функції користувацького програмування.
Об'єкт "Блок" (SYS.DAQ.BlockCalc["cntr"]["blk_block"])
ElTp cfg(string nm) — отримання значення конфігураційного поля nm об'єкта.
bool cfgSet(string nm, ElTp val) — установка конфігураційного поля nm об'єкта у значення val.
TCntrNodeObj cntr() — повертає об'єкт контролеру цього параметру, незалежно від вкладеності.