Вызов схемы
Вызов из ячейки
Section titled “Вызов из ячейки”В ячейке книги стоит текст вида
<script GAP.AUCS.Thresholds.GetThTag([TAG], 1)/>Что здесь что:
| Часть | Что означает |
|---|---|
| <script … /> | Обёртка вызова. Её видит разбор ячейки. |
| GAP.AUCS.Thresholds.GetThTag | Имя. Конструктор ищет схему с таким именем; не нашёл — зовёт GAP.dll. |
| [TAG] | Ссылка на столбец книги: подставится значение столбца TAG той строки, где стоит вызов. |
1 | Постоянное значение. |
Аргументы подаются по порядку: первый аргумент вызова идёт в первый вход схемы, второй — во второй. Порядок входов задаётся порядком строк в овале «Из ячейки».
Вложенные вызовы
Section titled “Вложенные вызовы”Вызов бывает аргументом другого вызова:
<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. |
| После чтения экселей | Объекты собраны. Работают все шаги. |
Отложенный счёт
Section titled “Отложенный счёт”Вызов из шаблона .jsm: переменные шаблона
Section titled “Вызов из шаблона .jsm: переменные шаблона”В шаблонах .jsm схему зовут первой строкой, а строки ниже подставляют заданное ею как [имя]. Так работает AddVariable у GAP:
<script AddVariable("ModuleTag", GetUnimodModuleTag("[ModuleId]"))/>…[ModuleTag].in.valueВ конструкторе это делает шаг «Переменные шаблона».
| Настройка / вход | Что это |
|---|---|
| Переменные | Имена по одному на строку, без скобок — как после них пишут в шаблоне: ModuleTag. |
| Строка входа [ModuleTag] | Значение переменной. Строка входа называется так, как переменную потом пишут в шаблоне. |
| {канал} в имени переменной | Задаёт переменную на каждое значение: имя activateStringChannel{канал} при восьми каналах даёт восемь переменных. Значение подстановки подаётся отдельным входом. |
Масштаб, ради которого это сделано: около шестидесяти шаблонов на копию конфигурации заводят так одно-два имени, а шаблоны МОПС и МУПС — по два десятка разом, по имени на канал.
Вызов схемы из схемы
Section titled “Вызов схемы из схемы”Шаг «Вызвать схему» зовёт другую схему как обычный шаг. Кусок, собранный один раз, работает во многих схемах — ради этого переносились функции порогов: «датчик → пороги → порог под номером» стояло копией в GetThTag, GetThData, GetThSeverity, и ещё три функции ждали того же.
| Особенность | Что означает |
|---|---|
| Входы называются по именам вызываемой схемы | Не «Аргумент 1», «Аргумент 2». Аргументы подаются по именам: переставленные входы вызываемой схемы по порядку получили бы чужие значения, и в код ПЛК уехал бы номер уставки вместо тега. |
| Подпись вызова записана в самом шаге | Иначе фигура не знала бы своих строк, пока не прочитан весь каталог, а переименованный вход у вызываемой схемы молча уводил бы значение в пустоту. Записанное сверяется с настоящим — проверкой схемы и на счёте, — и расхождение называется словами. |
| «Взять входы схемы» | Кнопка на фигуре: подгоняет строки вызова под текущие входы вызываемой схемы. Связи в пропавшие входы снимутся, новые строки заполняются вручную. |
| «Открыть схему» | Открывает вызываемую схему соседней вкладкой. |
| Настройка «Как звать» | Два значения. один раз — всё пришедшее уходит в схему одним вызовом. на каждое значение — вызов на каждое значение списка: каналы 1…8 дадут восемь ответов. |
Схема-блок: «зовут из ячейки» снято
Section titled “Схема-блок: «зовут из ячейки» снято”Схема, которая отдаёт объекты или список, из ячейки не зовётся: в ячейку уезжает текст и только текст (объект оказался бы там именем, список — первым элементом). Такая схема остаётся блоком в палитре других схем, и галка «зовут из ячейки» у неё серая.
Галку можно снять и у текстовой схемы — чтобы убрать служебный текстовый кусок из каталога для ячеек. Список для чужих должен быть короче списка для своих.