Математика с плавающей запятой на Micro PLC: PID, аналоговое масштабирование и когда это действительно необходимо

Позвольте мне начать с числа: 214-219. Это диапазон страниц в руководстве V6.2.2, где находятся блоки с плавающей запятой. Вы могли бы подумать, что поставщик закопал их там, потому что никто не использует их. Неправильно. Они закопали их там, потому что целочисленная математика подходит для девяноста процентов задач — а последние десять процентов — это то, где находятся настоящие машины.

Микро-PLC, выполняющий SIN, COS, TAN, LN, EXP, SQRT, сравнения действительных чисел и перемещения действительных чисел. Десять лет назад это предложение было бы шуткой. Сегодня он поставляется в модуле DIN-рейки 35 мм, который стоит меньше, чем приличный зонд осциллографа.

Когда целочисленная математика обманывает вас

Вот в чем ловушка. Масштабирование аналогового входа 0-10V с целочисленной математикой работает — пока вы не делите. 6V в диапазоне 0-1000: целочисленное деление отбрасывает остаток, и внезапно ваше считывание уровня дрейфует на единицу с каждым сканированием. За смену дрейф накапливается. За неделю ваш бак переполняется, потому что PLC думал, что уровень в порядке.

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

Конкретный случай: PID-контроль температуры с реальной математикой

Настройте PID-цикл на PR-18: аналоговый вход считывает PT100 через 0-10V передатчик, блок PID вычисляет с действительными коэффициентами, выход управляет PWM-каналом для нагревателя. Двигатель с плавающей запятой поддерживает интегральный член стабильным. На оборудовании только с целыми числами тот же цикл требует ручного планирования коэффициентов и все равно колеблется при низкой ошибке.

Я наблюдал, как инженер по наладке гонялся за колебанием 0,4 градуса в течение двух дней на целочисленном PID. Заменил ЦП на модель с плавающей запятой, настроил за час. Разница в стоимости оборудования была смехотворной. Разница во времени инженерии — нет.

Блоки, которые вы действительно будете использовать

Будьте честны: вы будете использовать ADD-R, SUB-R, MUL-R, DIV-R и SQRT. Возможно, ROUND и TRUNC при передаче значений в HMI. Тригонометрические функции предназначены для действительно странных проектов — расчетов потока, объема бака по уровню, компенсации угла конвейера. Когда поступит этот странный запрос, вы не захотите объяснять, что ваш PLC не может вычислить косинус.

И преобразования строк важнее, чем кажется. Преобразование из действительного в строку, из целого в ASCII — вот как вы создаете читаемые сообщения тревоги и журналы данных без языка сценариев HMI.

Сколько это стоит

Ничего лишнего, как только вы выберете правильный ЦП. Блоки с плавающей запятой являются частью стандартной библиотеки в текущей редакции руководства, и программное обеспечение бесплатно. Единственная настоящая стоимость — это изменение привычки: перестаньте думать в целых числах, начните думать в инженерных единицах.

Правильное масштабирование

Масштабирование — это то, где плавающая запятая оправдывает свои затраты, и это также то, где живет большинство ошибок масштабирования. Классическая ошибка: масштабирование сырого значения с целочисленной математикой и потеря остатка при каждом делении. Классическое исправление: выполняйте математику в действительных числах и преобразуйте один раз, на границе, где HMI или SCADA ожидает целое число. Один блок масштабирования, действительные числа от начала до конца, и шум округления исчезает.

Запишите постоянные масштабирования там, где следующий инженер сможет их найти. Передатчик 4-20mA, считывающий 0-10 бар: формула, сырой диапазон, инженерный диапазон — все это должно быть в комментарии к блоку масштабирования. Значение "выглядит правильно" в течение месяцев, пока не перестанет, и человеку, отлаживающему его, понадобятся постоянные, а не память о человеке, который их выбрал.

Проверьте границы при наладке: минимум, максимум и средняя точка. Блок масштабирования, который правильный на 50%, но неправильный на 0%, пройдет мимо случайного взгляда и провалит реальный процесс. Три контрольные точки, пять минут, и масштабирование завершено.

Ложное представление о целых числах

Существует точка зрения, чтоMicro PLCдолжен оставаться только целочисленным, потому что именно так работают небольшие контроллеры. Это обоснованная позиция с точки зрения затрат и необоснованная с точки зрения инженерии в тот момент, когда ваш процесс включает деление, соотношения или что-то, напоминающее реальные единицы. Оборудование с плавающей запятой не стоит ничего лишнего на этой платформе; возможность находится в библиотеке блоков, а не в премиум-уровне.

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

Используйте целые числа, где они являются правильным инструментом — счетчики, флаги, индексные значения. Используйте числа с плавающей запятой, где живет процесс. Платформа предоставляет вам и то, и другое; дисциплина заключается в выборе по сигналу, а не по религии.

Действительные числа в HMI

Экраны HMI и SCADA должны показывать инженерные единицы, а не сырые целые числа — и масштабирование происходит на стороне PLC. Выполните преобразование один раз, в одном блоке масштабирования, и дисплеи будут показывать градусы, бары и литры в минуту повсюду. Альтернатива — масштабирование на каждом экране, каждом теге, каждом отчете — это опечатка формулы, которая ждет своего часа. Точка преобразования на сигнал, задокументированная в комментарии к блоку, и вся система говорит на языке оператора.

Вот и сдвиг. Оборудование уже это сделало. Ваш стиль программирования — последняя часть обновления.