7. Выбор настроек и строк через выражения
Один шаблон может использовать индивидуальные или общие настройки и создавать дополнительные данные только там, где они нужны. Для этого достаточно коротких выражений в нужных ячейках.
Ниже — отдельные примеры применения встроенного интерпретатора. Добавлять все эти параметры в учебный Correction не требуется.
Выберите ID настроек
Пусть Id — ID экземпляра, а ConfId — ID назначенного набора настроек. Если ConfId не заполнен, используем собственный Id.
| Id | ConfId | Выбранный ID |
|---|---|---|
TE1 |
— | TE1 |
TE2 |
Common |
Common |
Тире здесь означает пустую ячейку. Для выбора запишите:
%ConfId or Id%
Так можно сформировать имя настройки в Data.Tag:
%ConfId or Id%_Offset
И обращение к ней в ST Template:
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, используйте:
%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. При добавлении однотипных устройств не нужно вручную переписывать каждое объявление и обращение.