ObjectTypeVersion 1.0 (маркеры $FL)
С Uniplant Atomix 1.6.3.0 модель OBJTYPE может работать в формате ObjectTypeVersion 1.0: на листе шаблона с префиксом Tmpl. строки $FL подключают листы данных (Ch.*, DevSt.*, HMI.*, …) — из этого же файла (this) или из базовых Excel библиотеки. Без листа system с ObjectTypeVersion модель обрабатывается по прежним правилам. Результаты генерации от формата не зависят.
Состав OBJTYPE
Section titled “Состав OBJTYPE”Один Excel-файл типового блока:
| Лист | Назначение |
|---|---|
system | обязателен — включает формат: $ | VQ | ObjectTypeVersion | 1.0 |
| лист шаблона | обязателен (минимум один); имя с префиксом Tmpl. (напр. Tmpl.CC); суффикс = TemplateName: конфиг, $LST, строки $FL |
| UnimodFB | нужен, если планируется работа с Unimod |
| листы данных | как в старом формате: DevSt.*, HMI.*, HMIS.*, … плюс новый Ch.* — параметры каналов |
Лист данных в OBJTYPE и лист, подключённый $FL из другого файла — одно и то же по формату. Разница только в источнике: $FL с this берёт лист из этого OBJTYPE, $FL с путём — из базового Excel библиотеки.

