II. Визуализация и наладка
MetaView, MetaLab и MetaCore

11. MetaLab — подать изменяющийся сигнал

Заставим вход первого канала плавно меняться и посмотрим, как на него реагирует программа. Поправку и ручной режим будем задавать с уже готового экрана MetaView.

До этого fRaw1 хранил начальное значение 20. Теперь сценарий MetaLab будет записывать в него синусоидальный сигнал от 10 до 30. Второй канал оставим как есть: его вход равен 25, результат с поправкой — 23.5.

Продолжайте проект из главы о MetaView. Блок COffset, проектный компонент MetaGen Correction и карточки менять не нужно.

1. Куда подавать сигнал

MetaLab имитирует вход программы. Поэтому записывать будем в fRaw1, с которым работает алгоритм. На экране исходное измерение отображается через View.fRaw1 — эту копию обновляет makeView().

Участник Что делает в нашем примере
MetaLab Записывает изменяющееся значение в fRaw1
MetaCore Выполняет COffset: прибавляет поправку или выдаёт ручное значение
MetaView Показывает вход и результат, передаёт настройки и команды

У строки global с тегом |Input| в Data уже включён Publish. При генерации для MetaCore адрес fRaw1 попадёт в данные для MetaLab автоматически. Отдельный импорт OPC UA XML для этого примера не нужен. В таблице ML OPC UA имя fRaw1 указывает на исходную переменную, а не на View.fRaw1. При работе через CODESYS или Siemens нужно экспортировать и исходные глобальные входы, и Conf/View; правила разобраны в разделе global.

2. Создайте пользовательский сценарий

В дереве проекта откройте меню MetaLab, выберите «Добавить компонент» и назовите его InputSine. В таблицу сценария внесите семь строк:

Object Method Tag Value Comment
factory create SimInput1 sensor —
SimInput1 set_tag fRaw1 — —
SimInput1 set_min — 10 —
SimInput1 set_max — 30 —
SimInput1 set_period — 20 —
SimInput1 sin — — —
h confirm — — Синус работает. Перейдите в MetaView, измените поправку и проверьте ручную подстановку. Нажмите «Продолжить» только после проверки.

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

Строка Что происходит
factory.create Создаёт в MetaLab имитатор аналогового сигнала с именем SimInput1
set_tag Связывает его выход с логическим входом программы fRaw1
set_min, set_max Задают нижнее и верхнее значения синуса: 10 и 30
set_period Задаёт длительность одного полного колебания — 20 секунд
sin Запускает непрерывное изменение значения
h.confirm Оставляет сценарий в ожидании, пока вы работаете с экраном

SimInput1 существует в MetaLab во время выполнения сценария. Это не новый тег ПЛК и не экземпляр функционального блока в Inst.

Таблица экспорта MetaLab здесь не нужна: мы сами написали один пользовательский сценарий и указали в нём конкретный тег. Автоматическую сборку сценариев для множества устройств разберём отдельно.

3. Сгенерируйте и запустите

  1. Сохраните проект. Выполните полную генерацию для MetaCore и скачайте MetaPlatformArtifacts.zip.
  2. В RT нажмите «+ Импорт файлов» и выберите этот архив.
  3. Запустите программу в MetaCore, загрузите артефакт визуализации в MetaView Runtime и подключитесь к MetaCore, как в предыдущей главе. Если они уже работают с тем же кодом и карточками, повторно запускать их не требуется.
  4. Откройте раздел MetaLab, выберите новый артефакт сценариев и нажмите «Загрузить».
  5. Нажмите «Из MetaCore», чтобы указать адрес нашего софт-ПЛК.
  6. Оставьте флажок «Автоматически» выключенным. Выберите InputSine и нажмите «Запустить».

В списке также будут MetaGen Init Objects и MetaGen Scenario. Это автоматически создаваемые сценарии; в нашем примере они пустые. Запускайте только InputSine.

В журнале появится сообщение «Синус работает» и кнопка «Продолжить». Оставьте сценарий в этом состоянии и перейдите в MetaView.

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

Сценарий InputSine ожидает оператора, имитация продолжает работать

4. Посмотрите реакцию программы

Откройте сцену «Измерения». Для первого канала выключите ручную подстановку и задайте поправку 2, подтвердив её по Enter.

Вход плавно меняется от 10 до 30, а результат следует за ним с поправкой 2: от 12 до 32. Второй канал остаётся постоянным.

Первый канал получает синус, второй сохраняет постоянное значение

MetaLab и MetaView обновляют данные независимо от цикла ПЛК. На движущемся сигнале вход и результат могут попасть на экран из соседних циклов, поэтому в отдельный момент разность отображаемых чисел может немного отличаться от поправки. Формулу выполняет COffset в MetaCore.

5. Измените настройку и проверьте ручной режим

Действие на первой карточке Что произойдёт
Измените поправку на 5 и нажмите Enter Вход продолжит меняться в прежних пределах, результат — от 15 до 35
Нажмите «Задать 50 °C» Ручное задание станет 50; пока включён автоматический режим, результат продолжит следовать за входом
Включите «Ручную подстановку» Результат удерживается на 50, хотя вход продолжает меняться
Нажмите «Автоматический» Результат снова следует за входом с поправкой 5

Вход продолжает меняться, ручная подстановка удерживает результат на 50

Здесь хорошо видно разделение задач. Сценарий меняет только вход. Программа ПЛК сама выбирает способ обработки. MetaView Runtime передаёт команды оператора и показывает, что получилось.

6. Завершите проверку

Вернитесь в MetaLab и нажмите «Продолжить». Сценарий завершится, синус перестанет записываться в fRaw1. Начальное значение 20 автоматически не возвращается: во входе останется последнее записанное значение.

MetaCore продолжит выполнять программу, а MetaView — показывать её данные. Чтобы повторить проверку, снова запустите InputSine. Поправка и выбранный режим при этом сами не сбрасываются: при необходимости задайте их с экрана.

Что получилось

Мы прошли весь путь: описали компонент, получили программу для двух каналов, запустили её в MetaCore, подключили визуализацию MetaView и проверили реакцию на меняющийся вход. Ни физический датчик, ни реальный контроллер для этой проверки не понадобились.

В следующей главе превратим этот сценарий в шаблон. MetaPlatform создаст имитатор для каждого канала по строкам Params, а мы проверим их совместную работу на том же экране.

← 10. MetaView: визуализация и управление12. MetaLab: один шаблон для каналов →