Skip to content

Вызов схемы

В ячейке книги стоит текст вида

<script GAP.AUCS.Thresholds.GetThTag([TAG], 1)/>

Что здесь что:

ЧастьЧто означает
<script … />Обёртка вызова. Её видит разбор ячейки.
GAP.AUCS.Thresholds.GetThTagИмя. Конструктор ищет схему с таким именем; не нашёл — зовёт GAP.dll.
[TAG]Ссылка на столбец книги: подставится значение столбца TAG той строки, где стоит вызов.
1Постоянное значение.

Аргументы подаются по порядку: первый аргумент вызова идёт в первый вход схемы, второй — во второй. Порядок входов задаётся порядком строк в овале «Из ячейки».

Вызов бывает аргументом другого вызова:

<script AddVariable("ModuleTag", GAP.Unimodv2.GetUnimodModuleTag("[ModuleId]"))/>

Внутренний вызов считается первым и тем же путём: сначала схема, потом GAP.dll. Схема перекрывает функцию GAP и там, где вызов стоит внутри другого.

Место вызова: строка и её ПЛК

Section titled “Место вызова: строка и её ПЛК”

Схема видит, для чего её зовут. Это то же, что функция GAP получает в Data и CurrentPlcOptions.

Пункт в строке «Объекты»Что это
эта строкаКолонки строки, для которой считается ячейка: Units, TAG…
ПЛК этой строкиОпции ПЛК этой строки: SplitRegex, ComposeRegex, defaultTAMap…

Эти два источника держатся порознь, как в GAP. Слитые в один, они позволили бы колонке строки с тем же именем тихо перекрыть опцию ПЛК, а на фигуре не было бы видно, откуда взято значение.

ПЛК берётся из штампа строки, а у строки без штампа — выбранный в конфигураторе, как делает GAP.

Схема, читающая место вызова

Section titled “Схема, читающая место вызова”

Если хоть один шаг схемы читает место вызова, это меняет две вещи:

  • в графе «ВЫЗОВ» штампа появляется строка: ответ схемы по одним и тем же аргументам будет разным на строках разных объектов;
  • в овале «Из ячейки» появляется поле тега для пробного запуска. Надпись рядом: не аргумент: схема берёт строку ячейки и её ПЛК сама.

Когда считается схема: две фазы

Section titled “Когда считается схема: две фазы”
ФазаЧто доступно
Во время чтения экселейОбъектов проекта ещё нет. Так читаются ячейки, которые определяют, какие файлы будут открыты: TAG, OBJTYPENAME, Template, IOBJ, localObject, PathDevStudio.
После чтения экселейОбъекты собраны. Работают все шаги.

Вызов из шаблона .jsm: переменные шаблона

Section titled “Вызов из шаблона .jsm: переменные шаблона”

В шаблонах .jsm схему зовут первой строкой, а строки ниже подставляют заданное ею как [имя]. Так работает AddVariable у GAP:

<script AddVariable("ModuleTag", GetUnimodModuleTag("[ModuleId]"))/>
…
[ModuleTag].in.value

В конструкторе это делает шаг «Переменные шаблона».

Настройка / входЧто это
ПеременныеИмена по одному на строку, без скобок — как после них пишут в шаблоне: ModuleTag.
Строка входа [ModuleTag]Значение переменной. Строка входа называется так, как переменную потом пишут в шаблоне.
{канал} в имени переменнойЗадаёт переменную на каждое значение: имя activateStringChannel{канал} при восьми каналах даёт восемь переменных. Значение подстановки подаётся отдельным входом.

Масштаб, ради которого это сделано: около шестидесяти шаблонов на копию конфигурации заводят так одно-два имени, а шаблоны МОПС и МУПС — по два десятка разом, по имени на канал.

Шаг «Вызвать схему» зовёт другую схему как обычный шаг. Кусок, собранный один раз, работает во многих схемах — ради этого переносились функции порогов: «датчик → пороги → порог под номером» стояло копией в GetThTag, GetThData, GetThSeverity, и ещё три функции ждали того же.

ОсобенностьЧто означает
Входы называются по именам вызываемой схемыНе «Аргумент 1», «Аргумент 2». Аргументы подаются по именам: переставленные входы вызываемой схемы по порядку получили бы чужие значения, и в код ПЛК уехал бы номер уставки вместо тега.
Подпись вызова записана в самом шагеИначе фигура не знала бы своих строк, пока не прочитан весь каталог, а переименованный вход у вызываемой схемы молча уводил бы значение в пустоту. Записанное сверяется с настоящим — проверкой схемы и на счёте, — и расхождение называется словами.
«Взять входы схемы»Кнопка на фигуре: подгоняет строки вызова под текущие входы вызываемой схемы. Связи в пропавшие входы снимутся, новые строки заполняются вручную.
«Открыть схему»Открывает вызываемую схему соседней вкладкой.
Настройка «Как звать»Два значения. один раз — всё пришедшее уходит в схему одним вызовом. на каждое значение — вызов на каждое значение списка: каналы 1…8 дадут восемь ответов.

Схема-блок: «зовут из ячейки» снято

Section titled “Схема-блок: «зовут из ячейки» снято”

Схема, которая отдаёт объекты или список, из ячейки не зовётся: в ячейку уезжает текст и только текст (объект оказался бы там именем, список — первым элементом). Такая схема остаётся блоком в палитре других схем, и галка «зовут из ячейки» у неё серая.

Галку можно снять и у текстовой схемы — чтобы убрать служебный текстовый кусок из каталога для ячеек. Список для чужих должен быть короче списка для своих.