PDA

Просмотр полной версии : Обращение к выходам скрипта внутри статической функции



Igor V
05.03.2018, 10:59
Есть ли возможность внутри статической функции в C# скрипте обратиться к выходам скрипта?

Есть необходимость в функции таймера public static void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e) (system.timers) обратиться к выходам. Стандартные фб для работы со временем не подходят по функционалу.

SCADAMaster
05.03.2018, 11:24
В статическом нельзя.
А что вы собрались с таймерами внутри цикла делать?

Igor V
05.03.2018, 12:07
Предполагаю по нажатии кнопки запускать этот скрипт, чтобы выполнял функцию для работы с переменными через заданное время, после нажатия.
[FBRetain]
public partial class ФБ : ScriptBase
{
private static Timer aTimer;
public override void Start()
{
aTimer = new System.Timers.Timer();
aTimer.Interval = 3000;
aTimer.Elapsed += OnTimedEvent;
aTimer.AutoReset = true;
aTimer.Enabled = true;
aTimer.Start();
}
public override void Execute()
{

}
public static void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)
{

}
}

SCADAMaster
05.03.2018, 14:31
Нельзя работать с таймерами в цикле - вы повесите поток.
Просто считайте такты опроса, или сохраняйте прошлое время время в скрипте, и сравнивайте с новым.

Igor V
05.03.2018, 14:52
start() выполняется один раз при запуске, в нем запускается таймер, в execute() проверяется переменная, которая задается в таймере. Даже в этом случае вешается поток?
[FBRetain]
public partial class ФБ : ScriptBase
{
private static Timer aTimer;
private static bool flag=false;
public override void Start()
{
aTimer = new System.Timers.Timer();
aTimer.Interval = 3000;
aTimer.Elapsed += OnTimedEvent;
aTimer.AutoReset = true;
aTimer.Enabled = true;
aTimer.Start();
}
public override void Execute()
{
if(flag){
Параметр1=1;
flag=false;
}
}
public static void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)
{
flag=true;
}
}

SCADAMaster
05.03.2018, 15:28
Поведение трудно предсказуемо.
И зачем статический метод?