<< Click to Display Table of Contents >> Navigation: Проект > Элементы дерева объектов > Палитра ФБ > Служебные > Скрипт > Руководство и примеры > Обращение к переменным проекта > Запись значений в переменные |
С помощью скрипта можно не только читать значения дерева объектов, но и производить запись в них. При этом есть два способа - простая запись значения, и выдача действия (аналогично как у события или команды на вкладке Действия - действие Присвоить).
В качестве примера создадим в объекте две команды.
Добавим скрипт, в него вход Выполнить, и сделаем обработку его переднего фронта.
Рассмотрим первый способ, с помощью метода SetValue - выдадим значение (простую константу на Команду 1).
var item1=(ITreePinHlp)HostFB.TreeItemHlp.ParentObject.GetChild("Команда 1");
item1.GetRTPin().SetValue(new PinValue(1));
В первой строке мы получаем нашу переменную (как уже делали ранее), а во второй, получаем ее значение в режиме исполнения и вызываем метод SetValue который и установит значение на выход. Поскольку значение переменной - это структура (значение, метка времени, признак качества), то в качества аргумента нужно передать класс PinValue. new PinValue(1) - это конструктор класса, в который мы передаем один аргумент - число 1. Есть еще две версии данного конструктора класса:
PinValue(object value, DateTime time)
PinValue(object value, PinQuality quality, DateTime time)
В первом случае передается значение и метка времени, а во втором еще и признак качества. Передача метки времени требуется если необходимо формировать архив - пример такого скрипта мы рассмотрим в следующем уроке.
Теперь рассмотрим второй способ - с помощью метода AddAssignValueTask.
var item2=(ITreePinHlp)HostFB.TreeItemHlp.ParentObject.GetChild("Команда 2");
item2.AddAssignValueTask(1,null);
Первая строка аналогична прошлому примеру, а во второй вызывается метод AddAssignValueTask. В качестве аргументов он принимает два значения (любого типа - используется тип object). Первое значение - записывается сразу при вызове функции, а второе - через такт опроса. Таким образом с помощью данного метода можно вызвать выдачу импульса. Если же вторым аргументом будет null, то будет записано только одно значение в момент вызова метода.
Какой вариант использовать? Если ваша цель выдать управляющий сигнал на переменную, которая потом пойдет в ОРС сервере, то следует использовать второй вариант (AddAssignValueTask). В этом случае даже если вы запишите точно такое же значение на выход, оно будет передано в устройство (как и обычное действие). Но выдача такого действия более медленная операция, ее нельзя выдавать например каждый цикл опроса.
Если же ваша цель, например, генерация архива, то в таком случае следует использовать первый вариант. Его можно вызывать даже по нескольку раз в методе Execute (мы это увидим в следующем уроке).
Готовый пример доступен по ссылке.