Модификация переменных на "лету"

Модификация переменных из JS


Модификация - вызов функции для обработки переменной перед отправкой оборудованию или перед отображением на панели управления. Функцию-модификатор нужно указать в свойствах переменной, строка Script. Она позволяет преобразовать значение, полученное с панели управления или от оборудования, и только потом записать его в переменную Сервера.

Особенность функции-модификатора состоит в том, что вызвавший функцию канал или тег передает ей аргументы:

  • in_Type -тип канал или тег
  • in_Name - Имя канала или тега
  • in_Value - значение, которое пришло в канал или было записано в тег (именно его можно модифицировать)
Возможна модификация любой переменной сервера. Функция возвращает модифицированное значение (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);
}
ModifyJSinWindow.png
ModifyJS.png

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

    Return Mod Value FromJStoPToken.png
    В переменную Сервера будет приходить только результат модификации, но не исходное значение переменной.




    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 - значение, которое пришло в канал или было записано в тег (именно его можно модифицировать)

    Чтобы выбрать, какой канал будет обрабатывать функция-модификатор, укажите имя функции в настройках переменной:

    Return Mod Value FromJStoCmd.png
    Команда будет отправлять только результат модификации, но не исходное значение.

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


    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 - значение, которое пришло в канал или было записано в тег (именно его можно модифицировать)

    Чтобы выбрать, какой тег будет обрабатывать функция-модификатор, укажите имя функции в настройках переменной:

    Return Mod Value FromJStoFb.png
    Тег будет выдавать только результат модификации, но не исходное значение.

    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 - значение, которое пришло в канал или было записано в тег (именно его можно модифицировать)

    Чтобы выбрать, какую переменную обрабатывать, укажите имя функции в настройках переменной:

    Return Mod Value VirtModFromJS.png

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




    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 - значение, которое пришло в канал или было записано в тег (именно его можно модифицировать)

    Чтобы выбрать, какую переменную модифицировать, укажите имя функции в настройках переменной:

    Return Mod Value VirtTagFromJS.png

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

    Эта статья помогла вам?

    Сервис поддержки клиентов работает на платформе UserEcho