Документация

Руководство по MetaSCADA

Полный путь инженера: создать проект, подключить устройства, описать теги, собрать HMI, запустить Runtime и подготовить Windows-службу.

Версия документа: 10.08.2026Основание: исходный код и форматы проектаКонтур: Studio · Builder · RuntimeСтатус: инженерный пилот
01

Как устроена MetaSCADA

Платформа разделена на три поверхности. Studio редактирует исходный проект. Builder проверяет его и формирует пакет .metapkg. Runtime загружает пакет, владеет соединениями с оборудованием и отдаёт операторский интерфейс в браузер.

ЧастьЧто делаетЧего не делает
StudioПроект, экраны, компоненты, устройства, теги, диагностикаНе должна напрямую владеть рабочими Modbus/OPC UA-сессиями
BuilderВалидация, компиляция, SHA‑256, воспроизводимый пакетНе исполняет технологический процесс
RuntimeОпрос, качество, команды, аварии, история, аудит, HMIНе требует открытого Studio или браузера
Главный принцип. Визуальный дизайнер и MetaML изменяют одну Project Model. Studio и браузерный Runtime используют один renderer, поэтому экран не должен иметь две расходящиеся реализации.
02

Подготовка рабочего места

Для переносимой сборки

  • Windows x64 и распакованный архив MetaSCADA.
  • Microsoft Edge WebView2 Runtime для центрального холста Studio.
  • .NET не требуется, если сборка создана как self-contained.

Для разработки из репозитория

  • Windows и .NET SDK, совместимый с net10.0-windows.
  • Восстановленные локальные зависимости решения.
  • Права администратора нужны только для установки или обслуживания Windows-службы.
dotnet restore MetaSCADA.sln
dotnet build MetaSCADA.sln --no-restore
dotnet run --project src/MetaSCADA.Studio
Безопасность пилота. Авторизация пользователей и ролей пока отключена. Не публикуйте Runtime в открытый интернет; используйте доверенную локальную сеть и сетевую фильтрацию.
03

Быстрый старт

  1. Запустите Studio. На начальном экране выберите «Создать проект».
  2. Укажите каталог, ID и понятное имя проекта. После открытия появится рабочее пространство.
  3. Создайте устройство и канал Simulator, Modbus TCP или OPC UA. Для первого знакомства безопаснее Simulator.
  4. Добавьте теги, затем перетащите Boolean, Double или String-тег из дерева на пустой холст — Studio создаст подходящий базовый элемент.
  5. Настройте экран, свойства и привязки. Сохраните проект.
  6. Нажмите «Собрать». Исправьте ошибки из панелей «Вывод» и «Проблемы».
  7. Нажмите «Запустить». Studio пересоберёт пакет, запустит локальный Runtime, проверит /health и предложит открыть HMI.
  8. Нажмите «Онлайн», чтобы видеть реальные состояния тегов без неявной загрузки дальнейших правок.
i
Локальные портыУстановленная служба обычно использует 5080, а Studio подбирает свободный preview-порт из диапазона 5081–5180.
04

Рабочее пространство Studio

До открытия проекта Studio показывает стартовый экран с командами создания/открытия и списком последних проектов. После открытия доступны дерево проекта, палитра, документы, инспектор и нижние панели.

ОбластьНазначение
Дерево проектаУстройства, каналы, теги, экраны, компоненты, фейсплейты, изображения и переменные HMI
ПалитраСтандартные и проектные компоненты; двойной щелчок или перенос на холст
Документ«Дизайнер», XML/MetaML и разделённый вид
СвойстваГеометрия, внешний вид, прямые и динамические привязки, вкладка «События»
Нижняя панельВывод сборки, проблемы, журнал и развёртывание

Управление холстом

  • Колесо — вертикальная прокрутка; Shift+колесо — горизонтальная.
  • Ctrl+колесо — масштаб; средняя кнопка — панорама.
  • Рамка ЛКМ по свободному месту — множественное выделение.
  • Стрелки — 1 px; Shift+стрелка — 10 px.
  • Ctrl+C/V/D — копирование, вставка и дублирование; Ctrl+Z/Y — отмена и повтор.
05

Проект и его файлы

Корень проекта содержит project.xml. Экраны, компоненты и другие документы хранятся раздельно, чтобы изменения были удобны для Git и не собирались в один монолитный файл.

ProjectName/
  project.xml
  tags.xml
  screens/
    main.screen.xml
  components/
    status-panel.component.xml
  assets/
    ...
  • ID стабильны и чувствительны к регистру.
  • Пути относительны каталогу проекта и не могут выходить наружу через .. или reparse point.
  • Неизвестные элементы и атрибуты считаются ошибкой, а не игнорируются.
  • Сохранение атомарное: документы записываются до публикации обновлённого project.xml.

