From OpenSCADAWiki
Jump to: navigation, search
This page is a translated version of the page Modules/BlockCalc and the translation is 100% complete.

Other languages:
English • ‎mRussian • ‎Українська
Constr.png The translation checking and actualizing
Модуль Ім'я Версія Ліцензія Джерело Мови Платформи Тип Автор Опис
BlockCalc Блоковий обчислювач 1.12 GPL2 daq_BlockCalc.so en,uk,ru,de x86,x86_64,ARM DAQ Роман Савоченко
  Максим Лисенко (2012) — переклад цієї сторінки
Надає блоковий обчислювач.

Модуль підсистеми "DAQ" BlockCalc надає в систему OpenSCADA механізм створення користувацьких обчислень. Механізм обчислень ґрунтується на формальній мові блокових схем (функціональних блоків).

Також модулем реалізуються функції горизонтального резервування, а саме спільної роботи з віддаленою станцією цього ж рівня. Крім синхронізації значень і архівів атрибутів параметрів модулем здійснюється синхронізація значень блоків блокової схеми, з метою безударного підхоплення алгоритмів.

Мови блокового програмування ґрунтуються на понятті блокових схем (функціональних блоків). При чому в залежності від сутності блоку блокові схеми можуть бути: логічними схемами, схемами релейного логіки, моделлю технологічного процесу та інше. Суть блокової схеми полягає в тому, що вона містить перелік блоків і зв'язки між ними.

З формальної точки зору блок — це елемент (функція), який має входи, виходи і алгоритм обчислення. Виходячи з концепції середовища програмування, блок — це кадр значень, асоційований з об'єктом функції.

Звісно, входи і виходи блоків потрібно з'єднувати для отримання цілісної блокової схеми. Передбачено наступні типи зв'язків:

  • міжблокові, підключення входу одного блоку до виходу іншого, входу одного блоку до входу іншого і вихід одного блоку до входу іншого;
  • далекі міжблокові, з'єднання блоків контролерів різних блокових схем даного модуля;
  • коефіцієнти, перетворення входу в постійну, всі входи/виходи за замовчуванням ініціюються як постійні;
  • зовнішній атрибут параметра.

Умовно з'єднання блоків можна зобразити як зв'язки між блоками в цілому (рис. 1) або деталізація зв'язків (рис. 2). В процесі зв'язування параметрів блоків допустимо з'єднання параметрів будь-якого типу. При цьому, в процесі обчислення буде виконуватися автоматичне приведення типів.

Рис. 1. Загальні зв'язки між блоками блокової схеми.
Рис. 2. Деталізовані зв'язки між блоками.

1 Контролер модуля

Кожен контролер цього модуля містить блокову схему, яку він обраховує із зазначеним періодом. Для надання обчислених даних в систему OpenSCADA в контролері можуть створюватися параметри. Приклад вкладки конфігурації контролера даного типу зображений на рис.3.

Рис. 3. Вкладка конфігурації контролера.

За допомогою цієї вкладки можна встановити:

  • Стан об'єкту контролеру, а саме: статус, "Ввімкнено", "Виконується" та ім'я сховища, яке містить конфігурацію.
  • Ідентифікатор, ім'я та опис контролеру.
  • Стан "Ввімкнено" та "Виконується", у який переводити об'єкт контролеру при запуску.
  • Планування обчислення, пріоритет задачі опитування джерел даних і кількість ітерацій в одному циклі завдання обчислення блокової схеми контролера.

2 Блокова схема контролера

Блокова схема формується за допомогою вкладки блоків контролера, конфігурації блоку (рис.4) та його зв'язків (рис.5). Блоки зберігаються у таблиці із назвою "BlckCalcBlcks_{CntrId}".

Блоки блокової схеми можуть зв'язуватися як між собою, так і підключатися до атрибутів параметрів. Самі блоки при цьому не містять структури входів/виходів (IO), а містять значення, виходячи зі структури IO пов'язаної функції. Функції для зв'язування з блоком використовуються з об'єктної моделі системи OpenSCADA.

Будь-який блок може в будь-який момент виключений з обробки та переконфігурований, після чого може бути знову включений в обробку. Зв'язки між блоками можуть конфігуруватися без винятку блоків з обробки та зупинки контролера. Значення всіх IO, не охоплених зв'язками, можуть бути змінені в процесі обробки.

За допомогою вкладки блоків можна:

  • додати блок в блокову схему;
  • видалити блок з блокової схеми;
  • проконтролювати загальну кількість, кількість включених і кількість оброблюваних блоків.
Рис. 4. Вкладка конфігурації блоку блокової схеми.

За допомогою форми конфігурації блоку можна встановити:

  • стан блоку, а саме: "Ввімкнений" і "Обробляється";
  • ідентифікатор, ім'я та опис блоку;
  • стан, в який переводити блок при завантаженні: "Вмикати" і "Обробляти";
  • вказати блок, який повинен обов'язково виконуватись перед даними;
  • призначити робочу функцію з об'єктної моделі, перейти до функції для ознайомлення.
Рис. 5. Вкладка конфігурації зв'язків блоку блокової схеми.

За допомогою вкладки конфігурації зв'язків блоку блокової схеми можна встановити зв'язки для кожного параметра блоку окремо.

