Запись значений в переменные

<< Click to Display Table of Contents >>

Navigation:  Проект > Элементы дерева объектов > Палитра ФБ > Служебные > Скрипт > Руководство и примеры > Обращение к переменным проекта >

Запись значений в переменные

С помощью скрипта можно не только читать значения дерева объектов, но и производить запись в них. При этом есть два способа - простая запись значения, и выдача действия (аналогично как у события или команды на вкладке Действия - действие Присвоить).

В качестве примера создадим в объекте две команды.

sluzhebnie_skript_rukovodstvo_i_primery_obrashchenie_k_peremennym_proekta_zapis_znachenij_v_peremennye

Добавим скрипт, в него вход Выполнить, и сделаем обработку его переднего фронта.

sluzhebnie_skript_rukovodstvo_i_primery_obrashchenie_k_peremennym_proekta_zapis_znachenij_v_peremennye1

Рассмотрим первый способ, с помощью метода 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 (мы это увидим в следующем уроке).

Готовый пример доступен по ссылке.