IEC 61131-3 — раздел (англ. Tier) международного стандарта IEC 61131 (также существует соответствующий европейский стандарт EN 61131), описывающий языки программирования для программируемых логических контроллеров. Третий раздел IEC 61131 описывает языки программирования и определяет два графических и два текстовых стандарта для языков программирования ПЛК.

  • 1. Обзор

  • 2. Описываемые языки программирования

    • 2.1 Список инструкций (IL)

    • 2.2 Релейно-Контактные Схемы (LD)

    • 2.3 Функциональные блоковые диаграммы (FBD)

    • 2.4 Последовательностные функциональные диаграммы (SFC)

    • 2.5 Структурированный текст (ST)

  • 3. Типы данных

  • 4. Переменные

  • 5. Конфигурация

  • 6. Программируемые организационные элементы (POU)

  • 7. Конфигурации, ресурсы, задания

  • 8. Изменения в третьей редакции

    • 8.1 Новые возможности

    • 8.2 Удаления

    • 8.3 Устаревшее, нежелательное к использованию

  • 9. Инструментальные среды программирования на языках МЭК 61131-3

  • 10. Ссылки

IEC 61131-3 - первый независимый от производителя стандартизированных язык программирования для промышленной автоматизации. Стандарт создан международной электротехнической комиссией (МЭК). МЭК была основана в 1906 году и является международно признанной стандартизирующей организацией для промышленности контроллеров в более 50 стран. Стандарт уже зарекомендовал себя в Европе и быстро набирает популярность в Северной Америке и Азии как стандарт программирования для промышленности. Принятия стандарта МЭК 61131-3 обусловлено возрастающей сложностью управления и требований к автоматизации. Время на создание, стоимость работ и обслуживание программ контроллеров имеет большое влияние на проекты контроллеров. Основной целью стандарта было повышение скорости и качества разработки программ для ПЛК, а также создание языков программирования, ориентированных на технологов, обеспечение соответствия ПЛК идеологии открытых систем, исключение этапа дополнительного обучения при смене типа ПЛК. Системы программирования, основанные на МЭК 61131-3, характеризуются:

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

  • возможностью простой модификации программы и наращивания ее функциональности;

  • переносимостью проекта с одного ПЛК на другой;

  • возможностью повторного использования отработанных фрагментов программы;

  • простотой языка и ограничением количества его элементов.

Языки МЭК 61131-3 появились не как теоретическая разработка, а как результат анализа множества языков, уже используемых на практике и предлагаемых рынку производителями ПЛК. Стандарт устанавливает пять языков программирования. В стандарт были введены несколько языков (а не один) для того, чтобы каждый пользователь мог применить наиболее понятный ему язык. Программисты чаще выбирают язык IL (похожий на ассемблер) или ST, похожий на язык высокого уровня Паскаль; специалисты, имеющие опыт работы с релейной логикой, выбирают язык LD, специалисты по системам автоматического управления (САУ) и схемотехники выбирают привычный для них язык FBD. Выбор одного из пяти языков определятся не только предпочтениями пользователя, но и смыслом решаемой задачи. Если исходная задача формулируется в терминах последовательной обработки и передачи сигналов, то для нее проще и нагляднее использовать язык FBD. Если задача описывается как последовательность срабатываний некоторых ключей и реле, то для нее нагляднее всего будет язык LD. Для задач, которые изначально формулируются в виде сложного разветвленного алгоритма, удобнее будет язык ST.

  • 2.1 Список инструкций (IL)

  • 2.2 Релейно-Контактные Схемы (LD)

  • 2.3 Функциональные блоковые диаграммы (FBD)

  • 2.4 Последовательностные функциональные диаграммы (SFC)

  • 2.5 Структурированный текст (ST)

