Связь 'аргумент – удаленный канал'
К аргументу может быть привязан атрибут канала, аргумент или атрибут источника/приемника.
Методы и особенности привязки аргументов описаны в разделе Табличный редактор аргументов .
Связь ’аргумент – удаленный канал’
Такая связь разрешена только для аргумента канала вызова шаблона или канала класса CALL, который предназначен для обращения к удаленному узлу.
Если аргумент канала привязан к каналу не класса CALL другого узла, то на запрашивающем узле монитор создает один или несколько каналов, для которых интерфейс связи – CHNET или CHMLINK – определяется по результатам анализа файла addr.ind (см. Файлы узла, создаваемые при экспорте ).
Имена новых каналов формируются следующим образом:
*_<номер запрашиваемого узла>_<номер запрашиваемого канала><номер запрашиваемого атрибута><I/O>
Исключением из этого правила являются каналы CALL.8, ChGroupReq (см. Канал CALL.ChGroupReq ).
В некоторых случаях имена создаваемых каналов соответствуют именам удаленных каналов, а имена, указанные выше, записываются в атрибут 80 создаваемых каналов.
Если монитор обнаруживает доступность обмена по сети, он создает один канал с интерфейсом связи CHNET, вид связи для которого устанавливается CHCS. Канал CHCS – того же класса, что и запрашиваемый канал, плюс 32 байта (255 разрядов). Номер бита, равного 1, соответствует номеру запрашиваемого атрибута. Каналы CHCS не пересчитываются, а только предоставляют данные для каналов класса CALL. В мониторе с отладкой (профайлере) такие каналы отображаются в стандартном объекте 18, N_Restored (см. Вкладка ‘Интегрированная среда разработки’ / Раздел ’Сохранить для МРВ’). Тип нового канала соответствует типу аргумента, к которому привязан запрашиваемый канал. На один компонент создается один компонент, а при записи/чтении – два (атрибуты, которые требуется читать/устанавливать, задаются в компоненте).
Если выбирается обмен по M-LINK/RS, то на все найденные сочетания
<id канала><attr><I/O>
создаются компоненты с интерфейсом связи CHMLINK и видом связи CHCOPY, класс которых соответствует запрашиваемым данным (например, если запрашиваемое значение REAL, создастся FLOAT).
Значение аргумента устанавливается для соответствующего атрибута локального канала, созданного монитором, – это следует иметь в виду при использовании связи аргумента с такими атрибутами удаленного канала, как, например, (4, I) Достоверность и (8, W) Подключение.
При связи по сети, если аргумент (arg) типа OUTPUT канала (ch) привязан к атрибуту IN удаленного канала (rem_ch), то с периодом, равным нескольким (2-3) периодам пересчета канала ch, тип arg изменяется на INPUT, у удаленного узла запрашивается значение rem_ch.IN и записывается в arg, после чего тип arg изменяется на OUTPUT. Таким образом, в случае CHNET\CHCS не только rem_ch.IN изменяется в соответствии с изменением arg, но и arg изменяется в соответствии с изменением rem_ch.IN в удаленном узле.
Передача строк и времени при связи аргумент-канал:
передача строки (только для CHNET\CHCS): у канала CALL должны быть созданы два аргумента (REAL и STRING), и оба этих аргумента должны быть привязаны к строковому атрибуту удаленного канала (аргумент REAL – вспомогательный, аргумент STRING содержит полученное строковое значение);
для передачи времени аргумент привязывается к временному атрибуту удаленного канала.
В одном узле разрешена привязка аргументов канала CALL к аргументам другого канала CALL, при этом привязываемый аргумент должен иметь ID в диапазоне 0-511.
При привязке аргументов STRING каналов CALL можно передать не более четырех символов.
При взаимодействии через аргументы каналов CALL, вызывающих шаблоны, привязка может быть задана в любом из каналов, однако проект экспортируется быстрее, если:
при взаимодействии CALL.Screen и CALL.Program привязки аргументов заданы в CALL.Screen.
В канале CALL, не вызывающем шаблон, не допускается привязка аргументов к аргументам (такие аргументы могут быть привязаны к атрибуту канала либо не иметь привязки). При взаимодействии через аргументы канала CALL, вызывающего шаблон, с каналом CALL, не вызывающим шаблон, привязка аргументов должна быть задана в первом.