Найти в Дзене
Adventory

Как с помощью LOGO! пересчитать показания датчика расхода с явной нелинейностью выходного сигнала?

Из общения с пользователями LOGO! возник один интересный вопрос: Как пересчитать показания датчика расхода, имеющего явную нелинейность выходного сигнала?

У LOGO! есть блоки с четырьмя арифметическими действиями и четырьмя членами выражения. Сразу приходит идея использовать каскадирование блоков, но создавать громоздкие вычислительные конструкции очень неудобно, да и точность вычислений получится не очень высокая. С другой стороны можно использовать более красивое решение с кусочно линейной аппроксимацией. В инструкции к датчику был приведён примерно такой график выходного сигнала в зависимости от расхода, как на рисунке ниже.

Из графика сразу видна явная нелинейность в средней части - фнукция заметно «провисает» и, если взять за основу напряжение, точность отображения расхода будет очень невысокой. А нужно отображать именно расход, а не напряжение с датчика.

Самым простым визуальным методом, буквально линеечкой, определяем четыре кусочка функции х:у 0:0 250;75 500;250 750;550 и 1000;1000 на которые можно разбить имеющуюся кривую и определяем, где будем сшивать график. По простой формуле получаем четыре отрезка – линейные уравнения

  1. Y=0,3*X;
  2. Y=0,7*X-100;
  3. Y=1,2*X-350;
  4. Y=1,8*X-800.

А дальше делаем небольшую программу в LOGO! Ssoft Comfort, как на картинке ниже.

-2

К аналоговому источнику сигнала (аналоговый вход AI1) присоединяем четыре компаратора, каждый из которых пропускает сигнал на свой вычислительный блок, в который введено уравнение, пересчитывающее значение сигнала датчика в заданном интервале. А дальше суммируем полученные четыре числа. Три числа всегда будут равны нулю (компараторы не дают сработать вычислительному блоку), а четвёртое число — это пересчитанное значение в текущем интервале.

ВАЖНО! Главное, не запутаться в границах, они должны пересекаться, иначе в этих точках функция получит ноль.

Одного блока вычислений достаточно на одно линейное уравнение, так как коэффициенты могут быть только целыми и для умножения, к примеру на 0,3 нужно умножить на 3 а потом разделить на 10 (таким образом задаём десятичные дроби). Дробная часть будет округляться и результат из блока выйдет в виде целого числа. И тоже важно учесть, что необходимо напрямую задавать порядок выполнения действий так как вычислительный блок не делает различий между сложением и умножением, а выполняет действия строго в порядке заданного приоритета.

В принципе при использовании других функций число «кусочков» может быть любым, но нужно понимать, что увеличение их числа не всегда приводит к увеличению точности, так как вычисления идут с округлениями до целого на всех этапах, а диапазон целых чисел составляет 32648 и он не растягивается, а как бы «выкусывается» при каждом случае масштабирования.

Полезные ссылки:

Справка LOGO!Soft Comfort

Обзор линейки микроконтроллеров LOGO!

Учебник по LOGO!

LOGO! 8 в деталях - Часть 1.1 Установка и обзор функциональных блоков.
LOGO! 8 в деталях - Часть 1.2 Базовые функции.
LOGO! 8 в деталях - Часть 1.3 Обзор специальных функций.
LOGO! 8 в деталях- Часть 1.4 Другие функции.

LOGO! 8 в деталях - Часть 2 Управление и использование ПО Logo Soft Comfort.

LOGO! 8 в деталях - Часть 3.1 LOGO! Soft Comfort - все для комфортной работы.
LOGO! 8 в деталях. Часть 3.2 LOGO! и KNX
LOGO! 8 в деталях. Часть 3.3 Настройка WEB-сервера.
LOGO! 8 в деталях - Часть 3.4 LOGO! Access Tool - работать с данными просто.

LOGO! 8 в деталях – Часть 4.1 Типовые задачи. Управление водосборником.
LOGO! 8 в деталях – Часть 4.2 Типовые задачи. Управление транспортером и астрономические часы.
LOGO! 8 в деталях – Часть 4.3 Особенности использования некоторых функций.
LOGO! 8 в деталях – Часть 4.4 Создание и управление UDF с LOGO!8

#siemens #siemensdvn #adventory #logo

При подготовке публикации использовались материалы и изображения SIEMENS AG

<-