При типе вызова (15) Sum аппаратное значение канала CALL формируется из значений его аргументов (при изменении A устанавливается b14 (бит 0 атрибута 46) и фиксируется время (атрибут 45)):
Параметр=0 – A равно сумме аргументов;
Параметр=1 – A равно сумме значений достоверных каналов, привязанных к аргументам (аргумент без привязки достоверен);
Параметр=3 – A равно результату побитового логического сложения аргументов (побитовое OR);
Параметр=4 – A равно результату побитового логического умножения аргументов (побитовое AND);
Параметр=5 – к каналу CALL.Sum (далее – Sum5) должен быть привязан канал (далее – result), аргумент Sum5.arg0 должен иметь тип данных DATE_AND_TIME, к последующим аргументам привязываются каналы (chi). Sum5 суммирует значения каналов chi и записывает результат в result в том случае, если chi.T >= Sum5.arg0 для любого i;
Параметр=6 – аналог предыдущего, но отрабатывает только в том случае, если у всех суммируемых каналов DataReady=1;
CALL.Sum с Параметр=8 (далее – Sum8) используется для алгебраического сложения векторов:
к аргументам Sum8 должны быть привязаны каналы класса CALL (calli) (привязка к 0,R – сложение, к 9,Q – вычитание);
к Sum8 должен быть привязан канал класса CALL (call_result).
В указанной конфигурации аргумент 0 call_result равен сумме аргументов 0 каналов calli и т.д. Операция выполняется корректно также в случае, если к аргументам Sum8 привязаны индивидуальные архивы CALL.LArc0 или CALL.LArc1, сконфигурированные идентично (период пересчета, число аргументов и т.п.). Аргументы, имеющие временной тип данных, игнорируются при суммировании (только копируются).
CALL.Sum с Параметр=9-12 (далее – Sum9-Sum12) используется для алгебраического сложения векторов.
Конфигурация Sum10 и Sum12:
arg0 должен иметь тип данных DATE_AND_TIME;
arg1 и arg2 должны иметь тип OUTPUT и должны быть привязаны к каналам CALL.ChGroupReq (далее соответственно ChGroupReq1 и ChGroupReq2);
arg3 может быть OUTPUT с привязкой к CALL.ChGroupReq (далее соответственно ChGroupReq3) или иметь тип INPUT;
последующие аргументы должны иметь тип INPUT;
к Sum10 (Sum12) должен быть привязан канал CALL.ChGroupReq или CALL.TVC (call_result).
В этой конфигурации суммируются векторы (CALL.ChGroupReq или CALL.TVC), начиная с arg3 (arg4).
В аргументы ChGroupReq2 записывается разность между соответствующими аргументами ChGroupReq1 и call_result.
В аргументы ChGroupReq3 (при его наличии) записываются величины 0.01*(ChGroupReq1.argk – call_result.argk) / ChGroupReq1.argk .
Правила суммирования для Sum9-Sum12:
если к аргументу привязан канал, отключенный от источника (W=1), он игнорируется;
если хотя бы один привязанный канал имеет аппаратную недостоверность, флаг аппаратной недостоверности устанавливается и в CALL.Sum;
CALL.Sum отрабатывает по времени (когда 45,T всех суммируемых каналов больше или равно CALL.Sum.arg0);
CALL.Sum работает с числовыми аргументами, кроме временных;
если у аргумента нет привязки, суммируется его значение по умолчанию;
если привязка к 0,R канала CALL.ChGroupReq/CALL.TVC, выполняется сложение, если к 9,Q – вычитание;
результат суммирования записывается в аргументы call_result;
после отработки в каналах CALL.Sum и call_result устанавливаются параметры b14, Response и DataReady, а также фиксируется время (атрибут 45,T). Те же переменные устанавливаются в каналах ChGroupReq2 и ChGroupReq3 после успешной записи в их аргументы;
функции, связанные с arg1-arg3, отрабатываются по времени (когда 45,T канала ChGroupReq1 больше или равно CALL.Sum.arg0);
каналы-результаты в реальном времени динамически корректируют количество своих аргументов по количеству аргументов векторов, участвующих в операции;
если в качестве call_result используется CALL.TVC, а среди суммируемых каналов нет ни одного CALL.TVC, то в call_result устанавливаются arg0=Tтекущее – <число точек в call_result>с и arg1 = Tтекущее;
если в качестве call_result используется CALL.TVC, то суммируются (call_result.Параметр+1) точек кривых (времена точек не анализируются). Для CALL.ChGroupReq номер кривой равен 0;
если в качестве call_result используется CALL.ChGroupReq, среди суммируемых каналов должен быть хотя бы один канал CALL.ChGroupReq;
если к аргументам CALL.Sum привязаны атрибуты 0, R каналов CALL.TVC и в качестве call_result используется CALL.ChGroupReq, то в call_result.arg0 записывается результат суммирования arg0 всех суммируемых CALL.ChGroupReq и первых точек всех кривых всех суммируемых CALL.TVC, в call_result.arg1 записывается результат суммирования arg1 всех суммируемых CALL.ChGroupReq и вторых точек всех кривых всех суммируемых CALL.TVC и т.д.;
если к аргументам CALL.Sum привязаны атрибуты x=142, 143… каналов CALL.TVC и в качестве call_result используется CALL.ChGroupReq, то в call_result.arg0 записывается результат суммирования arg0 всех суммируемых CALL.ChGroupReq и первых точек кривых (x-142) всех суммируемых CALL.TVC, в call_result.arg1 записывается результат суммирования arg1 всех суммируемых CALL.ChGroupReq и вторых точек кривых (x-142) всех суммируемых CALL.TVC и т.д.
Sum9 (Sum11) – это упрощенный сумматор (нет анализа arg0, нет функций, связанных с arg1-arg3, все аргументы – INPUT).
CALL.Sum с Параметр=13, 14 аналогичен Sum10 (Sum12), но отрабатывает только в том случае, если у всех суммируемых каналов DataReady=1.
Если CALL.Sum.Параметр=11, 12, 14, то arg0=Tтекущее + 1с.