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. Сгенерируйте и запустите
- Сохраните проект. Выполните полную генерацию для MetaCore и скачайте
MetaPlatformArtifacts.zip. - В RT нажмите «+ Импорт файлов» и выберите этот архив.
- Запустите программу в MetaCore, загрузите артефакт визуализации в MetaView Runtime и подключитесь к MetaCore, как в предыдущей главе. Если они уже работают с тем же кодом и карточками, повторно запускать их не требуется.
- Откройте раздел MetaLab, выберите новый артефакт сценариев и нажмите «Загрузить».
- Нажмите «Из MetaCore», чтобы указать адрес нашего софт-ПЛК.
- Оставьте флажок «Автоматически» выключенным. Выберите
InputSineи нажмите «Запустить».
В списке также будут MetaGen Init Objects и MetaGen Scenario. Это автоматически создаваемые сценарии; в нашем примере они пустые. Запускайте только InputSine.
В журнале появится сообщение «Синус работает» и кнопка «Продолжить». Оставьте сценарий в этом состоянии и перейдите в MetaView.
Пока проверяете экран, не нажимайте «Продолжить». Ожидает только последовательность шагов: имитатор уже работает и продолжает записывать синус. После завершения сценария имитация остановится. В режиме «Автоматически» ожидание было бы пропущено и сценарий сразу завершился бы.

4. Посмотрите реакцию программы
Откройте сцену «Измерения». Для первого канала выключите ручную подстановку и задайте поправку 2, подтвердив её по Enter.
Вход плавно меняется от 10 до 30, а результат следует за ним с поправкой 2: от 12 до 32. Второй канал остаётся постоянным.

MetaLab и MetaView обновляют данные независимо от цикла ПЛК. На движущемся сигнале вход и результат могут попасть на экран из соседних циклов, поэтому в отдельный момент разность отображаемых чисел может немного отличаться от поправки. Формулу выполняет COffset в MetaCore.
5. Измените настройку и проверьте ручной режим
| Действие на первой карточке | Что произойдёт |
|---|---|
Измените поправку на 5 и нажмите Enter |
Вход продолжит меняться в прежних пределах, результат — от 15 до 35 |
| Нажмите «Задать 50 °C» | Ручное задание станет 50; пока включён автоматический режим, результат продолжит следовать за входом |
| Включите «Ручную подстановку» | Результат удерживается на 50, хотя вход продолжает меняться |
| Нажмите «Автоматический» | Результат снова следует за входом с поправкой 5 |

Здесь хорошо видно разделение задач. Сценарий меняет только вход. Программа ПЛК сама выбирает способ обработки. MetaView Runtime передаёт команды оператора и показывает, что получилось.
6. Завершите проверку
Вернитесь в MetaLab и нажмите «Продолжить». Сценарий завершится, синус перестанет записываться в fRaw1. Начальное значение 20 автоматически не возвращается: во входе останется последнее записанное значение.
MetaCore продолжит выполнять программу, а MetaView — показывать её данные. Чтобы повторить проверку, снова запустите InputSine. Поправка и выбранный режим при этом сами не сбрасываются: при необходимости задайте их с экрана.
Что получилось
Мы прошли весь путь: описали компонент, получили программу для двух каналов, запустили её в MetaCore, подключили визуализацию MetaView и проверили реакцию на меняющийся вход. Ни физический датчик, ни реальный контроллер для этой проверки не понадобились.
В следующей главе превратим этот сценарий в шаблон. MetaPlatform создаст имитатор для каждого канала по строкам Params, а мы проверим их совместную работу на том же экране.