Текстовый язык. Аппаратно-независимый низкоуровневый ассемблероподобный язык. Считается устаревшим в третьей редакции. Пример синтаксиса:

 LD Voltage (*Загрузить Voltage в аккумулятор*)
          GT 220 (*Если >220*)
          JMPCN М1 (*Перейти к метке, если ">220" не верно*)
          LD Current (*Загрузить Current в аккумулятор*)
          SUB 10 (*Вычесть из аккумулятора 10 *)
          ST Current (*Присвоить Current значен. аккумулятора*)
          M1: LD 0 (*Загрузить в аккумулятор значение "0"*)
          ST Out (*Присвоить Out значение аккумулятора*)

Графический язык. Представляет собой программную реализацию электрических схем на базе электромагнитных реле.

Пример ререйной диаграммы на языек LD

Графический язык. Функциональный блок (ФБ) выражает некую подпрограмму. Каждый ФБ имеет входы (слева) и выходы (справа). Программа создается путем соединения множества ФБ.

Пример структуры на языек FBD

Графический высокоуровневый язык. Создан на базе математического аппарата сетей Петри. Описывает последовательность состояний и условий переходов.

Пример диаграммы на языек SFC

Текстовый Паскалеподобный язык программирования Пример синтаксиса:

IF Voltage>220 THEN
          Current:=Current - 10;  (*Если V>220 В, то уменьшить ток на 10*)
          ELSE
          Current:=50; Speed:= ON;(*Установить ток 50А и включить мотор*)
          END_IF;
  • Битовые строки - группы значения вкл/выкл

    • BIT - 1 bit

    • BYTE - 8 bit (1 byte)

    • WORD - 16 bit (2 byte)

    • DWORD - 32 bit (4 byte)

    • LWORD - 64 bit (8 byte)

  • INTEGER - целые числа (размер байта = 8 бит)

    • SINT - signed short (1 byte)

    • INT - signed integer (2 byte)

    • DINT - double integer (4 byte)

    • LINT - long integer (8 byte)

    • U - Unsigned - префикс U перед типом делает этот тип беззнаковым целым

  • REAL - числа с плавающей точкой IEC 60559 (такие же, как в IEEE 754-2008)

    • REAL - (4 byte)

    • LREAL - (8 byte)

  • TIME - время длительности для таймеров и процессов

  • Даты и время дня

    • DATE - календарная дата

    • TIME_OF_DAY - часовое время

    • DATE_AND_TIME: дата и время

  • STRING - символьные строки выделенные одинарными кавычками. Знак "$" является маскирующим символом.

    • WSTRING - содержит многобайтовые строки

  • Arrays - множество значений, хранящихся в одной переменной

  • Sub Ranges - устанавливает пределы для значений

  • Derived - тип, полученный из одного из приведенных выше типов

    • TYPE - одиночный тип

    • STRUCT - набор нескольких переменных и типов

Свойства переменных: RETAIN, CONSTANT, AT

  • Глобальные

  • Локальные

  • Переменные ввода-вывода

  • Внешние

  • Временные

  • Ресурс - например центральное процессорное устройство

  • Задачи - может быть несколько на процессор

  • Программы - могут быть запущены один раз, по таймеру или событию

  • Функции

    • Стандартные: ADD, SQRT, SIN, COS, GT, MIN, MAX, AND, OR, etc.

    • Пользовательские

  • Функциональные блоки

    • Стандартные

    • Пользовательские - библиотеки функций могут быть предоставлены производителем или сторонними лицами

  • Программы

Здесь приведены основные термины и определения стандарта, применительно к инструментальным средам разработки

Полный перечень терминов и определений приведен в статье 3 стандарта IEC 61131-3 и содержит 99 понятий и определений.

Модули УСО – модули ввода/вывода, обеспечивающие подключение датчиков и исполнительных механизмов.

Целевое устройство – аппаратное средство с определённой архитектурой процессора, на котором могут исполняться различные исполняемые файлы, обращающиеся с помощью него к модулям УСО.

Прикладная программа (исполняемый файл) для целевого устройства – скомпилированный и скомпонованный исполняемый файл, который будет выполняться на целевом устройстве.

