Спасибо! Очень пригодилось. В первую очередь по тому, что не знал о функции восстановления при рестарте.
На ОВЕНовском OPC-сервере для приборов c интерфейсом RS-485 и протоколом ОВЕН нет передачи сигнала сброса для счетчиков СИ-8, передаётся только само значение с него. Поэтому скрипт получился такой:
using System;
using MasterSCADA.Script.FB;
using FB;
public partial class ФБ : ScriptBase
{
public override void Execute()
{
if (DCNT > DCNT_OLD)
{Counter=Counter+(DCNT-DCNT_OLD);
DCNT_OLD=DCNT;}
if ((DCNT == 0) && (DCNT != DCNT_OLD))
{DCNT_OLD=0;}
if (DCNT1 < DCNT_OLD1)
{DCNT_OLD1 = DCNT1;}
}
}
DCNT - входная переменная, значение со счетчика
DCNT_OLD - выходная переменная, сохраняется при рестарте
Counter - выходная переменная, значение рассчитываемое скриптом, сохраняется при рестарте.
Второй IF нужен для ситуации когда значение на счетчике сбросилось в ноль но ещё не прибавилось, чтобы программа дальше могла нормально работать.
Третий - когда кто-то всё-таки сбросил счетчик пока компьютер был выключен.




Ответить с цитированием