Языки программирования. стандарт мэк 61131-3 устанавливает пять языков программирования плк, три графических и два текстовых. продвижением стандарта занимается. — презентация

Принципы языков МЭК

Языки МЭК 61131-3 базируются на следующих принципах:

— Вся программа разбивается на множество функциональных элементов — Program Organization Units (POU), каждый из которых может состоять из функций, функциональных блоков и программ. Любой элемент МЭК-программы может быть сконструирован иерархически из более простых элементов;

— Стандарт требует строгой типизации данных. Указание типов данных позволяет легко обнаруживать большинство ошибок в программе до ее исполнения;

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

— Для выполнение операций в определенной последовательности, которая задается моментами времени или событиями, используется специальный язык последовательных функциональных схем ( SFC);

— Стандарт поддерживает структуры для описания разнородных данных. Например, температуру подшипников насоса, давление и состояние «включено-выключено» можно описать с помощью единой структуры «Pomp» и передавать ее внутри программы как единый элемент данных;

— Стандарт обеспечивает совместное использование всех пяти языков, поэтому для каждого фрагмента задачи может быть выбран любой, наиболее удобный, язык;

— Программа, написанная для одного контроллера, может быть перенесена на любой контроллер, совместимый со стандартом МЭК 61131-3.

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

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

Любой человек с опытом программирования микропроцессоров или программирования на Ассемблере увидит сходство с программированием на языке IL. Этот язык состоит из строк кода, в котором одна строка содержит одну операцию. Таким образом, программа представляет собой пошаговый список операций, в который можно легко вводить последовательности простых математических функций.  К тому же, если программист использует только команды, определяемые IEC, программу, написанную на этом языке можно легко использовать на различных аппаратных платформах. Эти преимущества сделали данный язык очень популярным в Европе, что удивляет многих программистов в США, которые предпочитают более удобные графические языки.

Рис. 4. Список инструкций состоит из многих строк кода,
в котором в каждой строке содержится только одна операция.

Язык IL – это язык нижнего уровня, и как таковой работает в ПЛК быстрее графических языков. Этот язык также более компактен и потребляет меньше памяти ПЛК.  Метод построчного текстового ввода, поддерживаемый этим языком, также позволяет очень быстро вводить программу, при этом не требуется мышка или функциональные клавиши. Программы в современных системах автоматизации, написанные на этом языке, легче воспроизводить и редактировать на портативных устройствах, для чего не требуется дополнительного программного обеспечения или ноутбука. 

Несмотря на преимущества данного языка, инженеры по обслуживанию его не очень любят. Возможно, это вызвано тем, что он менее нагляден, чем язык релейно-контактных схем, и поэтому труднее понять, что делает программа, и какие ошибки имеют место быть в ней. Аналогично релейно-контактной схеме по мере увеличения сложности ПЛК, в списке инструкций могут возникнуть сложности при вводе таких сложных функций, например, ПИД – регулирование. Это также относится и к сложным математическим расчетам.  Список инструкций не очень подходит для таких форм структурного программирования, как диаграмма состояний или  ступенчатая многозвенная схема, что ограничивает его полезность для реализации больших программ. Также спорным является факт, что преимущества скорости и компактности утрачивают свое значение по мере увеличения скорости работы современных ПЛК и большого объема доступной памяти. 

Характеристики системы программирования

Системы программирования, основанные на МЭК 61131-3, характеризуются следующими показателями:

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

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

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

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

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

Типы данных

  • Элементарный тип данных
    • Битовые строки — группы значений включения / выключения
      • BOOL — 1 бит (0,1)
      • БАЙТ — 8 бит (1 байт)
      • СЛОВО — 16 бит (2 байта)
      • DWORD — 32 бит (4 байта)
      • LWORD — 64 бит (8 байт)
    • INTEGER — целые числа (с учетом размера байта 8 бит)

      • SINT — короткое целое число со знаком (1 байт)
      • INT — целое число со знаком (2 байта)
      • DINT — двойное целое число со знаком (4 байта)
      • LINT — длинное целое число со знаком (8 байт)
      • USINT — короткое целое число без знака (1 байт)
      • UINT — беззнаковое целое (2 байта)
      • UDINT — беззнаковое двойное целое число (4 байта)
      • ULINT — длинное целое число без знака (8 байт)
    • REAL — с плавающей запятой IEC 60559 (то же, что и IEEE 754-2008 )

      • REAL — (4 байта)
      • LREAL — (8 байт)
Литералы продолжительности
Ед. изм Описание
d День
час Час
м Минуты
s Второй
РС Миллисекунды
нас Микросекунда
нс Наносекунда
    • Продолжительность
      • ВРЕМЯ — (4 байта). Литералы в виде T # 5m90s15ms
      • LTIME — (8 байт). Литералы расширяются до наносекунд в форме T # 5m90s15ms542us15ns.
    • Дата
      • ДАТА — календарная дата (размер не указан)
      • LDATE — календарная дата (размер не указан)
    • Время суток
      • TIME_OF_DAY / TOD — время часов (размер не указан)
      • LTIME_OF_DAY / LTOD — время часов (8 байт)
    • Дата и время суток
      • DATE_AND_TIME / DT — время и дата (размер не указан)
      • LDATE_AND_TIME / LDT — время и дата (8 байт)
    • Символьная / символьная строка
      • CHAR — однобайтовый символ (1 байт)
      • WCHAR — двухбайтовый символ (2 байта)
      • СТРОКА — однобайтовая символьная строка переменной длины. Литералы, указанные в одинарных кавычках: «Это литерал STRING»
      • WSTRING — двухбайтовая символьная строка переменной длины. Литералы, указанные в двойных кавычках: «Это литерал WSTRING»
