Модификация переменных на "лету"
Модификация переменных из JS
Модификация - вызов функции для обработки переменной перед отправкой оборудованию или перед отображением на панели управления. Функцию-модификатор нужно указать в свойствах переменной, строка
Script
. Она позволяет преобразовать значение, полученное с панели управления или от оборудования, и только потом записать его в переменную Сервера. Особенность функции-модификатора состоит в том, что вызвавший функцию канал или тег передает ей аргументы:
- in_Type -тип канал или тег
- in_Name - Имя канала или тега
- in_Value - значение, которое пришло в канал или было записано в тег (именно его можно модифицировать)
return
. Пример использования функций-модификаторов для автоматического преобразования значений:
/** Обработчик изменения канала/тега на входе : in_Type - Тип 0 - канал, 1 - тег in_Name - Имя канала/тега in_Value - Значение на выходе : результирующее значение канала/тега */ function test(in_Type, in_Name, in_Value) { IR.Log("Type: " + in_Type); IR.Log("Name: " + in_Name); IR.Log("Value: " + in_Value); }
Driver Tokens
Driver Tokens - переменные драйвера. Отображают статус подключения к оборудованию автоматизации. Переменные драйвера доступны только на чтение, но их можно модифицировать с помощью JavaScript перед передачей на панель управления. Для модификации переменной создадим в серверном проекте функцию-модификатор.
Пример функции-модификатора для Driver Tokens:
/* Токен Online любого драйвера может вернуть только значение 1 = Online и 0 = Offline. Заменим 1 на текущее время и фразу " Connection established"; 0 на время и " Connection closed" Вернем результат преобразования тому, кто вызвал функцию */ function onlineModify(in_Type, in_Name, in_Value) { if(in_Value == 1 ) { in_Value = IR.GetVariable("System.Time.24")+" Connection established"; return in_Value; }else{ in_Value = IR.GetVariable("System.Time.24")+" Connection closed"; return in_Value; } }
- in_Type -тип канал или тег
- in_Name - Имя канала или тега
- in_Value - значение, которое пришло в канал или было записано в тег (именно его можно модифицировать)
В переменную Сервера будет приходить только результат модификации, но не исходное значение переменной.
Channels
Channels - команды для отправки драйверу (Commands). Позволяют записать значение в переменную оборудования автоматизации или отправить команду, заранее сформированную в драйвере. Команды драйвера можно активировать (выполнить) с панели управления или из скрипта. При выполнении команды, ей нужно передать значение (иногда значение не нужно, в этом случае передается пустая строка). Это значение можно модифицировать с помощью JavaScript перед отправкой оборудованию. Для модификации отправляемого значения создадим в серверном проекте функцию-модификатор.
Пример функции-модификатора для Channels:
/* Канал активируется с передачей значения для отправки в диапазоне 0-100 Приведем это значение к диапазону 0-255, округлим и отправим оборудованию */ function rangeModify (in_Type, in_Name, in_Value) { in_Value = 255/100; return in_Value.toFixed(0); }
- in_Type -тип канал или тег
- in_Name - Имя канала или тега
- in_Value - значение, которое пришло в канал или было записано в тег (именно его можно модифицировать)
Чтобы выбрать, какой канал будет обрабатывать функция-модификатор, укажите имя функции в настройках переменной:
Команда будет отправлять только результат модификации, но не исходное значение.
Тем же способом вы можете выполнить именованную функцию без аргументов.
Tags
Tags - каналы обратной связи драйвера (Feedbacks). Они позволяют получить состояние переменной оборудования или результат парсинга входящих данных. Теги драйвера можно отобразить на панели управления или использовать в скрипте. Значение тега можно модифицировать с помощью JavaScript перед дальнейшим использованием. Для модификации значения, создадим в серверном проекте функцию-модификатор.
Пример функции-модификатора для Tags:
/* Канал принимает значения в диапазоне 0-255 Приведем значение к диапазону 0-100, округлим и вернем в канал обратной связи */ function rangeModifyBack (in_Type, in_Name, in_Value) { in_Value = 100/255; return in_Value.toFixed(0); }
- in_Type -тип канал или тег
- in_Name - Имя канала или тега
- in_Value - значение, которое пришло в канал или было записано в тег (именно его можно модифицировать)
Чтобы выбрать, какой тег будет обрабатывать функция-модификатор, укажите имя функции в настройках переменной:
Тег будет выдавать только результат модификации, но не исходное значение.
Virtual Channels
Virtual Channels - виртуальные переменные сервера. На стороне панели управления они выглядят как команды. В переменную можно отправить значение value, для обработки функцией-модификатором. На основе значения value вы можете сформировать команду и отправить ее оборудованию автоматизации
Пример функции-модификатора для Virtual Channels:
/* TCP команда DVD плейеру имеет вид: "VOLUME XX", ХХ - это громкость от 00 до 100 Громкость может состоять из двух или трех симовлов, т.е. 00, 01, 02, ... 100 (ASCII) Получим значение 0-100 с панели управления, сформируем и отправим команду */ var driver = IR.GetDevice("AV (TCP)"; function volume (in_Type, in_Name, in_Value) { if(in_Value <10) { in_Value ="0"+in_Value; driver.Send(["VOLUME "+in_Value+"\r\n"]); }else{ driver.Send(["VOLUME "+in_Value+"\r\n]); } }
- in_Type -тип канал или тег
- in_Name - Имя канала или тега
- in_Value - значение, которое пришло в канал или было записано в тег (именно его можно модифицировать)
Чтобы выбрать, какую переменную обрабатывать, укажите имя функции в настройках переменной:
Тем же способом вы можете выполнить именованную функцию без аргументов.
Virtual Tags
Virtual Tags - виртуальные переменные сервера. На стороне панели управления они выглядят как каналы обратной связи. В переменную можно записать значение из скрипта, а затем обработать его функцией-модификатором. Финальное значение будет доступно для чтения с панели управления.
Пример функции-модификатора для Virtual Tags:
/* Виртуальный тег НЕ получает значений от оборудования Поэтому мы запишем значение в тег из скрипта, когда это необходимо */ IR.SetVariable("Server.Tags.Virtual 1",100) /* Значение может быть дополнительно обработано с помощью функции-модификатора */ function value (in_Type, in_Name, in_Value) { in_Value="brightness: "+in_Value+"%"; return in_Value;// brightness: 100% }
- in_Type -тип канал или тег
- in_Name - Имя канала или тега
- in_Value - значение, которое пришло в канал или было записано в тег (именно его можно модифицировать)
Чтобы выбрать, какую переменную модифицировать, укажите имя функции в настройках переменной:
Тем же способом вы можете выполнить именованную функцию без аргументов.
Customer support service by UserEcho