SCADA SAMUTAGSCADA SAMUTAGРуководство пользователя Открыть Studio
РуководствоШаблоны, модели и тэги

Шаблоны, модели и тэги

Наследование, композиция, экземпляры и настройка данных.

Учебный пример: насосная станция

В этом разделе последовательно создаётся структура небольшой насосной станции. Сначала опишем общие параметры насоса в шаблоне PumpBase, затем создадим два экземпляра — Pump1 и Pump2 — и разместим их в модели PumpStation1. Отдельные примеры покажут, как расширить шаблон наследованием и объединить насосы в составной объект.

На снимках показан учебный проект TrainingStation в Studio. Имена можно использовать при повторении примера в своём учебном проекте. Для подключения к контроллеру используйте его карту переменных.

ОбъектИмяНазначение
ШаблонPumpBaseОбщие тэги и настройки насоса.
ЭкземплярыPump1, Pump2Два отдельных насоса со своими значениями и привязками.
МоделиWaterSupply, PumpStation1Раздел «Водоснабжение» и вложенная насосная станция.
НаследникPumpWithReserveВариант насоса с дополнительным признаком готовности резерва.
Составной шаблонPumpGroupГруппа с вложенными насосами N1 и N2.

Шаблон как описание оборудования

Шаблон предназначен для описания одного типа объекта. В него входят тэги, скрипты и графические символы, необходимые для работы этого типа. Например, у задвижки могут быть признаки открытого и закрытого положения, авария, режим управления, команда и символ корпуса.

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

Имена тэгов, скриптов и символов внутри шаблона не должны пересекаться: все они участвуют в адресации через this. При проверке уникальности регистр не учитывается. Служебные слова языка и системные имена также нельзя назначать пользовательским объектам.

Пример: создание шаблона насоса

  1. Откройте раздел «Шаблоны». Нажмите «+» рядом с заголовком дерева или «Добавить шаблон» под деревом.
  2. Введите имя PumpBase и описание «Общие параметры насоса». В поле «Базовый шаблон» оставьте «Без базового шаблона». Не включайте признак абстрактного шаблона: в примере из PumpBase будут создаваться экземпляры.
  3. Сохраните шаблон. Для последующего изменения имени, описания или базового шаблона откройте вкладку «Свойства» его рабочей области.
  4. Перейдите на вкладку «Теги» и нажмите «+ Добавить». Создайте тэги из таблицы ниже, сохраняя каждый после заполнения.
Свойства PumpBase: имя, описание и выбор базового шаблона
Свойства сохранённого шаблона PumpBase. Слева находится дерево навигации, справа — форма настроек и кнопка «Сохранить». Нажмите на изображение, чтобы открыть его в полном размере.
ИмяТип в редактореНачальное значениеОписание
PressureFloat2.4Давление после насосов; единица измерения — бар.
RunningBooleanFalseНасос работает.
StartCommandBooleanFalseКоманда запуска насоса.
RuntimeHoursInteger0Наработка насоса; единица измерения — ч.

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

Четыре собственных тэга PumpBase и раскрытое дерево наследования
Рабочая область тэгов PumpBase. В строках видны имена, описания, типы и начальные значения. У Pressure включены ввод-вывод, история и масштабирование — это показано значками справа. Нажмите на изображение, чтобы открыть его в полном размере.

Кнопки и навигация рабочей области

Вкладки шаблона и кнопки Экспорт Excel, Импорт Excel, Добавить
Панель вкладок и команды списка тэгов. Кнопка «+ Добавить» относится к открытой вкладке: на вкладке тэгов она создаёт тэг, на вкладке графики — символ. Нажмите на изображение, чтобы открыть его в полном размере.
  • «Теги», «Графические символы», «Скрипты» открывают соответствующий состав выбранного объекта. Число рядом с названием показывает количество объектов.
  • «Вложенные шаблоны» открывает состав композиции. «Свойства» — основные настройки самого шаблона.
  • «Создать экземпляр» в верхней части рабочей области создаёт объект по текущему шаблону. «Сохранить» применяет изменения формы свойств.
  • «Экспорт Excel» и «Импорт Excel» предназначены для переноса и массового изменения тэгов.
  • «+» и «−» над деревом раскрывают и сворачивают все ветви. Стрелка у отдельной строки управляет только этой ветвью.
  • Поиск над деревом находит шаблоны или модели и экземпляры, сохраняя путь от родительских уровней до результата. Для длинных названий расширьте панель за правую границу или наведите указатель на подпись.

