5.2. val — показать значение блока
val связывает существующий параметр блока с данными для отображения. Так можно показать температуру после обработки, состояние насоса или положение клапана.
Рабочее значение остаётся в экземпляре блока. При включённом Publish MetaGen создаёт для него поле View и обновляет его через makeView.
Разберём это отдельно на проекте четвёртой главы. Новых переменных и алгоритмов добавлять не потребуется.
1. Найдите рабочее значение
Блок COffset уже содержит выход out_fValue:
В файле FunctionBlocks/COffset.st найдите этот фрагмент:
VAR_OUTPUT
out_fValue : REAL;
END_VAR
В Inst объявлены два его экземпляра:
В файле GVL/Inst.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 найдите этот фрагмент:
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 найдите этот фрагмент:
View.Correct_1_Inst_out_fValue := Correct_1_Inst.out_fValue;
После выполнения алгоритма makeView копирует рабочий результат в поле для отображения. Для второго экземпляра генератор создаёт отдельную такую же связь:
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. Разница — в том, какому блоку принадлежит рабочий выход и где он объявляется.