Математические операции с использованием платформы OpenPLC
This article explains how PLC systems perform core mathematical operations such as addition, subtraction, multiplication, division, modulo, and exponentiation within industrial automation. It shows...
OpenPLC позволяет выполнять вычисления данных для многих открытых ПЛК. Как и традиционные ПЛК, программное обеспечение OpenPLC предоставляет библиотеку математических инструкций для помощи в задачах промышленной автоматизации. Эти математические вычисления используются для таких задач, как масштабирование, преобразование единиц и управление подсчетом производства.
Математические действия легко реализуются с помощью языков программирования IEC 61131-3, таких как Instruction List (IL) и Structured Text (ST), благодаря их текстовому/английскому формату. Язык программирования Ladder Diagram (LD) будет использован для иллюстрации математических операций с помощью OpenPLC, так как он часто применяется для построения сложных логических операций в промышленном управлении машинами.
Обзор математических инструкций OpenPLC
Математические инструкции для арифметических операций выполняются над переменными данными с помощью программного обеспечения OpenPLC. Обсуждение переменных можно найти в предыдущей статье OpenPLC.
Основные математические инструкции, включённые в OpenPLC, включают сложение (ADD), вычитание (SUB), умножение (MUL) и деление (DIV). Программное обеспечение OpenPLC может выполнять продвинутые математические операции, такие как возведение в степень (EXPT) и вычисление остатка от деления (MOD).

Рисунок 1. Математические инструкции OpenPLC находятся в библиотеке на правой боковой панели.
Типы данных
Все математические инструкции могут использовать любой числовой тип данных. Наиболее распространённые для математических уравнений — целые числа (16-битный INT и 32-битный DINT) или числа с плавающей точкой (REAL).
Значения типов данных создаются во время активности Tag Listing в процессе построения LD. Все значения типов данных можно изменить в списке тегов, если они не поступают с физических входов.
Одна из распространённых проблем ПЛК была предотвращена в среде OpenPLC. Хотя любая математическая команда может использовать любой числовой тип данных, смешанные типы не допускаются. Это означает, что нельзя сложить REAL с DINT, и нельзя выполнять операцию с INT-входами, направленными на REAL-выход.
Это полезный подход, так как он снижает вероятность случайных ошибок, возникающих при смешивании типов. Например, использование REAL-входа для команды DIV может иногда приводить к целочисленному ответу, а иногда — к дробному. Конечно, ошибки округления могут возникать и при целочисленных вычислениях, но принудительное использование согласованных типов данных в операциях гарантирует, что такие ошибки будут предсказуемыми.
Сложение (ADD) FB
Самая базовая математическая операция — сложение, реализуемое с помощью функционального блока ADD. Команда ADD может использовать несколько входных значений (обычно аналоговый вход или число, сохранённое в памяти) и выдаёт ровно одно числовое решение. ADD FB можно использовать для активации физического выходного устройства, например, сигнала тревоги или индикатора, оповещающего пользователя о вычисленном результате.

Рисунок 2. Программа ADD на LD.
В этой лестничной диаграмме кнопка Compute инициирует арифметическую операцию на вход EN. Дополнительные входы могут быть добавлены при выборе команды ADD. Наконец, цифровой выход Enable Out (ENO) включит индикатор Answer1_LED.
Вычитание (SUB) FB
Математическая операция вычитания по сути является отрицательным сложением, но реализуется с помощью функционального блока SUB. При замыкании контактов кнопки Compute два переменных значения вычитаются друг из друга.
В этих примерах значения смоделированы из списка тегов и показаны фиолетовым цветом. В данном примере 5-4=1 — простой пример уравнения. Кроме того, вывод Enable Out (ENO) включит индикатор Answer2_LED.
Вычитание можно использовать для определения ошибки в приложении ПЛК для мониторинга давления. Ошибка определяется с помощью SUB FB, используя заданное давление в psi и фактическое измерение с соответствующего датчика.

Рисунок 3. Программа SUB на LD.
Умножение (MUL) FB
Умножение — это серия операций сложения, и функциональный блок MUL выполняет эту операцию над двумя или более переменными или числами. Активация происходит так же, как у ADD и SUB — при подаче сигнала на вход EN.
В этом примере переменная A_Number умножается на B_Number (50x144), давая ответ 7200. Эта арифметическая инструкция может использоваться для масштабирования данных с температурного датчика в приложении управления процессом покраски, где вычисленное значение температуры определяется умножением измеренного значения аналого-цифрового преобразователя (ADC) на коэффициент масштабирования.

Рисунок 4. Программа MUL на LD.
Деление (DIV) FB
Деление — ещё одна математическая операция, ограниченная двумя входными значениями. Нужно быть осторожным, чтобы не делить на ноль, так как это приводит к недопустимому математическому результату. Если в значение тега IN2 введён 0, программа не сможет выполниться. В этом примере при делении 7200/144 результат равен 50.
Для целочисленных чисел (INT и DINT) возможны ошибки, если ответ не является целым числом. При выполнении операции деления остаток отбрасывается (усечение). Даже если ответ равен, например, 8.99, целочисленный результат будет 8. Эту проблему можно решить, используя типы данных REAL, но при этом входные значения также должны быть преобразованы в REAL.

Рисунок 5. Программа DIV на LD.
Остаток от деления (MOD) FB
Команда modulus возвращает остаток после операции деления. Это часто используется в производственных условиях для переключения выхода путём деления на 2, при этом остаток всегда будет 0 или 1. Конструкция программы MOD на LD показана на рисунке 6.
Как и DIV FB, инструкция modulus ограничена двумя переменными числами. Первый IN1 — делимое (число, которое делят), второй IN2 — делитель, а OUT — остаток после целочисленного частного.

Рисунок 6. Программа MOD на LD.
Возведение в степень (EXPT) FB
Последний математический функциональный блок OpenPLC — возведение в степень (EXPT). EXPT FB — это продвинутая арифметическая функция, где базовое число возводится в степень n (экспоненту), что даёт конечный результат. EXPT FB может применяться в химических реакторах, где ПЛК выполняет расчёты моделей экспоненциального роста или распада.
Для правильной настройки EXPT FB в списке тегов LD-программы должен быть определён тип REAL. Показатель степени или степень задаётся как целое число. На рисунке 7 показана настройка и результат 7^2.

Рисунок 7. Программа EXPT на LD.
Заключение
Помимо выполнения логических операций управления, OpenPLC может выполнять математические инструкции. Представленные математические инструкции демонстрируют потенциал вычислительной мощности программного обеспечения OpenPLC. Как показано в каждой LD-программе, правильное определение типов переменных снижает ошибки компиляции при загрузке на целевой ПЛК на базе ESP32 или Arduino.
Тщательное построение каждой ступени LD позволяет выполнять сложные уравнения преобразования, например, перевод градусов Цельсия в Фаренгейты, используя математические инструкции OpenPLC. Примеры программ OpenPLC LD можно получить здесь.