xyScale — перевод значения в другую шкалу
xyScale переводит число из одной шкалы в другую. Например, задание от 0 до 100 % можно преобразовать в значение для аналогового выхода или пересчитать сигнал от 4 до 20 мА в давление от 0 до 10 бар.
Вы задаёте начало и конец обеих шкал. Компонент рассчитывает все промежуточные значения пропорционально: середине первой шкалы соответствует середина второй.
Для полноценного подключения аналогового датчика используйте Sensor: в нём есть также контроль ошибок и фильтрация. xyScale нужен, когда достаточно самого пересчёта.
Состав и связи
Все подключения задаются в 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.