Примеры привязок

В этом разделе даны некоторые реальные примеры привязок инструментальных панелей.

Пример 1: Привязка цвета панели к статусу контроллера

Эта привязка сделает панель статуса красной, если контроллер пришлет тревогу о падении напряжения. В остальных случаях панель будет зеленой.

Обратите внимание, что выражение и ссылка на цель используют относительные пути контекста ("."), чтобы инструментальная панель была совместима со множеством одинаковых контроллеров. Инструментальная панель должна быть относительной и действующей для всех устройств типа "контроллер напряжения".

Цель

form/voltageAlertPanel:style

Выражение

{.:voltageAlert$voltageAlert} ? "background-color: red" : "background-color: green"

Активатор

.:voltageAlert$voltageAlert

Условие


Опции

On Startup, On Event

Приведенную выше привязку можно изменить так, чтобы панель становилась красной, если показание температуры превышает 50 градусов:

({.:voltage$voltage} > 50) ? "background-color: red" : "background-color: green"

Пример 2: Привязка компонента с числовым полем к уставке контроллера

Следующая пара привязок будет менять уставку контроллера (например, контроллера температуры) при изменении значения компонента с числовым полем.

Первая привязка используется для чтения текущего значения уставки с контроллера и инициализации числового поля:

Цель

form/numberField0:value

Выражение

{.:currentTemperature$temperatureCelsius}

Активатор


Условие


Опции

On Startup

Вторая привязка записывает новую уставку на контроллер после перемещения регулятора:

Цель

.:currentTemperature$temperatureCelsius

Выражение

{form/numberField0:value}

Активатор


Условие

form/numberField0:value

Опции

On Event

Пример 3: Привязка редактора таблицы к результатам запроса

Привязка выполняет запрос сервера, текст которого содержится в текстовом поле queryText, и помещает результаты запроса в компонент Редактор таблицы данных с именем results.

Запрос выполняется путем вызова executeQuery корневого контекста сервера. Операция выполняется при нажатии на кнопку execute.

Обратите внимание, что первый параметр функции executeQuery помещен в одинарные кавычки, чтобы система обрабатывала его как выражение.

Цель

form/results:dataTable

Выражение

{:executeQuery('{form/queryText:text}')}

Активатор

form/executeButton:mouseClicked@

Условие


Опции

On Event

Можно использовать альтернативный синтаксис для выражения этой привязки:

callFunction("", "executeQuery", {form/queryText:text})

Это выражение работает точно так же, как и приведенное выше, но использует функцию callFunction() языка выражений для вызова функции контекста сервера, прямо указывая путь контекста, имя функции и ее параметры.

Пример 4: Вызов функции устройства

Этот пример объясняет, как вызвать функцию устройства или сервера из инструментальной панели. Предположим, у нас есть устройство, поддерживающее операцию multiply с двумя числовыми аргументами. Мы хотим вызвать эту операцию нажатием кнопки calculate, учитывая числа, введенные в два текстовых поля (argument1 и argument2).

Метод один: Вызов функции из цели привязки инструментальной панели

В этом случае цель нашей привязки будет указывать на функцию, и ее выражение вернет таблицу предопределенных параметров:

Цель

.:multiply()

Выражение

table(functionInputFormat(), {form/argument1:text}, {form/argument2:text})

Активатор

form/calculateButton:mouseClicked@

Условие


Опции

On Event

Обратите внимание, что мы используем относительный путь контекста (".") в цели, чтобы вычислительная инструментальная панель была совместима со множеством вычислительных агентов. Чтобы использовать ее только с одним агентом, укажите абсолютный путь, например, users.my_user.devices.my_agent.

В этом примере результат вычисления, возвращаемый операцией multiply, будет отброшен. Но что если мы захотим включить его в другой компонент инструментальной панели (например, метку)? Есть решение:

Метод два: Вызов функции из выражения привязки инструментальной панели

В этом случае выражение нашей привязки вызовет функцию и вернет ее выход (Таблицу данных). Сам результат вычисления (числовое поле result) извлекается из этой таблицы при помощи функции cell(). Этот результат записывается в метку result:

Цель

form/result:text

Выражение

cell(callFunction(dc(), "multiply", {form/argument1:text}, {form/argument2:text}), "result")

Активатор

Button:mouseClicked@

Условие


Опции

On Event

Обратите внимание, что используется относительный путь контекста устройства (возвращаемый функцией dc()). Чтобы использовать абсолютный путь контекста, замените dc() на полный путь устройства, например, users.my_user.devices.my_agent.

Существует другой (более компактный) стиль записи приведенного выше выражения привязки с тем же результатом.

Этот стиль использует ссылку на функцию вместо функции callFunction() языка выражений:

{.:multiply('{form/argument1:text}', '{form/argument2:text}')$result}