МЭК 61131 (Стандарт МЭК 61131-3: Языки программирования)

Стандарт МЭК 61131 предназначен для обеспечения единого набора языков программирования для программируемых контроллеров и средств автоматизации производственных процессов, что позволяет упростить разработку и сопровождение программного обеспечения для автоматизации производственных процессов.

Основные цели и задачи стандарта МЭК 61131 включают:

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

В SCADA NPT Compact применяется МЭК 61131 ST (Structured Text). Для реализации различных задач в SCADA используются разные диалекты языка МЭК 61131 ST:

  • ST - классическая реализация для свободно программируемой логики.
  • ST Formula - для выражения в формулах при формировании отчетов.
  • ST Script - для периодических задач.
  • ST Query - для запросов в базу данных реального времени и к базе данных тегов.
Интерфейс для языка ST

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

Пример использования ST в SCADA-системе:

Предположим, в SCADA-системе требуется реализовать алгоритм управления температурой в промышленной печи с использованием ПИД-регулятора. На языке ST этот алгоритм может выглядеть так:

VAR
CurrentTemp: REAL; // Текущая температура
Output: REAL; // Выходное значение
Error, Integral, Derivative, PreviousError: REAL;
Setpoint: REAL := 100.0;
Kp, Ki, Kd: REAL := 1.0, 0.1, 0.01;
END_VAR

Error := Setpoint - CurrentTemp;
Integral := Integral + Error;
Derivative := Error - PreviousError;
Output := Kp * Error + Ki * Integral + Kd * Derivative;
PreviousError := Error;