Операции в дереве

Через контекстное меню можно создавать, переименовывать, дублировать, перемещать и удалять элементы. Перед удалением Studio проверяет зависимости; используемый тег удалить нельзя, пока существуют ссылки.

06

Устройства и каналы протоколов

  1. В дереве создайте устройство: задайте ID, название, IP/имя узла, расположение, описание и префикс тегов.
  2. После сохранения добавьте канал. Одно устройство может иметь несколько Modbus TCP и OPC UA-каналов, включая повторные каналы одного протокола.
  3. Для Modbus задайте порт, Unit ID, период опроса и таймауты. IP остаётся свойством устройства.
  4. Для OPC UA укажите endpoint и параметры просмотра пространства адресов.
  5. Выполните диагностику подключения и только затем создавайте рабочие теги.

Modbus TCP

Поддерживаются coils, discrete inputs, holding registers и input registers. У тега настраиваются функция чтения/записи, тип, адрес, порядок байтов и регистров. Дискретные входы и Input Registers доступны только для чтения.

OPC UA

Studio просматривает адресное пространство через диагностический API Runtime. При импорте сохраняются NodeId, Namespace URI, Browse Path, исходное имя, тип, доступность и состояние проверки. Повторная синхронизация не удаляет отсутствующие теги автоматически и старается сохранить стабильный TagId по Namespace URI и Browse Path.

Почему через Runtime. Studio не создаёт вторую рабочую сессию к оборудованию. Проверка нового Modbus-тега и browse OPC UA маршрутизируются через владельца протокольных соединений — Runtime.
07

Теги, генерация и Excel

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

Типы данных: Boolean, Integer, Double и String. Для тега задаются устройство/канал, адрес, период опроса, единица, описание, writable, масштаб, смещение, test value и низкая/высокая аварийная граница.

Диапазон Modbus

  1. Откройте канал и выберите добавление тегов Modbus TCP.
  2. Задайте префиксы ID и имени, начальный адрес, количество и шаг.
  3. Генератор создаёт до 1000 тегов Holding Register / FC03 / UInt16.
  4. После генерации измените нужные элементы вручную, массово или через Excel.

Excel-обмен

Экспорт канала создаёт настоящий .xlsx без установленного Microsoft Excel. Книга содержит настройки и теги, справочник и скрытые метаданные со стабильными идентификаторами и контрольными хешами.

  1. Экспортируйте выбранное устройство или канал.
  2. Измените разрешённые колонки в книге.
  3. Импортируйте файл и изучите предварительное сравнение: добавленные, изменённые, неизменные, отсутствующие и конфликтующие строки.
  4. Выберите режим: «Только добавить», «Добавить и обновить» или «Заменить выбранную область».
  5. Для отсутствующих строк выберите: оставить, отключить или удалить.
  6. Подтвердите импорт. Он применяется транзакционно и создаёт один шаг Undo.
Пробная запись — реальная команда. Она доступна только для writable-тега, требует подтверждения и отправляется в запущенный Runtime. Выполняйте её только на безопасном оборудовании.
08

Экраны, слои и компоненты

Экран

При создании задайте ID, название и размер. Дополнительно настраиваются шаг сетки, сплошной фон или градиент с углом, рамка и скругление. Экран сохраняется как отдельный MetaML-документ.

Слои

Слой можно создать, переименовать, скрыть и заблокировать. Скрытый слой не попадает в проекцию, заблокированный отображается, но его объекты нельзя двигать и изменять мышью.

Компоненты и фейсплейты

  • Проектный компонент имеет определение и экземпляры с параметрами — содержимое не копируется в каждый экран.
  • Фейсплейт хранится отдельно, доступен в палитре и может открываться кнопкой как закрываемое модальное окно Runtime.
  • Кнопка поддерживает запись в тег, переход на экран и открытие фейсплейта.
  • PNG, JPEG и SVG импортируются как ресурсы, копируются в проект и включаются в пакет.

Базовые элементы

Текст может быть статическим или форматированным значением. «Число» совмещает индикацию и ввод; ввод включается свойством «Разрешить ввод». Дискретный индикатор показывает 0/1/нет данных, многостатусный — отображает таблицу значение=подпись=цвет.

09

MetaML и текстовое редактирование

MetaML — строгий декларативный XML-формат. Он не содержит исполняемого кода. Редактор подсвечивает синтаксис, показывает номера строк и диагностику, а изменения синхронизируются с дизайнером через Project Model.

