Skip to main content

Контроль заданої точки

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

Щоб зробити так, щоб південний плагін підтримував функції керування, потрібно виконати два кроки

  • Позначте плагін як такий, що підтримує керування
  • Додайте точки входу для керування

Увімкнути контроль

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

# plugin information dict
{
'name': 'Sinusoid Poll plugin',
'version': '1.9.2',
'mode': 'poll|control',
'type': 'south',
'interface': '1.0',
'config': _DEFAULT_CONFIG
}

Додавання цього прапора призведе до того, що під час завантаження плагіна сервіс півдня виконає низку дій:

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

Контрольні точки входу

Для операцій керування у плагіні south підтримуються дві точки входу

  • plugin_write: використовується для встановлення значення параметра у плагіні або пристрої
  • plugin_operation: використовується для виконання операції над плагіном або пристроєм

Південний Плагін може підтримувати одну або обидві з цих точок входу, залежно від типу плагіна.

Точка входу запису

Точка входу запису використовується для встановлення даних у плагіні або запису даних у пристрій.

Точка входу для запису плагіна визначається наступним чином

def plugin_write(handle, name, value)

Де знаходяться параметри;

  • handle дескриптор екземпляра плагіна
  • name ім'я елемента, який потрібно змінити
  • value рядкове представлення нового значення, яке буде присвоєно елементу

Значення, що повертається, визначає, чи був запис успішним чи ні. True повертається в разі успішного запису.

def plugin_write(handle, name, value):
""" Setpoint write operation

Args:
handle: handle returned by the plugin initialisation call
name: Name of parameter to write
value: Value to be written to that parameter
Returns:
bool: Result of the write operation
"""
_LOGGER.info("plugin_write(): name={}, value={}".format(name, value))
return True

У цьому випадку ми просто виводимо назву параметра і значення, яке потрібно встановити для цього параметра. Зазвичай керування використовується для внесення змін на самому підключеному пристрої, наприклад, для зміни значення регістра ПЛК. Це просто приклад для демонстрації API.

Точка входу операції

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

Точка входу операції запису плагіна визначається наступним чином

def plugin_operation(handle, operation, params)

Де знаходяться параметри;

  • handle дескриптор екземпляру плагіна
  • операція назва операції, що виконується
  • params список кортежів імен/значень, які передаються операції

Параметр operation має використовуватися плагіном для визначення операції, яку потрібно виконати. Фактичні параметри передаються у вигляді списку кортежів ключ/значення у вигляді рядків.

Повернення з виклику є логічним результатом операції, про невдачу операції або виклик нерозпізнаної операції слід повідомити поверненням хибного значення. Якщо операція завершилася успішно, слід повернути значення true.

У наступному прикладі показано реалізацію точки входу в операцію плагіна.

def plugin_operation(handle, operation, params):
""" Setpoint control operation

Args:
handle: handle returned by the plugin initialisation call
operation: Name of operation
params: Parameter list
Returns:
bool: Result of the operation
"""
_LOGGER.info("plugin_operation(): operation={}, params={}".format(operation, params))
return True

У випадку реальної машини операція, швидше за все, спричинить дію на машині, наприклад, запит до машини на повторне калібрування. Наведений вище приклад є лише демонстрацією API.