<< Click to Display Table of Contents >> Navigation: Проект > Элементы дерева объектов > Палитра ФБ > Служебные > Скрипт > Руководство и примеры > Начало работы > Сохранение значений скрипта между запусками |
Ранее мы писали, что значение любой переменной между перезапусками можно сохранить - включив флаг Восстановление при рестарте. Данный функционал работает также для скриптов, при этом можно сохранять не только значения Выходов, но и внутренние переменные.
Для примера включим у ФБ "Скрипт" флаг Восстановление при рестарте.
Перейдем на вкладку Код. Создадим один вход Выполнить и два выхода Val1 и Val2.
Наш класс помечен специальным атрибутом - [FBRetain]:
[FBRetain]
public partial class ФБ : ScriptBase
Данный атрибут означает, что внутренние переменные можно сохранять между перезапуском.
Для пример объявим две переменные:
double SaveVal1;
double SaveVal2;
Сделаем чтобы в данные переменные сохранилось бы значение по переднему фронту на входе Выполнить.
public override void Execute()
{
if (Выполнить == true && M == false)
{
SaveVal1 = 10;
SaveVal2 = 20;
}
M = Выполнить;
}
Теперь, чтобы убедится, что наши значения действительно будут сохраняться между перезапусками, мы запишем их результат на выходы Val1 и Val2, при старте MasterSCADA - в методе Start.
public override void Start()
{
Val1 = SaveVal1;
Val2 = SaveVal2;
}
Итоговый код будет выглядеть так:
[FBRetain]
public partial class ФБ : ScriptBase
{
double SaveVal1;
double SaveVal2;
bool? M = false;
public override void Start()
{
Val1 = SaveVal1;
Val2 = SaveVal2;
}
public override void Execute()
{
if (Выполнить == true && M == false)
{
SaveVal1 = 10;
SaveVal2 = 20;
}
M = Выполнить;
}
}
Теперь проверим работу скрипта в режиме исполнения - подадим сигнал на вход Выполнить.
На выходах 0, потому что значение записывается на них только в момент старта. Перезапустим систему:
Значения записались. Как мы можем видеть внутренние переменные скрипта также могут сохраняться.
Если этого не требуется - то просто уберите атрибут [FBRetain] из кода.
Если нужно сохранять только несколько переменных, то уберите атрибут [FBRetain] у всего скрипта, а конкретные переменные наоборот - пометьте им. Например сделаем чтобы сохранялась только одна переменная SaveVal:
public partial class ФБ : ScriptBase
{
[FBRetain] double SaveVal1;
double SaveVal2;
bool? M = false;
//остальной код без изменений
Теперь сохранится только SaveVal1, а переменная SaveVal2 сохраняться не будет.
Можно оставить атрибут [FBRetain] на всем классе, а пометить переменные которые сохранять не нужно - для этого используется атрибут [FBNonRetain]. Например, опять же оставим чтобы сохранялось только значение SaveVal1:
[FBRetain]
public partial class ФБ : ScriptBase
{
double SaveVal1;
[FBNonRetain] double SaveVal2;
bool? M = false;
public override void Start()
//остальной код без изменений
Следует помнить, что сохраняются только простые типы данных, сложные типы - структуры и классы не сохраняются между перезапусками.