<Screen schemaVersion="0.2" id="main"
        name="Ventilation overview"
        width="1920" height="1080" grid="10">
  <Button id="start" x="290" y="240"
          width="620" height="160"
          text="Пуск"
          command="Objects.Ventilation.Fan.Start" />
</Screen>
  • Readers принимают версии 0.1 и 0.2; новая сериализация сохраняет 0.2.
  • Вложенные проектные компоненты в формате v0.2 не разрешены.
  • Ошибки ID, ссылок, чисел, параметров и неизвестных атрибутов блокируют корректную сборку и имеют привязку к исходному файлу.
10

Привязки свойств

Привязка находится рядом с конкретным свойством объекта. Тег можно перетащить из дерева на свойство или на сам объект.

РежимКогда применять
DirectЗначение тега напрямую совместимо со свойством
BooleanMapДва результата для false/true
RangeMapРезультат зависит от числового диапазона
ValueMapЯвное сопоставление отдельных значений
GradientПлавное преобразование числа в цвет

Для динамического правила задаются fallback и политика плохого качества. Число не считается цветом автоматически: для него нужен RangeMap, ValueMap или Gradient.

Перетаскивание Boolean, Integer/Double и String-тега на пустой холст создаёт соответственно дискретный индикатор, «Число» или «Текст». На существующий элемент тег применяется только к совместимому свойству.

11

События, действия и переменные HMI

Внутренние переменные доступны через «Проект → Переменные HMI» и ветку «Системы → Переменные HMI». У выбранного объекта события настраиваются во вкладке «События»; без выбранного объекта эта вкладка относится к открытию и закрытию экрана.

События

Клик/двойной клик, нажатие и отпускание мыши, наведение и уход, фокус, изменение значения, до записи, успех/ошибка записи, открытие и закрытие экрана.

Действия

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

Порядок выполнения. Группы идут сверху вниз, действия внутри группы запускаются параллельно. Для последовательности «установить → ждать → сбросить» используйте три группы или действие «Выдать импульс».
12

Сборка и локальный запуск

«Собрать»

Studio сохраняет исходники, валидирует проект и записывает <project>/build/<project-id>.metapkg. Пакет — ZIP-контейнер со строгим manifest, тегами, Render Scene, viewer и общим renderer. Runtime проверяет версию, пути, ссылки и SHA‑256 до запуска.

«Запустить»

Команда выполняет детерминированную цепочку: сохранить → собрать → остановить только принадлежащий Studio preview → запустить новый Runtime → проверить /health → открыть браузер. Studio сверяет PID, ID проекта и хеш содержимого, поэтому старый процесс не получает статус актуального.

dotnet run --project src/MetaSCADA.Build.Cli -- build examples/ventilation artifacts/ventilation.metapkg

dotnet run --project src/MetaSCADA.Runtime -- --package artifacts/ventilation.metapkg --data artifacts/runtime-data --urls http://127.0.0.1:5080
13

Что делает Runtime

  • Верифицирует пакет до старта процессной логики.
  • Единолично владеет Simulator, Modbus TCP и OPC UA-драйверами.
  • Хранит исходное и эффективное значение, качество, время и диагностику.
  • Исполняет команды и подтверждает запись обратным чтением.
  • Ведёт Alarm Engine, SQLite historian и audit.
  • Отдаёт экраны, фейсплейты, HMI-переменные и realtime-потоки браузеру и Studio.

Закрытие браузера удаляет только клиентскую подписку. Закрытие Studio не должно останавливать установленную службу или отдельный Runtime.

ДанныеСмысл
SourceПоследнее значение, полученное от драйвера
Decoded / rawРезультат протокольного декодирования и исходные регистры/HEX
EffectiveЗначение, которое видит HMI после преобразований и возможной форсировки
QualityКачество данных и диагностическая ошибка
14

Онлайн-инжиниринг, запись и форсировка

КомандаЧто происходит
ОнлайнПодключение к работающей конфигурации без загрузки правок из редактора
ПрименитьСохранение, сборка и явная замена локальной Runtime-конфигурации без открытия браузера
ЗапуститьТо же применение, затем открытие HMI в браузере

Онлайн-наблюдатель поддерживает поиск, избранные теги и фильтрацию по устройству/каналу. Для тега видны effective, source, decoded, raw, quality, timestamp, age, адрес, последняя запись и ошибка.

Запись

  1. Runtime проверяет, что тег writable и не заблокирован форсировкой.
  2. Команда поступает единому command service и драйверу.
  3. Успех фиксируется только после совпавшего обратного чтения.
  4. При расхождении результат отмечается как отклонённый с причиной.

Форсировка

