I. Разработка программы
MetaGen

5.2. val — показать значение блока

val связывает существующий параметр блока с данными для отображения. Так можно показать температуру после обработки, состояние насоса или положение клапана.

Рабочее значение остаётся в экземпляре блока. При включённом Publish MetaGen создаёт для него поле View и обновляет его через makeView.

Разберём это отдельно на проекте четвёртой главы. Новых переменных и алгоритмов добавлять не потребуется.

1. Найдите рабочее значение

Блок COffset уже содержит выход out_fValue:

В файле FunctionBlocks/COffset.st найдите этот фрагмент:

st
VAR_OUTPUT
    out_fValue : REAL;
END_VAR

В Inst объявлены два его экземпляра:

В файле GVL/Inst.st найдите этот фрагмент:

st
    Correct_1_Inst : COffset;
    Correct_2_Inst : COffset;

Поэтому у нас два рабочих значения: Correct_1_Inst.out_fValue для температуры подачи и Correct_2_Inst.out_fValue для температуры обратки.

В MetaCore → Онлайн выберите Correct_1_Inst. Его выход out_fValue — рабочий результат первого канала. Для начальных значений ожидается 22.0.

2. Проверьте строку Data

В компоненте Correction используется строка:

Type Mode Area Tag Value Comment Publish
REAL val Correct_|Id|_Inst out_fValue — |Label|. Результат 1
Поле Что означает в этом примере
Type Тип уже объявленного параметра — REAL
Area Имя экземпляра из Instances, который будет создан в Inst
Tag Параметр этого экземпляра — out_fValue
Value Пусто: значение формирует блок COffset
Publish Включён: результат нужен на панели

После подстановки Id = 1 сочетание Area и Tag указывает на Correct_1_Inst.out_fValue. Для Id = 2 та же строка-шаблон описывает Correct_2_Inst.out_fValue.

Описали публикацию один раз — получили её для каждого экземпляра. При добавлении третьего канала MetaGen также создаст его поле View и присваивание в makeView. Сам выход уже объявлен в COffset; строка val связывает его с данными отображения.

3. Найдите копию в View

Для первого канала создаётся поле Correct_1_Inst_out_fValue.

В файле Types/_View.st найдите этот фрагмент:

st
    Correct_1_Inst_out_fValue : REAL; // Температура подачи. Результат

Имя складывается из экземпляра и его параметра. Полное обращение для индикатора панели — View.Correct_1_Inst_out_fValue.

В MetaCore → Онлайн откройте GVL MetaGen, затем View. В поле Correct_1_Inst_out_fValue ожидается то же значение 22.0. Именно это поле будет читать индикатор.

4. Проследите обновление

В файле Functions/makeView.st найдите этот фрагмент:

st
View.Correct_1_Inst_out_fValue := Correct_1_Inst.out_fValue;

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

st
View.Correct_2_Inst_out_fValue := Correct_2_Inst.out_fValue;

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

Можно ли через это поле управлять блоком

Связь val передаёт значение из блока в View. Если записать другое число в показанное поле View, рабочий выход Correct_1_Inst.out_fValue от этого не изменится. Следующий вызов makeView снова запишет результат блока.

Для ручного задания нужен параметр управления. В следующем разделе добавим его через ref и передадим рабочее поле View в вызов блока.

Чем val отличается от out

Где объявлен выход Как описать его в Data Что получается
В функциональном блоке COffset, экземпляры которого указаны в Instances val, с именем экземпляра в Area Публикация существующего выхода Correct_1_Inst.out_fValue
Создаётся в проектном компоненте MetaGen Correction out, с пустым Area Новый выход в VAR_OUTPUT блока Correction; при включённом Publish — его копия в View

При включённом Publish в обоих случаях панель может показывать результат из View. Разница — в том, какому блоку принадлежит рабочий выход и где он объявляется.

Все режимы Mode · Далее: ref

← 5.1. global5.3. ref →