Канал CALL.Sum

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