Задайте значение и при необходимости срок действия. Форсировка заменяет effective value, но опрос источника продолжается. В интерфейсе появляется замок, source остаётся виден. После снятия немедленно возвращается последнее source value. Установка/снятие и команды пишутся в аудит.

15

Развёртывание Windows Runtime

В Studio откройте нижний раздел «Развёртывание». Он отделён от верхних кнопок локального preview.

  1. Адрес Runtime. Укажите host и порт, затем нажмите «Проверить окружение». Проверяются выпуск, служба, PID и владелец порта.
  2. Подготовка выпуска. Нажмите «Собрать выпуск». Создаётся self-contained Runtime, пакет проекта, manifest и SHA‑256.
  3. Установка. Нажмите «Установить / обновить службу», подтвердите предупреждение и UAC.
  4. Проверка. Откройте Runtime по HTTPS, проверьте health, экран, команды, историю и аудит.
powershell -ExecutionPolicy Bypass `
  -File deploy/build_runtime_release.ps1 `
  -ProjectPath "C:\path\to\project"
powershell -ExecutionPolicy Bypass `
  -File deploy/install_runtime_service.ps1 `
  -ReleaseDirectory "C:\path\to\runtime-release" `
  -Urls "https://0.0.0.0:5443" `
  -HttpsCertificate "C:\secure\metascada-runtime.pfx" `
  -HttpsPassword "certificate-password"

Установщик использует неизменяемый каталог выпуска, защищает ProgramData для SYSTEM/Administrators, настраивает автоматический старт и три ступени восстановления. Если новый процесс не достигает Running, команда службы возвращается к предыдущему выпуску.

16

Backup, rollback и restore

Рабочие данные обычно находятся в C:\ProgramData\MetaSCADA\Runtime. Защитите PFX, signing key, историю команд развёртывания и резервные копии.

Откат выпуска

«Откатить» меняет указатели current/previous и команду службы, не трогая рабочие данные.

Резервная копия

Backup кратко останавливает службу, чтобы согласованно скопировать SQLite, WAL, identities и signing key, затем возвращает ранее работавшую службу в работу.

Восстановление

Restore требует явного подтверждения и прав администратора. Выполняйте его сначала на одноразовом пилотном хосте и сверяйте хеши пакета и истории.

powershell -ExecutionPolicy Bypass -File deploy/backup_runtime.ps1
powershell -ExecutionPolicy Bypass -File deploy/rollback_runtime_service.ps1
powershell -ExecutionPolicy Bypass -File deploy/restore_runtime_backup.ps1 `
  -BackupDirectory "C:\ProgramData\MetaSCADA\Backups\20260810-120000" `
  -ConfirmRestore
17

Диагностика неисправностей

СимптомПроверка
Не виден холст StudioУстановите Microsoft Edge WebView2 Runtime; затем перезапустите Studio
«Собрать» завершилось ошибкойОткройте «Вывод» и «Проблемы», исправьте MetaML, ID, ссылки и отсутствующие ресурсы
Runtime не стартуетПроверьте порт, полный журнал запуска, существование .metapkg и результат SHA‑256
Studio показывает «устарел»Проект изменён после запуска; используйте «Применить» или «Запустить»
OPC UA browse не работаетЗапустите актуальный Runtime, проверьте endpoint, TCP-доступность и доверие сертификату
Modbus значение неверноеПроверьте zero-based адрес, область, Unit ID, encoding, порядок байтов/регистров, scale и offset
Запись отклоненаПроверьте writable, активную форсировку и совпадение обратного чтения
Не получается удалить тегОткройте список использований и сначала удалите/замените привязки

Для развёртывания Studio показывает этап, native exit code, вывод системной команды и путь к полному журналу. Не пытайтесь повторять установку, пока причина предыдущего сбоя не зафиксирована.

18

Границы текущей версии

  • Пользователи, роли и права не активны; вкладка «Безопасность» — заглушка.
  • Чистый Windows-хост, reboot/recovery, восстановление копии и автоматический rollback должны пройти внешнюю приёмку.
  • Автоматические тесты драйверов не заменяют проверку с вашим ПЛК, OPC UA-сервером, сетью и сертификатами.
  • Portable-сборка подходит для редактирования и локального preview. Производственную службу разворачивайте осознанно, с администратором и планом восстановления.
  • Runtime пилотной версии следует держать в доверенном сегменте, недоступном из публичной сети.
!
Перед пилотомЗафиксируйте версию выпуска и хеши, сделайте backup, проверьте rollback, протестируйте команды на безопасном стенде и только после этого подключайте реальное оборудование.

Практика

Посмотрите готовые сценарии

Открыть примеры