В дереве один щелчок выделяет строку, двойной открывает рабочую область. Правой кнопкой мыши открывается меню действий выбранного объекта. Вкладки «Наследование» и «Композиция» меняют представление дерева, а не содержимое шаблона.

Наследование и собственные определения

Производный шаблон получает определения базового. Это удобно для семейства оборудования: общая логика задаётся в базовом шаблоне, а отличия — в производных. Изменения базового определения передаются наследникам. Разрешённые локальные переопределения сохраняются.

Во вкладках тэгов, скриптов и графики собственные объекты отделены от унаследованных. Унаследованный скрипт или символ можно открыть для просмотра либо перейти к его родительскому определению и редактировать там. Во втором случае изменяется источник, поэтому результат затронет и другие использующие его объекты.

Основные поля унаследованного тэга доступны только для чтения. У блоков I/O, истории, событий, аварий и масштабирования есть собственные правила переопределения. Закрытый замок запрещает изменения ниже по цепочке, открытый разрешает локальную настройку.

Пример: насос с дополнительным признаком

  1. Создайте шаблон PumpWithReserve. В поле «Базовый шаблон» выберите PumpBase.
  2. Откройте его вкладку «Теги». Четыре тэга PumpBase уже присутствуют в разделе унаследованных — создавать их повторно не нужно.
  3. Добавьте собственный тэг ReserveReady типа Boolean с начальным значением False и описанием «Резервный насос готов к включению».
  4. Проверьте результат: ReserveReady находится над разделителем «Унаследованные тэги», а у Pressure, Running и остальных общих тэгов указан источник PumpBase.
PumpWithReserve: собственный ReserveReady и унаследованные тэги PumpBase
Собственные и унаследованные определения разделены в списке. В дереве «Наследование» PumpWithReserve находится под PumpBase — своим непосредственным базовым шаблоном. Нажмите на изображение, чтобы открыть его в полном размере.

Если требуется изменить общее описание Pressure для всех насосов, измените его в PumpBase. Если нужна индивидуальная настройка I/O у наследника или экземпляра, используйте разрешённое переопределение соответствующего блока.

Композиция и два вида имени

Композиция отвечает на вопрос «из чего состоит объект». Включение PumpBaseTemplate под локальным именем N1 означает отдельный насос внутри группы, а не наследование всей группы от насоса.

Имя определения шаблона уникально в проекте. Имя композиционного вхождения уникально внутри владельца и служит сегментом пути: this.N1.current. Эти имена независимы. Переименование определения шаблона не меняет локальные имена его композиционных вхождений.

В дереве наследования дополнительно показывается путь композиции. Это помогает различать определения N1 и N1_1, которые могут входить в разные группы под одинаковым локальным именем N1. При копировании композиции локальные имена сохраняются, чтобы относительные ссылки продолжали указывать на соответствующие объекты композиции; новые определения получают уникальные имена и сохраняют ссылки на исходные базовые шаблоны.

Пример: группа из двух насосов

  1. Создайте два шаблона N1 и N2, указав для каждого базовый шаблон PumpBase. Оба получат одинаковые общие тэги.
  2. Создайте отдельный шаблон PumpGroup без базового шаблона и откройте вкладку «Вложенные шаблоны».
  3. Найдите N1 и N2 в списке шаблонов проекта и добавьте каждый кнопкой «Вложить». Они появятся в составе группы с путями this.N1 и this.N2.
  4. В дереве слева переключитесь на «Композиция» и раскройте PumpGroup. Внутри должны быть N1 и N2. При переключении на «Наследование» эти определения показываются под PumpBase, поскольку именно от него они наследуют содержимое.
Состав PumpGroup с N1 и N2, кнопки Вложить и Убрать
Слева — включённые шаблоны с относительными путями, справа — доступные для добавления. Команда «Убрать» исключает шаблон из состава группы. Нажмите на изображение, чтобы открыть его в полном размере.

