MetaKit Руководство по компонентам

xyScale — перевод значения в другую шкалу

xyScale переводит число из одной шкалы в другую. Например, задание от 0 до 100 % можно преобразовать в значение для аналогового выхода или пересчитать сигнал от 4 до 20 мА в давление от 0 до 10 бар.

Вы задаёте начало и конец обеих шкал. Компонент рассчитывает все промежуточные значения пропорционально: середине первой шкалы соответствует середина второй.

Для полноценного подключения аналогового датчика используйте Sensor: в нём есть также контроль ошибок и фильтрация. xyScale нужен, когда достаточно самого пересчёта.

Состав и связи

xyScale: Все подключения задаются в Params. Компонент вызывает функцию xyScale; отдельного экземпляра блока, Conf и View он не создаёт.
В рамке — состав компонента, снаружи — подключения проекта. Нажмите на схему, чтобы открыть её крупнее.

Все подключения задаются в Params. Компонент вызывает функцию xyScale; отдельного экземпляра блока, Conf и View он не создаёт.

Первое подключение

Заполняйте пример в таблице «Параметры» (Params) добавленного компонента. Как добавить компонент и где искать настройки.

Нужно передать задание 0–100 % в аналоговый выход со шкалой 0–27648. В этом примере именно такой диапазон ожидает выходной модуль.

1. Укажите исходное значение и результат

Параметр Значение для примера Что означает
ScaleComment Задание частоты насоса Название преобразования
ScaleX fSpeedPercent Задание частоты в процентах
ScaleOut fSpeedRaw Переменная, в которую записывается результат

В примере fSpeedPercent и fSpeedRaw — переменные типа REAL. Первую заполняет программа, вторую xyScale рассчитывает при каждом выполнении. Их нужно объявить в проекте.

2. Задайте обе шкалы

Параметр Значение для примера
ScaleXMin 0.0
ScaleXMax 100.0
ScaleYMin 0.0
ScaleYMax 27648.0
ScaleLimit true

Буква X обозначает исходную величину, Y — результат.

3. Используйте результат

Задание fSpeedPercent Результат fSpeedRaw
0 % 0
25 % 6912
50 % 13824
100 % 27648

Результат можно передать аналоговому выходу. Если переменная выходного канала имеет другой тип, преобразование типа выполняется при её подключении. xyScale возвращает REAL.

Диапазон 0–27648 приведён для примера. Для своего оборудования укажите шкалу, принятую в настройках выходного модуля.

Ограничение результата

ScaleLimit = true удерживает результат в пределах заданной выходной шкалы. В примере отрицательное задание даст 0, а задание выше 100 % — 27648.

При ScaleLimit = false пересчёт продолжается за пределами шкалы. Например, 150 % даст 41472. Такое поведение нужно, если выход за границы должен сохраняться для дальнейших вычислений.

Обратная шкала

Можно сделать так, чтобы при увеличении исходного значения результат уменьшался. Например:

Параметр Значение
ScaleXMin 0.0
ScaleXMax 100.0
ScaleYMin 100.0
ScaleYMax 0.0

Тогда 0 преобразуется в 100, 25 — в 75, а 100 — в 0. Ограничение результата работает и для такой шкалы.

Параметры компонента — Params

Параметр По умолчанию Назначение
$Scale Масштабирование Название группы параметров
ScaleComment Комментарий Название преобразования
ScaleXMin 0.0 Начало исходной шкалы
ScaleXMax 100.0 Конец исходной шкалы
ScaleYMin ADC_4_IN_0_20 Значение результата в начале исходной шкалы
ScaleYMax ADC_MAX_VALUE Значение результата в конце исходной шкалы
ScaleX 0.0 Исходное значение или выражение REAL
ScaleOut _AO_ Переменная, в которую записывается результат
ScaleLimit true Ограничивать результат пределами выходной шкалы

Исходные значения ScaleYMin и ScaleYMax используют константы библиотеки. При настройке компонента задайте границы, соответствующие вашему каналу или вычислению.

Как выполняется пересчёт

Без ограничения результат рассчитывается по формуле:

Y = YMin + (X − XMin) × (YMax − YMin) / (XMax − XMin).

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

Если ScaleXMin и ScaleXMax равны, результат будет 0.0. Поэтому для обычного пересчёта задавайте разные границы исходной шкалы.

Результат работы

Результат записывается прямо в переменную ScaleOut. В примере это fSpeedRaw.

Отдельного экземпляра функционального блока, настроек Conf и команд View xyScale не создаёт. Все подключения задаются в Params.