Лист шаблона
Section titled “Лист шаблона”| Маркер (кол. B) | Назначение | Колонки |
|---|---|---|
| VQ | конфиг OBJTYPE | C = ключ, D = значение |
| LST | список | C = ключ, D…N = элементы |
| FL | подключить лист данных (Ch.* / DevSt.* / HMI.* / …) | C = файл или this, D = лист, E…N = аргументы по позиции |
Набор объектов задают строки $FL, а не списки. Из $LST обычно нужен только TechObject.UnimodAliases. Списки devStudioTemplates, HmiIcons, StaburIconTemplates в этом формате не используются.
Строка $FL
Section titled “Строка $FL”| A | B | C | D | E…N |
|---|---|---|---|---|
$ | FL | файл или this | полное имя листа с префиксом | аргументы по позиции |
- C — путь к Excel (
%JSC%\…,%Self%\…) илиthis(тот же лист данных, но лежащий в этом OBJTYPE). Инстансные[TAG]в путь не ставятся — только в E…N. - D — имя листа с префиксом вида (
Ch./DevSt./HMI./HMIS.). Без известного префикса подключение пропускается. - E…N — значения аргументов: позиция →
{arg1},{arg2}…; первые позиции каждого вида имеют семантические имена (таблица ниже).
Обязательные аргументы:
| Вид листа | E (arg1) | F (arg2) | G (arg3) |
|---|---|---|---|
| Ch.* | alias | DsTemplate | — |
| DevSt.* | DevStudioTemplate | DevStudioPath | DevStudioName |
| HMI.* | arg | — | — |
| HMIS.* | только {argN} |
Один лист можно подключать несколько раз с разными значениями. У каждого $FL на DevSt.* свой уникальный DevStudioTemplate (arg1).
Внутри листа данных аргументы видны как {имя} (семантическое или {argN}). Непереданное значение остаётся буквально {имя} — в лог не пишется; сверяйте результат сборки.
| Запись | Откуда |
|---|---|
| [имя], %имя% | настройки JSC / экземпляр |
| {имя} | аргумент этой строки $FL (только в подключённом листе) |
Сначала подставляются {…}, затем […] / %…%. Подробнее: Внешние переменные.
Листы данных (Ch.*, DevSt.*, …)
Section titled “Листы данных (Ch.*, DevSt.*, …)”Формат листа не зависит от того, лежит он в библиотеке или в OBJTYPE:
| Префикс | Содержимое | Плейсхолдеры |
|---|---|---|
| Ch.* | новый в 1.0: параметры каналов (#/H/d) | {alias}, {DsTemplate} |
| DevSt.* | $VQ тип/путь/имя → $ATTFL → атрибуты | {DevStudioPath}, {DevStudioName} |
| HMI.* | $VQ HmiType → $ATTFL → опции | {arg} |
| HMIS.* | $VQ Lib, $VQ HmiType → опции | только {argN} |
$ATTFL (C = файл, D = лист) — общая вставка атрибутов/опций внутри листа DevSt.* / HMI.*: результат = строки из $ATTFL + локальные строки.
Связи:
- канал ↔ DevStudio:
DsTemplateканала (arg2) =DevStudioTemplateобъекта (arg1); - канал ↔ Unimod:
aliasканала (arg1) ∈$LST TechObject.UnimodAliases.
Листы DevSt.*
Section titled “Листы DevSt.*”В новом формате каждый объект DevStudio — отдельный лист DevSt.* (в OBJTYPE или в библиотеке). Подключение — строка $FL на Tmpl.* (не список devStudioTemplates). На листе — метаданные объекта и атрибуты.
Переменная (строка $ | VQ | …) | Назначение |
|---|---|
| TechObject.devStudioType | тип объекта DevStudio |
| TechObject.devStudioPath | путь (родительский узел); часто {DevStudioPath} из $FL |
| TechObject.devStudioName | имя объекта; часто {DevStudioName} из $FL |
| Полный путь | devStudioPath.devStudioName (части через .) |
строки d | attrName, attrValue — атрибуты этого объекта |
На листе шаблона Tmpl.* не задают TechObject.devStudioType / …Path / …Name и не используют $LST TechObject.devStudioTemplates — всё задаётся на листе DevSt.* и аргументами $FL.
Один шаблон может подключать несколько объектов — по одной строке $FL на каждый; у каждой свой уникальный DevStudioTemplate (arg1).
Пример листа DevSt.DiCC
Section titled “Пример листа DevSt.DiCC”На листе DevSt.DiCC вверху — метаданные объекта ($ | VQ | TechObject.devStudio…), ниже — таблица атрибутов (attrName, attrValue) со строками d. Путь и имя могут включать внешние переменные и литералы (суффикс ADD в пути, CC в имени) либо плейсхолдеры {DevStudioPath} / {DevStudioName} из $FL:

Рис. — DevSt.DiCC.
| Переменная / attrName | Значение | Комментарий |
|---|---|---|
TechObject.devStudioType | DiCC | тип объекта в DevStudio |
TechObject.devStudioPath | [PathDevStudio].[TAG] ADD | родительский узел |
TechObject.devStudioName | [TAG] CC | имя создаваемого объекта |
unit.CommonLib.Attributes.DevParams.SystemTag | <script GAP.ScadaProjectBase.Tags.GetPrjTag([TAG])/> | системный тег (преобразование через GAP) |
unit.System.Attributes.Title | [parentDescr] | заголовок объекта |
Старый формат с одним DevSt.attributes — Листы DevSt.*.
Как создать OBJTYPE
Section titled “Как создать OBJTYPE”Обязательны: лист system и хотя бы один лист шаблона Tmpl.*. Для работы с Unimod — ещё лист UnimodFB.
- Excel в
Models\ObjTypes\…. - Лист
system:$ | VQ | ObjectTypeVersion | 1.0. - Лист шаблона
Tmpl.*(минимум один; суффикс =TemplateName):$VQ-конфиг, при необходимости$LST UnimodAliases, на каждое подключение —$FL. - Листы данных (
Ch.*, при необходимостиDevSt.*/HMI.*) — в OBJTYPE и$FLсthis, либо в библиотеке и$FLс путём к файлу. - Если нужен Unimod — лист
UnimodFB. - Проверить позиции аргументов и совпадение
DsTemplate↔DevStudioTemplate. - Сохранять только через Excel.
Пример: ESD_VlvSDV
Section titled “Пример: ESD_VlvSDV”Лист system:
| A | B | C | D |
|---|---|---|---|
$ | VQ | ObjectTypeVersion | 1.0 |
Лист шаблона Tmpl.CC:
| A | B | C | D | E | F | G |
|---|---|---|---|---|---|---|
| $ | VQ | TechObject.modbusTemplate | ESD_VlvSDV | |||
| $ | LST | TechObject.UnimodAliases | base | Close | Open | MV |
| $ | FL | CCB.xlsx | Ch.CCB | Open | DiCC_Open | |
| $ | FL | CCB.xlsx | Ch.CCB | Close | DiCC_Close | |
| $ | FL | DoCCM_x2.xlsx | Ch.DoCCM_x2 | MV | MV_CC | |
| $ | FL | this | Ch.Vlv | base | VlvSDV | |
| $ | FL | DiCC.xlsx | DevSt.DiCC_ССВ | DiCC_Open | [PathDevStudio].[TAG]_ADD | [TAG]_Open_CC |
| $ | FL | DiCC.xlsx | DevSt.DiCC_ССВ | DiCC_Close | [PathDevStudio].[TAG]_ADD | [TAG]_Close_CC |
| $ | FL | CC_M2.xlsx | DevSt.MV_CC | MV_CC | [PathDevStudio].[TAG]_ADD | [TAG]_MV_CC |
| $ | FL | VlvSDV.xlsx | DevSt.VlvSDV | VlvSDV | ||
| $ | FL | Hmi-VlvSDV.xlsx | HMI.Icon_VlvSDV | |||
| $ | FL | Hmi-Trip.xlsx | HMI.Trip | |||
| $ | FL | Hmi-CE_Effect.xlsx | HMI.CE_Effect | VlvSDV |
Сборка: каналы base/Open/Close/MV, объекты DevStudio с подставленными путём/именем, иконки HMI; канал Open связан с DiCC_Open по общему ключу DiCC_Open.
Фрагмент листа DevSt.DiCC_ССВ после подстановки из $FL выше:
| A | B | C | D |
|---|---|---|---|
| $ | VQ | TechObject.devStudioPath | {DevStudioPath} |
| $ | VQ | TechObject.devStudioName | {DevStudioName} |
| $ | ATTFL | %Self%\attibutes\BasePlcObjAttr.xlsx | base-plc-attr |
Ошибки
Section titled “Ошибки”| Ситуация | Поведение |
|---|---|
Нет system / пуст ObjectTypeVersion | старая обработка, $FL игнорируются |
| Лист без известного префикса | пропуск + Warn |
| Файл или лист не найден | пропуск + Error |
Осталась {переменная} | как есть, без записи в лог |
Два DevStudio с одним DevStudioTemplate | Warn, привязка каналов неоднозначна |
| Циклическое подключение | защита + Warn |