Значение периода пересчета канала может устанавливаться либо в единицах времени (при этом оно должно быть кратно времени цикла CALC), либо в циклах соответствующего потока (см. Время цикла монитора ).
Если, например, период пересчета канала задан равным 2с, а время цикла CALC при этом равно 5с, то канал будет пересчитываться не чаще, чем 1 раз в 5с.
При редактировании проекта в ИС начальное значение и единицы измерения периода задаются на вкладке Основные раздела Системные редактора канала:
В реальном времени период канала можно изменять, модифицируя значения атрибутов Период пересчета (значение) (5, FRQ) и Период пересчета (единицы) (38, FRQ_D).
При редактировании в ИС единицы измерения периода канала (или тип пересчета) выбираются из следующего списка (recalculation.tmc, в скобках слева приведено значение, которое в реальном времени нужно послать в атрибут FRQ_D для задания соответствующих единиц измерения, в скобках справа – допустимое значение периода для выбранных единиц измерения):
(0) цикл CALC – период в циклах
CALC;
(1) сек – период в секундах (1-60);
(2) мин – период в минутах (1-60);
(3) час – период в часах (1-24);
(4) флаги – период в циклах CALC с
блокировкой пересчета с помощью канала типа OUTPUT, связанного с
системной переменной
Системные/@Recalculation_Flag
(атрибут Параметр переменной должен быть равен 0). Для
блокировки пересчета надо послать в такой канал значение 1;
(5) F1 – период в циклах CALC с отставанием
на 1 цикл;
(6) F2 – период в циклах CALC с отставанием
на 2 цикла;
(7) F3 – период в циклах CALC с отставанием
на 3 цикла;
(8) F4 – период в циклах CALC с отставанием
на 4 цикла;
(9) цикл FAST – период в циклах FAST
(см. Потоки монитора );
(10) на старте – канал
пересчитывается один раз при старте монитора;
(11) в нач. часа – один раз в
сутки в начале часа, заданного атрибутом Период;
(12) в нач. дня – один раз в
месяц в начале суток, номер которых задается атрибутом
Период;
(13) по времени – в указанное время.
Монитор создает в памяти список фиксированных значений времени
(32), который при старте заполнен нулевыми значениями (0
соответствует периоду 1 цикл). Для заполнения списка необходимыми
значениями времени (в секундах с 01.01.70) используются каналы
класса TIME, связанные с системными переменными
Системные/@Recalculation_Flag.
Атрибут Параметр системной переменной задает индекс значения
времени в списке (начиная с 1), значение канала TIME –
значение времени:
если значение канала меньше 86400, оно
прибавляется к значению времени в указанной позиции списка;
если значение канала больше или равно 86400, оно
задает значение времени в указанной позиции списка.
Для выбора времени пересчета канала с единицами измерения периода По времени используется его атрибут Период пересчета (значение) (5, FRQ) – значение этого атрибута указывает индекс времени в списке монитора,
(14) однократно – канал пересчитывается
один раз и выключается. Для канала асинхронного обмена: после
генерации запроса (Request=1) канал ждет ответа; если ответ
получен, Response=1 и канал выключается; если ответа нет
(Request=1, Response=0) в течение заданного таймаута,
канал не выключается, в нем устанавливается флаг аппаратной
недостоверности, и в дальнейшем канал периодически генерирует
запросы (до получения ответа);
(15) цикл IDLE – период в циклах
IDLE;
(16) цикл TF – период в циклах
TF;
(17) Trace Depth 0 и (18)
Trace Depth <>0 – по команде
Сохранить для МРВ из каналов с такими
периодами пересчета экспортируются только те, значение периода
которых не противоречит значению параметра Глубина
отслеживания источников в общих параметрах ИС (см.
Задание общих настроек ИС ). Период
экспортированных каналов устанавливается в циклах CALC;
(19) свой поток – пересчет в
собственном потоке (создается монитором, имеет приоритет
idle; номер потока задается атрибутом Период). Этот
тип пересчета предназначен в основном для очень больших программ.
Выполнение программы приостанавливается при выключении канала CALL
и возобновляется при последующем включении. После выполнения
программы бит 0 атрибута 46, QE (параметр b14)
принимает значение 1;
(20) CALC EXE – канал OUTPUT с таким
типом пересчета анализируется 1 раз за N циклов CALC
(N=Период), а отрабатывается при изменении значения в
следующем цикле CALC вне зависимости от атрибута Период;
(21) FAST EXE – канал OUTPUT с таким
типом пересчета анализируется 1 раз за N циклов FAST
(N=Период), а отрабатывается при изменении значения в
следующем цикле FAST вне зависимости от атрибута Период;
(22) IDLE EXE – канал OUTPUT с таким
типом пересчета анализируется 1 раз за N циклов IDLE
(N=Период), а отрабатывается при изменении значения в
следующем цикле IDLE вне зависимости от атрибута Период;
(23) день недели – в указанный день
недели (1 – воскресенье, 2 – понедельник и т.д.). Время отработки
задает ключ FRQSHF4 в файле *.cnf как число минут с начала
дня;
(24) *день недели – аналог
предыдущего, но после недельного ожидания отрабатывается чаще до
тех пор, пока не считает данные;
(25) *мин – период в минутах, ключ
FRQSHF0 в файле *.cnf задает сдвиг пересчета относительно
начала минуты (см. Задание параметров работы мониторов
);
(26) *час – период в часах, ключ
FRQSHF1 в файле *.cnf задает сдвиг пересчета относительно
начала часа;
(27) *день – период в сутках, ключ
FRQSHF2 в файле *.cnf задает сдвиг пересчета относительно
начала суток;
(28) *месяц – период в месяцах, ключ
FRQSHF3 в файле *.cnf задает сдвиг пересчета относительно
начала месяца;
(29) **мин – период в минутах.
Специфика типов 25-29. Если ответа на запрос нет, то в канале, для которого задан временной тип пересчета, отличный от 25-29, флаг аппаратной недостоверности устанавливается сразу по истечении заданного таймаута, а последующие запросы генерируются с заданным периодом. В такой же ситуации в канале с типом пересчета 25-29 флаг аппаратной недостоверности не устанавливается до следующего пересчета, а последующие запросы генерируются чаще:
25 – 1 раз за FRQ циклов CALC;
26 – 1 раз в минуту;
27 – 1 раз в минуту;
28 – 1 раз в минуту;
29 – задается монитором (в самом быстром варианте – с периодом, заданным для узла, но не чаще, чем 1 раз в секунду).
(30) по событию – канал
отрабатывается при наступлении заданного события (для указания
события нужно присвоить соответствующее значение атрибуту
Период пересчета (значение)):
1 – авторизация;
2 – завершение сеанса;
3 – авторизация и завершение сеанса;
4 – спустя 1 мин. после авторизации;
5 – спустя 2 мин. после авторизации;
6 – спустя 3 мин. после авторизации;
7 – спустя 4 мин. после авторизации;
8 – спустя 5 мин. после авторизации;
60 – спустя 1ч после авторизации;
61 – спустя 2ч после авторизации;
62 – спустя 3ч после авторизации;
63 – спустя 4ч после авторизации;
64 – спустя 5ч после авторизации.
При создании канала в ИС ему по умолчанию задается период 1 цикл CALC.
Произвольный поток для отработки может быть задан для любого канала, кроме CALL.Screen – такой канал всегда отрабатывается в соответствующем потоке вне зависимости от заданного.
Для каналов, период которых задан в циклах CALC (кроме F1, …, F4), необходимость пересчета определяется по равенству нулю остатка от деления значения системной переменной @Recalculation_Index (индекс пересчета, см. Группа СИСТЕМНЫЕ ) на период канала.
Для каналов, имеющих тип периода F1, …, F4, условие пересчета можно записать следующим образом:
(<Индекс пересчета>%5 = I) & (<Индекс пересчета>%FRQ = 0)
где
I – задержка в циклах (1, 2, 3 или 4);
FRQ – период.
Исходя из этого условия, значение периода канала 1 и размерность F1 устанавливают его пересчет один раз в 5 циклов с отставанием на 1 цикл от канала с периодом, равным 5 и размерностью цикл CALC. Каналы с периодом F2 в этих же условиях будут отставать на 2 цикла, F3 – на 3 цикла, а F4 – на 4 цикла. Значение периода 2 задает для этих каналов пересчет 1 раз в 10 циклов и т. д.