Skip to content

Подключение jsm ($JSM)

Статья формата ObjectTypeVersion 1.0. Строка $JSM подключает jsm-шаблон ST к строкам листа UnimodFB. В старом формате то же задают пары колонок IGM.POU* / PouName* — см. UnimodFB и template.

ABCDEFG…N
$JSMфайл .jsmимя файла выводавыключательалиасы (arg1)значения (arg2, arg3, …)
  • C — файл .jsm. Обычно из общих переменных ([GLOBAL_OBJECTS_PATH], [opt.unimod]) — они раскрываются в конце парсинга, когда у объекта уже есть опции ПЛК; там же выполняются <script/>.
  • D — имя файла вывода — POU-файл, в который дописывается ST (в старом формате — колонка PouName*). Переменные здесь не раскрываются, только <script/>: раскрывшаяся переменная переименовала бы результат в действующих проектах.
  • E — выключатель, как у $FL: пусто — подключения нет. См. Выключатель.
  • F — алиасы строк UnimodFB, к которым относится jsm, через , или ; (base, pid; lmn). В jsm [template.name] — тип FB (TreiFB) этой строки.
  • G…N — значения, подставляются в {arg2}, {arg3}, … в пути, имени вывода и выключателе.
$ JSM [GLOBAL_OBJECTS_PATH]\Unimod\[opt.unimod]\pou\di_do\{arg2}.jsm assign_di 1 base Inp_Bool_apcs

Как алиасы превращаются в jsm объекта

Section titled “Как алиасы превращаются в jsm объекта”
Что в arg1Результат
один алиас, строка есть у объектаjsm в этой строке, [template.name] = её TreiFB
несколько алиасовпо блоку на каждую строку объекта из списка, у каждого свой [template.name]
алиас есть в UnimodFB, но шаблон эту строку не выбралjsm нет, без сообщений
алиаса нет в UnimodFB (опечатка)jsm нет + Error, один раз на строку за прогон
значений у строки нет вовсеjsm в первой строке объекта + Warn, один раз на строку за прогон

Дубли внутри строки (тот же путь + то же имя вывода, без учёта регистра) отбрасываются — иначе блок попал бы в POU дважды. Тот же jsm в разных строках UnimodFB — не дубль: у них разный [template.name].

$JSM можно писать и в подключённом листе — набор jsm выносится в базу и переиспользуется, а {argN} приходят из строки $FL, подключившей лист:

Манифест: $ FL Jsm-di_do.xlsx Ch.di 1 base Inp_Bool_apcs
В базе: $ JSM …\pou\di_do\{arg2}.jsm assign_di 1 {arg1}

{arg1} в F раскроется в base, {arg2} в пути — в Inp_Bool_apcs. Удобно держать в $FL тот же порядок, что у $JSM: алиас первым.

  • Собственные значения строки $JSM главнее аргументов подключения: своё arg1 закрывает {arg1} строки $FL.
  • Если у $JSM в базе своих значений нет, jsm уходит к первой строке объекта (с предупреждением). Чтобы привязать явно — передайте алиас, как в примере выше.
  • Внутрь выключенного $FL парсер не заходит — объявленные там $JSM не соберутся.
В манифестеОткуда берутся jsm
нет ни одной строки $JSMпо-старому, из колонок IGM.POU* / PouName* листа UnimodFB
есть хотя бы одна строка $JSMтолько из $JSM; колонки IGM.POU* / PouName* не читаются и их можно удалить

Считаются объявленные строки: если все $JSM выключены условием, модель всё равно остаётся на новом пути и получает пустой набор jsm, а не переходит на IGM.POU*.

В обоих случаях jsm оказываются в строках UnimodFB объекта, и генераторы читают только их — отличается лишь источник.