Подключение jsm ($JSM)
Статья формата ObjectTypeVersion 1.0. Строка $JSM подключает jsm-шаблон ST к строкам листа UnimodFB. В старом формате то же задают пары колонок IGM.POU* / PouName* — см. UnimodFB и template.
Строка $JSM
Section titled “Строка $JSM”| A | B | C | D | E | F | G…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 в базовом Excel
Section titled “jsm в базовом Excel”$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не соберутся.
Совместимость с IGM.POU*
Section titled “Совместимость с IGM.POU*”| В манифесте | Откуда берутся jsm |
|---|---|
нет ни одной строки $JSM | по-старому, из колонок IGM.POU* / PouName* листа UnimodFB |
есть хотя бы одна строка $JSM | только из $JSM; колонки IGM.POU* / PouName* не читаются и их можно удалить |
Считаются объявленные строки: если все $JSM выключены условием, модель всё равно остаётся на новом пути и получает пустой набор jsm, а не переходит на IGM.POU*.
В обоих случаях jsm оказываются в строках UnimodFB объекта, и генераторы читают только их — отличается лишь источник.