Знание языков программирования стандарта мэк 61131 3
НАЦИОНАЛЬНЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИ
Programmable controllers. Part 3. Programming languages
* В ИУС N 10 2016 г. и на официальном сайте Росстандарта ГОСТ Р МЭК 61131-3-2016 приводится с ОКС 25.040, 35.240.50 ,
здесь и далее. — Примечание изготовителя базы данных.
1 ПОДГОТОВЛЕН Негосударственным образовательным частным учреждением «Новая Инженерная Школа» (НОЧУ «НИШ») на основе перевода на русский язык англоязычной версии указанного в пункте 4 стандарта, который выполнен Российской комиссией экспертов МЭК/ТК 65, и Федеральным государственным унитарным предприятием «Всероссийский научно-исследовательский институт стандартизации и сертификации в машиностроении» («ВНИИНМАШ»)
2 ВНЕСЕН Техническим комитетом по стандартизации ТК 306 «Измерения и управление в промышленных процессах»
4 Настоящий стандарт идентичен международному стандарту МЭК 61131-3:2013* «Контроллеры программируемые. Часть 3. Языки программирования (IEC 61131-3:2013, «Programmable controllers — Part 3: Programming languages», IDT).
* Доступ к международным и зарубежным документам, упомянутым в тексте, можно получить, обратившись в Службу поддержки пользователей. — Примечание изготовителя базы данных.
При применении настоящего стандарта рекомендуется использовать вместо ссылочных международных стандартов соответствующие им национальные стандарты, сведения о которых приведены в дополнительном приложении ДА
5 В настоящем стандарте часть его содержания может быть объектом патентных прав
Правила применения настоящего стандарта установлены в ГОСТ Р 1.0-2012 (раздел 8). Информация об изменениях к настоящему стандарту публикуется в ежегодном (по состоянию на 1 января текущего года) информационном указателе «Национальные стандарты», а официальный текст изменений и поправок — в ежемесячном информационном указателе «Национальные стандарты». В случае пересмотра (замены) или отмены настоящего стандарта соответствующее уведомление будет опубликовано в ближайшем выпуске ежемесячного информационного указателя «Национальные стандарты». Соответствующая информация, уведомление и тексты размещаются также в информационной системе общего пользования — на официальном сайте Федерального агентства по техническому регулированию и метрологии в сети Интернет (www.gost.ru)
1 Область применения
Настоящий стандарт устанавливает синтаксис и семантику языков программирования программируемых контроллеров, определенных в МЭК 61131 (часть 1).
Функции ввода программы, тестирования, мониторинга, операционной системы и т.п. определены в МЭК 61131 (часть 1).
Настоящий стандарт устанавливает синтаксис и семантику унифицированного набора языков программирования для программируемых контроллеров (PC). Данный набор состоит из двух текстовых языков программирования, списка инструкций (IL) и структурированного текста (ST), и двух графических языков, релейно-контактных схем (LD) и функциональных блоковых диаграмм (FBD).
Дополнительный набор графических и эквивалентных текстовых элементов, именуемый последовательная функциональная схема (SFC), определяется для структурирования внутренней организации программ и функциональных блоков программируемого контроллера. Определены также элементы конфигурации, поддерживающие установку программ программируемого контроллера в системы программируемого контроллера. Кроме того, определены средства, облегчающие взаимодействие между программируемыми контроллерами и другими компонентами автоматизированных систем.
2 Нормативные ссылки
В настоящем стандарте использованы нормативные ссылки на следующие стандарты*. Для недатированных ссылок применяют последнее издание ссылочного документа (включая изменения).
* Таблицу соответствия национальных стандартов международным см. по ссылке. — Примечание изготовителя базы данных.
МЭК 61131-1 Программируемые контроллеры. Часть 1. Общие положения (IEC 61131-1, Programmable controllers — Part 1: General information)
МЭК 61131-5 Программируемые контроллеры. Часть 5. Взаимодействия (IEC 61131-5, Programmable controllers — Part 5: Communications)
ИСО/МЭК 10646:2012 Информационная технология. Универсальный набор символов (UCS) (ISO/IEC 10646:2012, Information technology — Universal Coded Character Set (UCS)
ИСО/МЭК/IEEE 60559 Информационная технология. Микропроцессорные системы. Арифметика с плавающей точкой (ISO/IEC/IEEE 60559, Information technology — Microprocessor Systems — Floating-Point arithmetic)
3 Термины и определения
В настоящем стандарте применены следующие термины с соответствующими определениями:
3.1 абсолютное время (absolute time): Комбинация времени суток и даты.
3.2 путь доступа (access path): Связь символического имени с переменной для реализации открытого взаимодействия.
3.3 действие (action): Логическая переменная или набор подлежащих выполнению операций вместе со связанной управляющей конструкцией.
3.4 блок действий (action block): Элемент графического языка, который использует входную логическую переменную для определения значения выходной логической переменной или разрешающее условие для действия в соответствии с предопределенной управляющей конструкцией.
агрегат (aggregate): Структурированная совокупность объектов данных, образующая тип данных.
массив (array): Агрегат, состоящий из объектов данных с идентичными атрибутами, на каждый из объектов данных можно уникально ссылаться с помощью индекса.
присваивание (assignment): Механизм для придания значения переменной или агрегату.
3.8 базовый тип (base type): Тип данных, тип функционального блока или класс, из которых наследуются или производятся дальнейшие типы.
3.9 число с основанием (based number): Число, представленное с конкретным основанием, отличным от 10.
3.10 двоично-десятичный код (binary coded decimal; BCD): Код десятичного числа, в котором каждая цифра представлена ее двоичным значением.
3.11 бистабильный функциональный блок (bistable function block): Функциональный блок с двумя устойчивыми состояниями, управляемый одним или более входами.
3.12 битовая строка (bit string): Элемент данных, состоящий из одного или более битов.
3.13 битово-строковый литерал (bit string literal): Литерал, который прямо представляет значение битовой строки типов данных BOOL, BYTE, WORD, DWORD или LWORD.
3.14 тело (body): Набор операций программного компонента.
3.15 вызов (call): Языковая конструкция, вызывающая выполнение функции, функционального блока или метода.
3.16 строка символов (character string): Агрегат, состоящий из упорядоченной последовательности символов.
3.17 символьно-строковый литерал (character string literal): Литерал, прямо представляющий значение символа или строки символов типов данных CHAR, WCHAR, STRING или WSTRING.
3.18 класс (class): программный компонент, состоящий из:
— определения структуры данных;
— набора методов, выполняемых над структурой данных.
комментарий (comment): Языковая конструкция для включения текста, не влияющего на выполнение программы.
3.20 конфигурация (configuration): Элемент языка, соответствующий системе программируемого контроллера.
3.21 константа (constant): Элемент языка, указывающий на элемент данных с фиксированным значением.
3.22 функциональный блок счетчика (counter function block): Функциональный блок, который накапливает значение числа изменений, определяемых на одном или более указанных выходов.
тип данных (data type): Набор значений вместе с набором допустимых операций.
3.24 дата и время (date and time): Дата с годом и время суток, представленные как отдельный элемент данных.
3.25 объявление (declaration): Механизм для определения элемента языка.
3.26 разделитель (delimiter): Символ или комбинация символов, используемая для разделения элементов языка программирования.
3.27 производный класс (derived class): Класс, создаваемый наследованием из другого класса.
Примечание — Производный класс также называют расширенным классом или порожденным классом.
3.28 производный тип данных (derived data type): Тип данных, созданный с использованием другого типа данных.
3.29 производный тип функционального блока (derived function block type): Тип функционального блока, созданный наследованием из другого типа функционального блока.
3.30 прямое представление (direct representation): Средства представления переменной в программе программируемого контроллера, из которых может быть прямо определено физическое или логическое расположение переменной.
3.31 двойное слово (double word): Элемент данных, содержащий 32 бита.
3.32 динамическое связывание (dynamic binding): Ситуация, в которой экземпляр вызова метода возвращается во время выполнения в соответствии с фактическим типом экземпляра или интерфейса.
3.33 оценка (evaluation): Процесс установления значения выражения, функции, выходных переменных сети или экземпляра функционального блока во время выполнения программы.
3.34 элемент управления выполнением (execution control element): Элемент языка, контролирующий поток выполнения программы.
3.35 задний фронт (falling edge): Часть временной диаграммы сигнала, где происходит переход логической переменной из 1 в 0.
3.36 функция (function): Элемент языка, который во время выполнения обычно вырабатывает результат в виде одного элемента данных и, возможно, дополнительные выходные переменные.
3.37 экземпляр функционального блока (function block instance): Экземпляр типа функционального блока.
3.38 тип функционального блока (function block type): Элемент языка, состоящий из:
— определения структуры данных, разделенной на входные, выходные и внутренние переменные; и
— набора операций или набора методов, выполняемых над элементами структуры данных при вызове типа функционального блока.
3.39 функциональная блоковая диаграмма (function block diagram): Сеть, узлы которой являются экземплярами функциональных блоков, графически представленные функции или вызовы метода, переменные, литералы и метки.
3.40 родовой тип данных (generic data type): Тип данных, представляющий более одного типа данных.
Светофор на ПЛК – все языки МЭК 61131-3
В прошлой статье Светофор на ПЛК – 30 блоков программа для ПЛК светофора была написана только на FBD.
Новая программа использует все 5 языков стандарта МЭК 61131-3.
Первая секция на IL.
Это похожий на ассемблер язык.
В секции всего 2 строки:
LD — загрузка значения в аккумулятор
S — установка переменное в true, если в аккумуляторе true, иначе переменная не изменяется.
Генератор импульсов периодом 0,5 секунды написан на FBD, как и в предыдущей версии.
Основная секция написана на SFC. Как мне кажется, это самый сложный для применения язык в стандарте МЭК 61131-3.
Программа состоит из шагов и переходов.
При запуске программы выполняется шаг Init.
Следующий шаг выполняется, если условие перехода за ним истинно. Шаг может быть выполнен с задержкой, время шага может быть ограничено.
На рисунке ниже только один переход содержит условие. Остальные переходы выполняются всегда.
В конце цепочки выполняется безусловный переход на метку WaitPeople.
Каждый шаг выполняется с задержкой, соответствующей требуемому времени пребывания светофора в заданном состоянии.
При выполнении каждого шага выполняется определённое действие. В моей программе задано выполнение секции на языке ST.
В проекте добавлена переменная uState, соответствующая состоянию светофора.
Вот содержимое всех секций, выполняемых по шагам:
Секция на ST в зависимости от состояния uState записывает значение на булевские переменные, которые потом будут переписаны на выходы. Это можно было сделать в секциях stStep_1..stStep_8, но тогда бы вы не увидели оператора CASE и не поняли бы, что ST — самый близкий для программиста язык из стандарта МЭК 61131-3. Так же в этой секции введена защита от программных ошибок в виде мигающего желтого при неопределенном состоянии.
Язык LD близок к схемам релейной логики. Основа LD — контакты и катушки. На схеме видно, что слева расположен проводник, от которого «напряжение» (true) распространяется направо по ответвлениям.
Нормально разомкнутый контакт (похож на конденсатор) замыкается, если привязанная к нему переменная истинна.
Нормально замкнутый контакт (похож на конденсатор со слэшем внутри) замыкается, если привязанная к нему переменная ложна.
Катушка (2 скобки) пропускает «напряжение» через себя и переписывает его значение (false или true) в привязанную к ней переменную.
В программе данная секция используется для того, чтобы переписать промежуточные переменные в переменные, привязанные к выходам, с защитой от программной ошибки. Зеленый свет загорается только если нет красного на данном светофоре и зеленого на другом светофоре.
Результат работы программы:
Применение всех 5 языков в одной программе не оправдано. Но в реальных проектах иногда приходится применять одновременно 2..3 языка. Чаще всего я использую ST, реже FBD, еще реже IL. SFC и LD в реальных проектах мне применять не приходилось.
UPD. Сделал исправление — убрал лишний ноль из названия стандарта по замечанию RouR
UPD2. Небольшое изменение в описании LD.
UPD3. Исправлены грамматические ошибки.