Описываемые языки программирования
Список инструкций (IL)
Текстовый язык. Аппаратно-независимый низкоуровневый ассемблероподобный язык. Считается устаревшим в третьей редакции. Пример синтаксиса:
Функциональные блоковые диаграммы (FBD)
Графический язык. Функциональный блок (ФБ) выражает некую подпрограмму. Каждый ФБ имеет входы (слева) и выходы (справа). Программа создается путем соединения множества ФБ.
Последовательностные функциональные диаграммы (SFC)
Графический высокоуровневый язык. Создан на базе математического аппарата сетей Петри. Описывает последовательность состояний и условий переходов.
Принципы языков МЭК
Языки МЭК 61131-3 базируются на следующих принципах:
— Вся программа разбивается на множество функциональных элементов — Program Organization Units (POU), каждый из которых может состоять из функций, функциональных блоков и программ. Любой элемент МЭК-программы может быть сконструирован иерархически из более простых элементов;
— Стандарт требует строгой типизации данных. Указание типов данных позволяет легко обнаруживать большинство ошибок в программе до ее исполнения;
— Имеются средства для исполнения разных фрагментов программы в разное время, с разной скоростью, а также параллельно. Например, один фрагмент программы может сканировать концевой датчик с частотой 100 раз в секунду, в то время как второй фрагмент будет сканировать датчик температуры с частотой один раз в 10 сек;
— Для выполнение операций в определенной последовательности, которая задается моментами времени или событиями, используется специальный язык последовательных функциональных схем ( SFC);
— Стандарт поддерживает структуры для описания разнородных данных. Например, температуру подшипников насоса, давление и состояние «включено-выключено» можно описать с помощью единой структуры «Pomp» и передавать ее внутри программы как единый элемент данных;
— Стандарт обеспечивает совместное использование всех пяти языков, поэтому для каждого фрагмента задачи может быть выбран любой, наиболее удобный, язык;
— Программа, написанная для одного контроллера, может быть перенесена на любой контроллер, совместимый со стандартом МЭК 61131-3.
Любой ПЛК работает в циклическом режиме. Цикл начинается со сбора данных с модулей ввода, затем исполняется программа ПЛК и оканчивается цикл выводом данных в устройства вывода. Поэтому величина контроллерного цикла зависит от времени исполнения программы и быстродействия процессорного модуля.
Виды языков программирования МЭК
Языки МЭК 61131-3 появились не как теоретическая разработка, а как результат анализа множества языков, уже используемых на практике и предлагаемых рынку производителями ПЛК. Стандарт устанавливает пять языков программирования со следующими названиями:
— Структурированный текст (ST — Structured Text);
— Последовательные функциональные схемы (SFC — «Sequential Function Chart»);
— Диаграммы функциональных блоков (FBD — Function Block Diagram);
— Релейно-контактные схемы, или релейные диаграммы (LD — Ladder Diagram);
— Список инструкций (IL — Instruction List).
Графическими языками являются SFC, FBD, LD. Языки IL и ST являются текстовыми.
Типы данных
- Элементарный тип данных
- Битовые строки — группы значений включения / выключения
- 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»
- Продолжительность
Последовательность выхода | Производит |
---|---|
$$ | $ |
$ ‘ | ‘ |
$ 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
- ANY_NUM
- ЛЮБОЙ_БИТ: 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)
- ANY_MAGNITUDE
- ЛЮБОЙ
- Типы данных, определяемые пользователем
- Перечислимый тип данных
- Перечислимый тип данных с именованным значением
- Тип данных поддиапазона — устанавливает ограничения на значение, например, INT (4 .. 20) для текущего
- Тип данных массива — несколько значений, хранящихся в одной переменной .
- Структурированный тип данных — составной из нескольких переменных и типов.
- Непосредственно производный тип данных — тип, производный от одного из вышеперечисленных типов, чтобы дать новое имя и начальное значение как тип.
- Ссылки — это разновидность строго типизированного указателя. Арифметические операции со значением этого типа запрещены.
Описание языков МЭК 61131-3
— IL (Instruction List) — язык программирования стандарта IEC61131-3. Предназначен для программирования промышленных контроллеров. По синтаксису напоминает ассемблер.
— LD (Ladder Diagram)— язык релейной (лестничной) логики.
Предназначен для программирования промышленных контроллеров (ПЛК). Синтаксис языка удобен для замены логических схем, выполненных на релейной технике. Ориентирован на инженеров по автоматизации, работающих на промышленных предприятиях. Обеспечивает наглядный интерфейс логики работы контроллера, облегчающий не только задачи собственно программирования и ввода в эксплуатацию, но и быстрый поиск неполадок в подключаемом к контроллеру оборудовании.
— FBD (Function Block Diagram) — графический язык программирования стандарта МЭК 61131-3.
Предназначен для программирования программируемых логических контроллеров (ПЛК). Программа образуется из списка цепей, выполняемых последовательно сверху вниз. Цепи могут иметь метки. Инструкция перехода на метку позволяет изменять последовательность выполнения цепей для программирования условий и циклов.
— SFC (Sequential Function Chart) — язык программирования стандарта МЭК61131-3. Предназначен. для программирования промышленных контроллеров. Широко используется в SCADA/HMI пакетах.
SFC — графический язык, предназначенный для написания программ последовательного управления технологическим процессом, описывающий его в форме близкой к диаграмме состояний. Аналогом может служить сеть Петри с разноцветными фишками. В каждом состоянии система выполняет действия (подпрограммы) с определенными модификаторами.
— ST (Structured Text) — язык программирования стандарта МЭК61131-3. Предназначен для программирования промышленных контроллеров и операторских станций. Широко используется в SCADA/ HMI/SoftLogic пакетах. По структуре ближе всего к языку программирования Паскаль. Удобен для написания больших программ и работы с аналоговыми сигналами и числами с плавающей точкой.
Характеристики системы программирования
Системы программирования, основанные на МЭК 61131-3, характеризуются следующими показателями:
— Hадежностью создаваемого программного обеспечения. Надежность обеспечивается тем, что программы для ПЛК создаются с помощью специально предназначенной для этого среды разработки, которая содержит все необходимые средства для написания, тестирования и отладки программ с помощью эмуляторов и реальных ПЛК, а также множество готовых фрагментов программного кода;
— Возможностью простой модификации программы и наращивания ее функциональности;
— Переносимостью проекта с одного ПЛК на другой;
— Возможностью повторного использования отработанных фрагментов программы;
— Простотой языка и ограничением количества его элементов.
Понимание языков программирования IEC61131-3
Сложность программного обеспечения, возможности PLC/PAC и возможность портировать программный код являются ключевыми факторами при выборе языка программирования контроллера. Около 120 лет назад Марк Твен сказал «есть несколько способов снять шкуру с кошки». Это клише все еще актуально в мире программирования контроллеров.
Долго считавшиеся чисто европейским феноменом, языки программирования контроллеров IEC получают распространение в Соединенных Штатах. IEC разработала данные стандарты программирования, реагируя на увеличивающееся количество разработчиков систем автоматизации, возрастающую сложность приложений, и множество методов реализации функций управления.
Многие инженеры в области АСУ ТП интересуются возможностями каждого языка программирования. В каких случаях предпочесть тот или иной язык? Какие преимущества и недостатки каждого? В данной статье содержится краткий обзор и сравнение каждого из пяти основных языков программирования контроллеров.
Язык релейно-контактных схем (LD)
Этот язык программирования, изобретенный в США десятилетия назад, получил наиболее широкое распространение. Изначально изобретенный для замены логических схем, выполненных на релейной технике, язык релейно-контактных схем является базовым в США на сегодняшний день, и применяется в 95% всех приложений. Визуально этот язык напоминает последовательность цепей управления, в которой все входы должны быть установлены в значение «истина» для активации одного или нескольких выходов.
Язык релейно-контактных схем получил такое широкое распространение, потому что на нем могут писать практически все программисты в любой стране.
Поскольку он напоминает знакомый всем формат электрических цепей, даже не специалист в области программирования, знакомый с электроникой может разобраться в программе для поиска ошибок в ней. На этом языке легко писать программы. Имея базовое представление о входных и выходных сигналах, можно начать писать код. Большинство других языков IEC требуют большей подготовки, например, прорисовки диаграмм всех потенциальных процессов. Наконец, программа, реализованная в виде релейно-контактных схем, может быть организована в виде папок или подпрограмм, которые загружаются в контроллер, позволяя проводить легкую сегментацию программы.
Рис. 1. Этот язык напоминает последовательность цепей управления, в которой все входы должны быть установлены в значение «истина» для активации одного или нескольких выходов.
Язык релейно-контактных схем идеален для простых приложений перемещения материалов. Например, когда один датчик распознает наличие коробки, другой датчик проверяет наличие препятствий, а затем выходной сигнал, при соответствующем условии, запускает привод для перемещения коробки на другой конвейер. В данном случае дискретные входы контролирую текущие условия, базовая программа анализирует эти входы и подает соответствующие сигналы на выходы. В программе могут быть использованы таймеры, некоторые базовые сравнения или математические операции, но нет возможности использовать сложные функции.
На языке релейно-контактных схем затруднительно реализовывать более сложный функционал ПЛК (программируемый логический контроллер, англ.: PLC), сохраняя парадигму легкой визуализации и понимания. Такие функции как ПИД-регулирование, тригонометрия и анализ данных в приложении реализовать трудно. Другой сложностью является то, что по мере роста объема программы, ее становится сложно читать и интерпретировать, если нет подробнейшей документации. Наконец, реализация полного процесса управления на языке релейно-контактных схем может быть чрезвычайно трудным.