Плагин для модуля УСО – интерфейс, состоящий из специальных драйверов и элементов пользовательского интерфейса для среды разработки, позволяющий связывать переменные модулей УСО с переменными программных модулей, из которых состоит проект.

Проект – совокупность программных модулей (программ, функциональных блоков, функций), плагинов внешних модулей УСО, ресурсов, пользовательских типов данных, сборка(компиляция и компоновка) которых, представляет собой прикладную программу для целевого устройства. Каждый проект сохраняется в отдельном файле.

Переменная – область памяти, в которой находятся данные, с которыми оперирует программный модуль.

Ресурс – элемент, отвечающий за конфигурацию проекта: глобальные переменные и экземпляры проекта, связываемыми с программными модулями типа «Программа» и задачами.

Программный модуль – элемент, представляющий собой функцию, функциональный блок или программу. Каждый программный модуль состоит из раздела объявлений и кода. Для написания всего кода программного модуля используется только один из языков программирования стандарта IEC 61131-3.

Функция – программный модуль, который возвращает только единственное значение, которое может состоять из одного и нескольких элементов (если это битовое поле или структура).

Функциональный блок – программный модуль, который принимает и возвращает произвольное число значений, а также позволяет сохранять своё состояние (подобно классу в различных объектно-ориентированных языках). В отличие от функции функциональный блок не формирует возвращаемое значение.

Программа – программный модуль, представляющий собой единицу исполнения, как правило, связывается (ассоциируется) с задачей.

Задача – элемент представляющий время и приоритет выполнения программного модуля типа «Программа» в рамках экземпляра проекта.

Экземпляр – представляет собой программу, как единицу исполнения, связанную(ассоциированную) с определённой задачей. Также, как экземпляр, рассматриваются переменные, определённые в программных модулях: программа и функциональный блок.

Пользовательский тип данных – тип данных, добавленный в проект и представляющий собой: псевдоним существующего типа, под диапазон существующего типа, перечисление, массив или структуру.

  • 8.1 Новые возможности

  • 8.2 Удаления

  • 8.3 Устаревшее, нежелательное к использованию

  • Типы данных с явной структурой

  • Тип данных с именованными значениями

  • Элементарные типы данных

  • Ссылки и операции со ссылками

  • Частичный доступ к ANY_BIT

  • Массив с изменяемой длиной

  • Инициализация переменных

  • Правила конвертации данных: неявное– явное

  • Функции - правила вызова функций без результата.

  • Функции конвертации типов: числовые, побитовые и т.д.

  • Функции объединения и разделения времени и даты

  • Классы, методы, интерфейсы и т.д.

  • Объектно-ориентированные функциональные блоки (FB)

  • Пространство имен

  • Структурированный текст (ST) : операторы Continue и т.д.

  • Релейно-контактные схемы (LD) : Контакты для сравнения (типизированные и перегруженные)

  • Приложение A - формальная спецификация элементов языка

  • Приложение - Примеры

  • Приложение - взаимодействие с IEC 61499

  • Восьмеричные литералы

  • Использование непосредственных МЭК адресов в теле программируемых организационных элементов (POU)

  • Перегруженное усечение TRUNC

  • Список инструкций (IL)

  • Переменная "индикатор" исполняемого блока.

  • CoDeSys

  • CX-One

  • ISaGRAF

  • Trace mode

  • MULTIPROG

  • SIMATIC STEP 7

  • GXDeveloper

  • OpenPCS

  • MasterPLC Designer

  • Concept

  • Unity Pro

  • Visilogic (Unitronics PLC)

  • TwinCAT

  • B&R Automation Studio

  • 1Tool (Carel)

  • Cont Designer (Emicon)

  • SILworX

  • PL7

  • SCADA система "Текон"

  • Segnetics SMLogix

  • ZWorkbench (Zentec)

Полный тескт стандарта: