I. Разработка программы
MetaGen

7. Выбор настроек и строк через выражения

Один шаблон может использовать индивидуальные или общие настройки и создавать дополнительные данные только там, где они нужны. Для этого достаточно коротких выражений в нужных ячейках.

Ниже — отдельные примеры применения встроенного интерпретатора. Добавлять все эти параметры в учебный Correction не требуется.

Выберите ID настроек

Пусть Id — ID экземпляра, а ConfId — ID назначенного набора настроек. Если ConfId не заполнен, используем собственный Id.

Id ConfId Выбранный ID
TE1 — TE1
TE2 Common Common

Тире здесь означает пустую ячейку. Для выбора запишите:

text
%ConfId or Id%

Так можно сформировать имя настройки в Data.Tag:

text
%ConfId or Id%_Offset

И обращение к ней в ST Template:

st
in_fOffset := Conf.%ConfId or Id%_Offset,

Для TE1 получится Conf.TE1_Offset, для TE2 — Conf.Common_Offset. Сам экземпляр при этом сохраняет свой ID: общие настройки не превращают несколько экземпляров в один.

Выражение только выбирает имя. Поле настройки с этим именем должно быть объявлено через conf. Для общего набора нужно согласовать одно объявление и начальное значение; выбор общего имени сам по себе не решает конфликты объявлений.

Создайте дополнительную настройку, если задан её ID

Предположим, для части каналов нужна дополнительная настройка. Добавим параметр ExtraId: непустой ID означает, что настройку нужно создать, пустая ячейка — что она не нужна.

В Data задайте строку:

Type Mode Area Tag Value
REAL %ExtraId and "conf"% — |ExtraId|_Offset 0.0

Комментарий и публикацию заполните по назначению этой настройки. При ExtraId = Reserve получится режим conf и поле Conf.Reserve_Offset. При пустом ExtraId выражение вернёт пустую строку — вся строка Data будет пропущена.

Пропуск строки задаётся пустым Mode, а не пустым Area. Остальные ячейки можно сохранить: когда появится ExtraId, та же строка снова будет участвовать в генерации.

Здесь ExtraId — текстовый идентификатор или пустая ячейка. Если условие задаётся числовым флагом Enabled со значениями 1 и 0, используйте:

text
%Enabled and "conf" or ""%

Окончание or "" превращает ложный результат в пустую строку. Без него при Enabled = 0 выражение вернуло бы 0, а такого режима Mode нет.

Если отключённая строка объявляла переменную, код не должен продолжать обращаться к ней. Для выбора ID настроек выше меняется имя существующей настройки; для необязательных данных нужно согласовать и их использование в алгоритме.

Не путайте Mode, Area и Publish

Что оставили пустым Что произойдёт
Mode Строка Data не участвует в генерации
Area у global Источник задаётся напрямую именем Tag, без префикса области
Area у conf, out, inout, static Это обычное заполнение для этих режимов: данные создаются в предусмотренном для них месте
Area у val или ref Не указан обязательный источник; строка не отключается, а требует исправления
Publish Публикация выключена. Само объявление или обработка строки зависят от её Mode

Выражение допустимо и в Area, например |SourceId|_Inst. Но результат используется как имя источника. Специального правила «пустой Area — пропустить строку» нет.

Посмотрите, что получилось

После раскрытия выражений генератор работает с обычными именами и режимами. Для разобранных примеров проверьте:

Где смотреть Что искать
Types/_Conf.st Настройку с выбранным именем, например TE1_Offset или Common_Offset
ST-файл проектного компонента Обращение к тому же полю Conf
Types/_Conf.st при пустом ExtraId Дополнительная настройка отсутствует

В исходном шаблоне остаётся одно правило, а конкретные имена и состав данных выбираются строками Params. При добавлении однотипных устройств не нужно вручную переписывать каждое объявление и обращение.

Предыдущая глава: интерпретатор · Далее: ошибки генерации

← 6. Встроенный интерпретатор8. Ошибки генерации →