В скрипте PumpGroup обращение this.N1.Pressure означает давление первого насоса, а this.N2.Pressure — второго. При создании экземпляра группы дочерние экземпляры создаются автоматически. На снимке дерева моделей ниже экземпляр PumpGroup1 уже содержит оба насоса.

Экземпляры и модели

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

У экземпляра могут быть собственные дополнения, но унаследованные определения по-прежнему принадлежат шаблону.

Модель также поддерживает собственные тэги, скрипты и символы. Для графики модели не требуется создавать фиктивный экземпляр.

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

Пример: размещение насосов в модели

  1. Откройте раздел «Модели» и нажмите «+». Создайте модель WaterSupply с описанием «Водоснабжение» на корневом уровне.
  2. Создайте модель PumpStation1 с описанием «Насосная станция 1», выбрав WaterSupply родителем. При необходимости назначьте PumpStation1 моделью по умолчанию через её контекстное меню.
  3. Вернитесь к шаблону PumpBase и создайте два экземпляра кнопкой «Создать экземпляр». Studio назначит свободные имена. Чтобы получить имена примера, выделите экземпляр в дереве, нажмите пробел, введите Pump1 или Pump2 и подтвердите Enter.
  4. Если модель по умолчанию не назначалась, откройте PumpStation1, перейдите на вкладку «Экземпляры» и нажмите «+ Добавить». Найдите и отметьте нужные экземпляры, затем нажмите «Добавить выбранные». Экземпляр также можно перенести мышью в модель в дереве.
  5. Для проверки композиции создайте экземпляр PumpGroup, назовите его PumpGroup1 и назначьте той же модели. Раскройте его строку: дочерние насосы должны находиться внутри группы.
Дерево WaterSupply и PumpStation1 с экземплярами Pump1, Pump2 и PumpGroup1
Слева показана полная иерархия моделей и экземпляров. Справа, на вкладке «Экземпляры», перечислены три корневых объекта станции. Звёздочка у PumpStation1 обозначает модель по умолчанию. Нажмите на изображение, чтобы открыть его в полном размере.

В этом учебном примере Pump1 и Pump2 — самостоятельные экземпляры. Насосы внутри PumpGroup1 — другие, независимые экземпляры тех же базовых определений. Для реального оборудования выбирайте нужную структуру и не создавайте оба варианта для одного физического насоса без необходимости.

Проверьте результат: у Pump1 и Pump2 есть тэг Pressure, но значения и I/O-привязки настраиваются для каждого насоса отдельно. Для просмотра на узле назначьте корневую модель WaterSupply серверу приложений и загрузите проект. Далее графические символы экземпляров можно разместить в редакторе видеокадров.

Копирование ветки модели

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

Если имя оканчивается числом, нумерация продолжает существующий ряд. При наличии Boiler1, Boiler2 и Boiler3 следующая копия получает следующий свободный номер после максимального. Это правило относится и к копируемым экземплярам.

После копирования настройте I/O-привязки копии на нужное оборудование. Проверьте адреса устройств и строковые выражения, которыми скрипты формируют I/O-ссылки.

Основные свойства тэга

Для каждого тэга задайте имя, тип, начальное значение, описание, единицу измерения и доступ. Тип должен соответствовать смыслу: BOOL — состояние, целый тип — счётчик или код, вещественный — измеряемая величина, STRING — текст.

Значение по умолчанию задаёт начальное состояние тэга. Для типа String введите обычный текст. В единицах измерения можно использовать обозначения °C, м³/ч, % и другие. Цветовые и числовые форматы отображения задаются отдельно в графике.

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

Настройки тэга Pressure: тип, значение, единицы, описание и блоки конфигурации
Тэг Pressure в учебном проекте: тип Float, начальное значение 2.4 бар и описание «Давление после насосов». Настройки безопасности, аварий, истории и ввода-вывода вынесены в отдельные блоки справа. Нажмите на изображение, чтобы открыть его в полном размере.

Пример: настройка измерения давления

