Запрос удаленного индивидуального архива

Для запроса по M-LINK (в том числе через модем) или I-NET удаленных индивидуальных архивов используются каналы CALL INPUT с типами вызова (47) RemArc0 и (48) RemArc1 и типом пересчета цикл IDLE (ограничения на максимальное число передаваемых данных указаны в разделе Особенности взаимодействия ). Сетевой протокол передачи по умолчанию – UDP, может быть изменен на TCP с помощью ключа IPALTR в файле *.cnf (см. Задание параметров работы мониторов ).

В течение одной отработки канал CALL.RemArc0 запрашивает несколько удаленных индивидуальных архивов и записывает полученные данные в локальные архивы SIAD, в то время как канал CALL.RemArc1 запрашивает только один удаленный индивидуальный архив без записи полученных данных в локальный архив SIAD.

Конфигурация узла, содержащего канал CALL.RemArc0 или CALL.RemArc1:

   если в узле нет каналов CALL.RemArc0, конфигурирование архивов SIAD для него в общем случае не обязательно, в противном случае необходимые архивы SIAD должны быть сконфигурированы, и их использование должно быть разрешено;

   для узла должен быть сконфигурирован соответствующий обмен;

   узел должен содержать один или несколько вспомогательных каналов типа INPUT (loci), в каждом из которых:

   должна быть задана привязка к атрибуту 0,R или 140,ARG00 удаленного индивидуального архива, данные которого требуется запрашивать;

Если канал CALL – индивидуальный архив некоторого канала ch – уничтожается монитором (см. Индивидуальный архив ), в соответствующем loci должна быть задана привязка к ch.R.

   должно быть задано архивирование в один из сконфигурированных архивов SIAD (не требуется для CALL.RemArc1).

Конфигурация канала CALL.RemArc0 / CALL.RemArc1:

   тип – INPUT;

   тип пересчета – цикл IDLE;

   в ИС в канале CALL.RemArc0 должна быть задана привязка к произвольному удаленному каналу; эта привязка определяет начальный узел, у которого канал будет запрашивать индивидуальные архивы. Для переключения канала CALL.RemArc0 на запрос индивидуальных архивов другого узла нужно в реальном времени присвоить порядковый номер узла (ordinal) атрибуту 92, I2 канала.

В ИС в канале CALL.RemArc1 должна быть задана привязка к одному из каналов loci; эта привязка определяет начальный индивидуальный архив (и одновременно узел), у которого канал будет запрашивать данные. Для переключения на запрос другого индивидуального архива (в том числе другого узла) нужно в реальном времени присвоить ID соответствующего канала loci атрибуту 89, L0 канала CALL.RemArc1.

В реальном времени атрибуты 89 и 92 индицируют соответственно ID привязанного канала loci и ordinal запрашиваемого узла;

   аргументы arg0 и arg1 канала CALL.RemArc0 / CALL.RemArc1 должны иметь тип данных DATE_AND_TIME. Эти аргументы формируются в зависимости от битов 1 и 2 атрибута Параметр и задают временной диапазон выборки из полученных данных для дальнейшей записи в файлы:

   если биты 1 и 2 равны 0, в arg0 записывается время исчезновения, а в arg1 – время появления узла (для фиксации времени используется собственный алгоритм канала);

   если бит 2 равен 1, arg1 может быть задан вручную;

   если бит 1 равен 1, arg0 может быть задан вручную;

   если биты 1 и 2 равны 1, а arg0 и arg1 не заданы (arg0 = arg1 = 0), то arg0 = @Status.T_Loss, arg1 = @Status.T_Detection (см. описание переменной @Status в разделе Группа СИСТЕМНЫЕ );

   если биты 1 и 2 равны 1, а заданные значения arg0 и arg1 не превышают числа секунд в году, то

arg1 = <текущее время> – <заданное значение arg1>

arg0 = arg1 – <заданное значение arg0>

   начиная с arg2, аргументы CALL.RemArc0 / CALL.RemArc1 создаются парами. В четные аргументы (соответствующего числового типа данных) записываются запрошенные архивные значения, в нечетные (DATE_AND_TIME) – метки времени этих значений.

Канал CALL.RemArc0 / CALL.RemArc1 работает следующим образом (состояние канала в процедуре индицируют атрибуты (86, nAtrt) и (7,P)):

   в начальном состоянии (0) канал проверяет наличие указанного удаленного узла. Если удаленный узел отсутствует, канал переходит в состояние 1;

   при переходе удаленного узла в состояние WORK канал переходит в состояние 2. В этом состоянии инициализируются внутренние переменные канала, и он переходит в состояние 3 (если удаленный узел "пропадает", канал переходит в состояние 0);

   в состоянии 3 при значении канала, отличном от 0, формируется запрос удаленного индивидуального архива:

   в случае CALL.RemArc0, среди loci ищется канал с младшим ID (пусть его имя – locA), связанный с индивидуальным архивом указанного узла, формируется запрос этого архива, а для канала locA устанавливается признак игнорирования в последующем поиске;

Если последний символ кодировки CALL.RemArc0 – звездочка, то locA выбирается в том случае, если первые символы кодировки удаленного индивидуального архива совпадают с кодировкой CALL.RemArc0 (до знака звездочки).

   в случае CALL.RemArc1 (пусть к нему привязан locB), формируется запрос того индивидуального архива, который привязан к locB.

После формирования запроса канал CALL.RemArc0 / CALL.RemArc1 переходит в состояние 4 (канал принимает значение 17). Если необходимые каналы среди loci не найдены, канал CALL.RemArc0 / CALL.RemArc1 переходит в состояние 0, и его значение обнуляется;

   в состоянии 4 в аргументы канала CALL.RemArc0 / CALL.RemArc1 копируются данные удаленного индивидуального архива, и из полученных данных производится выборка в диапазоне arg0<t<arg1, которая в случае CALL.RemArc0 записывается в тот же архив SIAD, в который архивируется locA. Кроме того, если бит 6 (0x40) атрибута Параметр канала CALL.RemArc0 / CALL.RemArc1 равен 1, выборка записывается в текстовый файл locA.dra/locB.dra.

Для отмены проверки времени при записи в SIAD и файлы *.dra нужно установить бит 7 (0x80) атрибута Параметр (34, FPrnt) канала CALL.RemArc0 / CALL.RemArc1.

   после получения данных в канале CALL.RemArc0 устанавливается бит 4 (0x10) атрибута 46, QE, и канал переходит в состояние 3 (в случае сбоя – через промежуточное состояние 7, т.е. 4-7-3) для поиска очередного канала loci. МРВ переходит к поиску следующего канала также в том случае, если в течение заданного таймаута получить архив не удалось (в этом случае признак недостоверности в канале CALL.RemArc0 не устанавливается). Таймаут задается в файле *.cnf (ключи ARCHT_NET и ARCHT_RS – см. Задание параметров работы мониторов ).

После получения данных отработка канала CALL.RemArc1 завершается (канал запрашивает только один архив).

Число полученных архивов индицирует атрибут 2, A канала CALL.RemArc0 / CALL.RemArc1.