При типе вызова (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с.