Предположим, что контроллер передаёт давление целым кодом от 0 до 10000, соответствующим диапазону 0…10 бар. В карте I/O-сервера PLC1 уже создана переменная Pressure. Подготовка карты описана в разделе ввода-вывода.

  1. Двойным щелчком откройте тэг Pressure в PumpBase. Укажите тип Float, единицу измерения «бар» и описание «Давление после насосов».
  2. В блоке ввода-вывода включите I/O, выберите направление «Только чтение» и переменную PLC1.Pressure. Эта ссылка должна соответствовать реальной переменной подготовленной карты.
  3. Включите масштабирование: исходный диапазон 0…10000, выходной диапазон 0…10. Тогда код 2400 будет отображаться как 2.4 бар.
  4. Включите запись истории. Для примера задайте дедбенд по значению 0.05 бар и принудительную запись раз в 60 секунд. Если поле интервала указано в миллисекундах, введите 60000.
  5. При необходимости включите аварию по качеству I/O с приоритетом 10. Она сообщит о недостоверности измерения при нарушении обмена.
  6. Сохраните настройки и вернитесь к списку тэгов. Значки справа от Pressure должны показывать включённые функции.

Для нескольких насосов задайте отдельную I/O-привязку Pressure у каждого экземпляра, если переопределение этого блока разрешено. После загрузки проекта проверьте в просмотре значений узла три контрольные точки: код 0 даёт 0 бар, 5000 — 5 бар, 10000 — 10 бар. Для появления записей в истории примените конфигурацию Historian и обновите Runtime.

Обмен, масштабирование, история и события

Ввод-вывод

Включите I/O, выберите направление и ссылку на переменную карты. В режиме раздельных ссылок чтение и запись могут обращаться к разным переменным. Для BOOL доступна инверсия; проверьте её действие на чтении и на разрешённых командах записи. Запрет записи на I/O-сервере действует и для скриптов, и для команд оператора.

Масштабирование

Укажите исходный диапазон и инженерный диапазон. Например, код 0…10000 может соответствовать 0…10 бар. Проверьте минимум, середину и максимум, а при записи — обратное преобразование. Единица измерения сама по себе значение не пересчитывает.

История

Включите запись нужных параметров и настройте условия фиксации. Дедбенд — порог изменения значения, при превышении которого формируется новая запись. Он сокращает число записей при небольших колебаниях. Принудительный интервал обеспечивает периодическую запись даже неизменного значения. После изменения конфигурации примените её к Historian и обновите Runtime.

События

Для дискретного состояния задайте тексты переходов. Событие описывает факт изменения, например «Насос запущен». События регистрируются без подтверждения оператором.

Аварии и плохое качество

Настройте условия аварии, приоритет и необходимые тексты. Числовые пределы должны соответствовать уже масштабированной величине, если в проекте используется инженерное представление. Различайте возникновение аварии, возврат в норму и подтверждение оператором: это разные переходы.

Для I/O-тэга можно включить аварию по качеству и задать её приоритет. Такая авария сообщает о недостоверности данных, а не о выходе технологического параметра за предел. Последнее значение может оставаться численно нормальным, хотя связь уже потеряна.

Для отображения недостоверных данных включите индикацию плохого качества в свойствах символа. Настройка этой индикации и настройка аварии выполняются отдельно.

Excel, дублирование и удаление

Во вкладке тэгов доступны экспорт и импорт Excel. Используйте выгруженный файл как образец колонок. Все настройки тэга расположены на одном листе; булевы настройки представлены числами 0 и 1. Сохраните текстовый формат идентификаторов и адресов, чтобы Excel не изменил их значения.

Перед импортом проверьте предлагаемые обновления существующих тэгов. При массовом изменении I/O, аварий или типов данных сначала проверьте импорт нескольких строк в копии проекта. После импорта просмотрите результат и обновите нужные узлы.

Дублирование создаёт независимый собственный тэг с новым именем. Удаление выполняется с подтверждением и показом найденных использований в скриптах. Даже после проверки статических ссылок оцените динамически сформированные имена: их смысл может зависеть от выполняемого кода.

Руководство SCADA системы SAMUTAG. © Самунов А.С. (2026)