Підтримуються наступні типи зв'язків:

  • міжблокові: підключення входу блоку до виходу іншого блоку, входу одного блоку до входу іншого і виходу одного блоку до входу іншого;
  • дальні міжблокові; з'єднання блоків з різних контролерів даного модуля;
  • коефіцієнт; перетворення входу в константу, всі входи/виходи за замовчуванням ініційовані як константи;
  • зовнішній атрибут параметра.

Для установки значень параметрів блоку призначена відповідна вкладка (рис.6).

Відповідно з реалізацією функцій користувача в системі OpenSCADA підтримуються чотири основних типи IO: ціле, дійсне, логічне і рядок.

Рис. 6. Вкладка конфігурації значень параметрів блоку блокової схеми.

Модулем передбачено особливу обробку низки входів/виходів блоку:

  • f_frq — Частота обчислення або час після останнього обчислення блоку, негативне у секундах, для планування за CRON, тільки читання.
  • f_start — Прапорець першого виконання блоку, запуск, тільки читання.
  • f_stop — Прапорець останнього виконання блоку, зупинка, тільки читання.
  • this — Об'єкт цього блоку.

3 Параметри контролеру

Модуль надає тільки один "Стандартний (std)" тип параметрів із назвою таблиці параметрів "BlckCalcPrm_{CntrId}". Параметр слугує для відображення обчислених в блоках даних на атрибути параметрів контролера. Приклад вкладки конфігурації параметра наведено на рис.7.

Рис. 7. Вкладка конфігурації значень параметрів контролера.

За допомогою цієї вкладки можна встановити:

  • стан параметра, а саме: "Включений" і тип параметра;
  • ідентифікатор, ім'я та опис параметра;
  • стан, в який переводити параметр при завантаженні: "Включений";
  • перелік атрибутів, відображених на параметри блоків. Формується у вигляді списку елементів у форматі: {BLK}.{BLK_IO}[:{AID}:{ANM}]. Де:
{BLK} — ідентифікатор блоку, блокової схеми; для постійної значення встановлюється:
'*s' — строковий тип;
'*i' — цілочисельний тип;
'*r' — дійсний тип;
'*b' — логічний тип.
{BLK_IO} — параметр блоку, блокової схеми; для постійної значень встановлюється в значення атрибуту;
{AID} — ідентифікатор атрибуту параметра;
{ANM} — ім'я атрибута параметра.

4 Копіювання блокових схем

Для спрощення і прискорення процедури розробки складних і повторюваних блокових схем передбачено механізм копіювання елементів блокової схеми як окремо, так і блокових схем цілком. Механізм копіювання інтегрований в ядро OpenSCADA і працює прозоро.

5 API користувацького програмування

Деякі об'єкти модуля надають функції користувацького програмування.

Об'єктна модель користувача модуля BlockCalc.

Об'єкт "Блок" (SYS.DAQ.BlockCalc["cntr"]["blk_block"])

  • ElTp cfg(string nm) — отримання значення конфігураційного поля nm об'єкта.
  • bool cfgSet(string nm, ElTp val) [доступ до відповідної підсистеми] — установка конфігураційного поля nm об'єкта у значення val.
  • TCntrNodeObj cntr() — повертає об'єкт контролеру цього параметру, незалежно від вкладеності.


6 Сервісні команди-функції Інтерфейсу Управління

Сервісні функції — це інтерфейс доступу до OpenSCADA із зовнішніх систем посередництвом Інтерфейсу Управління. Цей механізм покладено в основу усього обміну всередині OpenSCADA, реалізованого шляхом слабких зв'язків та власного протоколу обміну OpenSCADA.


Отримання значень всіх атрибутів блоку об'єкту контролеру
ЗАП: <get path="/DAQ/BlockCalc/{CNTR}/blk_{BLK}/%2fserv%2fattr" />

  • CNTR, BLK — об'єкт контролеру та блок у блоковій схемі.

ВІДП: <get path="/DAQ/BlockCalc/{CNTR}/blk_{BLK}/%2fserv%2fattr" rez="0">{attributes}</get>

  • attributes — атрибути блоку в тегах "a": <a id="{ID}">{value}</a>
    • ID — ідентифікатор атрибуту;
    • value — значення атрибуту.
<get path="/DAQ/BlockCalc/CM101/blk_AT101_1/%2fserv%2fattr" rez="0" user="roman">
  <a id="Fi">50.3839725707191</a>
  <a id="Pi">10.2588208891757</a>
  <a id="Ti">331.149550201738</a>
  <a id="Si">0.071</a>
  <a id="li">10</a>
</get>

Встановлення значень переліку атрибутів блоку об'єкту контролеру
ЗАП[root-DAQ]: <set path="/DAQ/BlockCalc/{CNTR}/blk_{BLK}/%2fserv%2fattr">{attributes}</set>

  • CNTR, BLK — об'єкт контролеру та блок у блоковій схемі;
  • attributes — атрибути блоку в тегах "a": <a id="{ID}">{value}</a>
    • ID — ідентифікатор атрибуту;
    • value — значення атрибуту.
<set path="/DAQ/BlockCalc/CM101/blk_AT101_1/%2fserv%2fattr">
  <a id="Fi">50.3839725707191</a>
  <a id="Pi">10.2588208891757</a>
</set>


7 Посилання