Модификация переменных на "лету"
Модификация переменных из 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 - значение, которое пришло в канал или было записано в тег (именно его можно модифицировать)
Чтобы выбрать, какую переменную модифицировать, укажите имя функции в настройках переменной:

Тем же способом вы можете выполнить именованную функцию без аргументов.
Сервис поддержки клиентов работает на платформе UserEcho