STRING escape-последовательности
Последовательность выхода Производит
$$ $
$ ‘
$ L перевод строки
$ N новая линия
$ P страница (подача формы)
$ R возвращение
$ T вкладка
$ xx шестнадцатеричное значение
  • Общие типы данных — доступны только для переменных ввода / вывода / ввода-вывода системных организационных единиц программы (POU, см. Ниже)
    • ЛЮБОЙ
      • ANY_DERIVED
      • ЛЮБОЙ_ЭЛЕМЕНТ
        • ANY_MAGNITUDE
          • ANY_NUM
            • ANY_REAL: LREAL, REAL
            • ANY_INT
              • ANY_UNSIGNED: ULINT, UDINT, UINT, USINT
              • ANY_SIGNED: LINT, DINT, INT, SINT
          • ANY_DURATION: TIME, LTIME
        • ЛЮБОЙ_БИТ: LWORD, DWORD, WORD, BYTE, BOOL
        • ANY_CHARS
          • ANY_STRING: STRING, WSTRING
          • ANY_CHAR: CHAR, WCHAR
        • ANY_DATE: DATE_AND_TIME (DT), DATE_AND_TIME (LDT), DATE, TIME_OF_DAY (TOD), LTIME_OF_DAY (LTOD)
  • Типы данных, определяемые пользователем
    • Перечислимый тип данных
    • Перечислимый тип данных с именованным значением
    • Тип данных поддиапазона — устанавливает ограничения на значение, например, INT (4 .. 20) для текущего
    • Тип данных массива — несколько значений, хранящихся в одной переменной .
    • Структурированный тип данных — составной из нескольких переменных и типов.
    • Непосредственно производный тип данных — тип, производный от одного из вышеперечисленных типов, чтобы дать новое имя и начальное значение как тип.
    • Ссылки — это разновидность строго типизированного указателя. Арифметические операции со значением этого типа запрещены.

Язык релейно-контактных схем (LD)

Этот язык программирования, изобретенный в США десятилетия назад, получил наиболее широкое распространение. Изначально изобретенный для замены логических схем, выполненных на релейной технике, язык релейно-контактных схем является базовым в США на сегодняшний день, и применяется в 95% всех приложений. Визуально этот язык напоминает последовательность цепей управления, в которой все входы должны быть установлены в значение «истина» для активации одного или нескольких выходов.

Язык релейно-контактных схем получил такое широкое распространение, потому что на нем могут писать практически все программисты в любой стране.

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

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

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

На языке релейно-контактных схем затруднительно реализовывать более сложный функционал ПЛК (программируемый логический контроллер, англ.: PLC), сохраняя парадигму легкой визуализации и понимания. Такие функции как ПИД-регулирование, тригонометрия и анализ данных в приложении реализовать трудно. Другой сложностью является то, что по мере роста объема программы, ее становится сложно читать и интерпретировать, если нет подробнейшей документации. Наконец, реализация полного процесса управления на языке релейно-контактных схем может быть чрезвычайно трудным.

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

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

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

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

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

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

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

Виды языков программирования МЭК

Языки МЭК 61131-3 появились не как теоретическая разработка, а как результат анализа множества языков, уже используемых на практике и предлагаемых рынку производителями ПЛК. Стандарт устанавливает пять языков программирования со следующими названиями:

— Структурированный текст (ST — Structured Text);

— Последовательные функциональные схемы (SFC — «Sequential Function Chart»);

— Диаграммы функциональных блоков (FBD — Function Block Diagram);

— Релейно-контактные схемы, или релейные диаграммы (LD — Ladder Diagram);

— Список инструкций (IL — Instruction List).

Графическими языками являются SFC, FBD, LD. Языки IL и ST являются текстовыми.

Понимание языков программирования IEC61131-3

Сложность программного обеспечения, возможности PLC/PAC и возможность портировать программный код являются ключевыми факторами при выборе языка программирования контроллера. Около 120 лет назад Марк Твен сказал «есть несколько способов снять шкуру с кошки». Это клише все еще актуально в мире программирования контроллеров.

Долго считавшиеся чисто европейским феноменом, языки программирования контроллеров IEC получают распространение в Соединенных Штатах. IEC разработала данные стандарты программирования, реагируя на увеличивающееся количество разработчиков систем автоматизации, возрастающую сложность приложений, и множество методов реализации функций управления.

Многие инженеры в области АСУ ТП интересуются возможностями каждого языка программирования. В каких случаях предпочесть тот или иной язык? Какие преимущества и недостатки каждого? В данной статье содержится краткий обзор и сравнение каждого из пяти основных языков программирования контроллеров.