Программа для ld программирования

Обновлено: 07.07.2024

Примеры программ на языке LAD для программируемых логических контроллеров

Одним из базовых и достаточно распространенных языков программирования промышленных логических контроллеров (ПЛК) является язык релейной (лестничной) логики — Ladder Diagram (англ. LD, англ. LAD, рус. РКС).

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

С середины XX века в промышленности широко использовались релейные системы автоматики. В начале 1970-х гг. релейные автоматы начали постепенно вытесняться программируемыми контроллерами. Некоторое время те и другие работали одновременно и обслуживались одними и теми же людьми. Так появилась задача «переноса» релейных схем в ПЛК.

Различные варианты программной реализации релейных схем создавались практически всеми ведущими производителями ПЛК. Благодаря простоте представления LAD обрел заслуженную популярность, что и стало основной причиной включения его в стандарт МЭК.

Синтаксис команд языка LAD очень похож на синтаксис языка описания релейно-контактных схем. Такое представление позволяет проследить «поток энергии» между шинами при его прохождении через различные контакты, составные элементы и выходные элементы (катушки).

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

Интерфейс программы, написанной на языке LAD, понятен и прост, так как управляющая LAD-программа является циклической и состоит из строк-ступенек, соединенных слева с вертикальной шиной, а протекание или отсутствие тока в цепи соответствует результату логической операции (истина - ток течет; ложь - ток отсутствует).

На рисунках 1 и 2 представлены сегменты программы, описывающей два действия по управлению двигателем конвейера на языке LAD:

нажатие любой кнопки «Пуск» включает двигатель;

нажатие любой кнопки «Стоп» или срабатывание датчика отключают двигатель.

Рис. 1. Включение двигателя после нажатия любой кнопки «Пуск»

Рис. 2. Отключение двигателя после нажатия любой кнопки «Стоп» или срабатывания датчика

Вторая задача состоит в определении направления движения ленты транспортера. Пусть на ленте установлены два фотоэлектрических датчика (РЕВ 1 и РЕВ 2) для определения направления движения предмета. Оба работают как нормально открытые контакты.

На рис. 3 - 4 представлены сегменты программ на языке LAD для трех действий:

если на входе 10.0 сигнал изменяется с «0» на «1» (нарастающий фронт), и при этом состояние сигнала на входе I0.1 равно «0», то предмет на ленте транспортера движется влево;

если на входе 10.1 сигнал изменяется с «0» на «1» (нарастающий фронт), и при этом состояние сигнала на входе I0.0 равно «0», то предмет на ленте транспортера движется вправо;

если оба фотодатчика перекрыты, то это значит, что предмет находится между датчиками.

Рис. 3. Движение предмета влево, если вход I0.0 меняет состояние с «0» на «1», и при этом вход I0.1 равен «0»

Рис. 4. Движение предмета вправо, если вход I0.1 изменяется с «0» на «1», и при этом вход I0.0 равен «0»

Рис. 5. Нахождение предмета между датчиками

На рис. 3 — 4 приняты обозначения:

вход 1.0 (РЕВ 1) - фотодатчик №1;

вход 10.1 (РЕВ 2) - фотодатчик №2;

М0.0 (РМВ 1) - тактовый меркер № 1;

М0.1 (РМВ 2) - тактовый меркер №2;

выход Q4.0 (LEFT) — индикатор движения налево;

выход Q4.1 (RIGHT) - индикатор движения направо.

На рис. 6 - 9 представлены простейшие программы с таймером для четырех действий:

если с т атус таймера Т1 равен «0», за г ружается значение времени 250 мс в Т1 и Т1 запускается как таймер с удлиненным импульсом;

состояние таймера временно сохраняется во вспомогательном меркере;

если статус таймера Т1 равен «1», переход на метку М001;

когда время таймера Т1 истекает, меркерное слово 100 увеличивается на «1».

Рис. 6. Запуск таймера с удлиненным импульсом

Рис. 7 . Временное сохранение состояния таймера во вспомогательном маркере

Рис. 8 . Переход на метку

Рис. 9 . Увеличение меркерного слова на «1», когда время таймера Т1 истекает

Пример программы на языке LAD для контроллера LOGO

Универсальный логический модуль LOGO! является компактным функционально законченным изделием, предназначенным для решения наиболее простых задач автоматизации с логической обработкой информации.

Рис. 10. Модуль LOGO

С помощью модуля LОGO! решена задача управлени я системой отопления в душевых помещениях административно-производственного корпуса .

Состав системы отопления включает следующие компоненты:

три отопительных котла, используемых для отопления помещений;

три насоса, обеспечивающих циркуляцию теплоносителя;

трубопровод и регистры отопления.

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

Кроме этого в системе отопления могут быть предусмотрены дополнительные источники обогрева, например, электрокалориферы. Пусть включение электрокалориферов осуществляется три раза в сутки: с 6 00 до 8 00 ; с 15 00 до 17 00 ; с 23 00 до 01 00 . Если по каким-то причинам в момент посещения рабочим персоналом душевых помещений температура будет ниже нормы, то дополнительно включаются электрокалориферы.

В качестве входов и выходов используются:

AI1 - входной сигнал с датчика измерения давления о критическом уровне давления теплоносителя;

AI2 — входной сигнал с датчика измерения давления о низком уровне давления теплоносителя, позволяющего дальнейшую работу;

AI3 — входной сигнал с датчика измерения температуры о повышении рабочей температуры теплоносителя;

вход 13 - входной сигнал об отсутствии электроэнергии;

вход 14 - входной сигнал об отсутствии природного газа;

выход Q1 - выходной сигнал, осуществляющий включение системы отопления (циркуляционный насос №1);

выход Q2 - выходной сигнал, осуществляющий включение системы заполнения;

выход Q3 выходной сигнал, осуществляющий отключение котлов системы отопления (котел отопления №1);

выход Q4 выходной сигнал, осуществляющий отключение подачи газа к котлам;

выход Q5 — выходной сигнал, осуществляющий включение системы отопления (циркуляционный насос №2);

выход Q6 - выходной сигнал, осуществляющий включение системы отопления (циркуляционный насос №3);

выход Q7 выходной сигнал, осуществляющий отключение котлов системы отопления (котел отопления №2);

выход Q8 выходной сигнал, осуществляющий отключение котлов системы отопления (котел отопления №3);

С2 - кнопка пуска.

В001 - трехрежимный семидневный таймер.

AI1 - входной сигнал с датчика измерения температуры о температуре в душевых помещениях;

выход Q1 - выходной сигнал, осуществляющий включение электрокалориферов (электрокалорифер №1);

выход Q2 — выходной сигнал, осуществляющий включение электрокалориферов (электрокалорифер №3);

выход Q3 выходной сигнал, осуществляющий включение электрокалориферов (электрокалорифер №3).

Программа для автоматизированной системы управления отоплением, написанная на языке программирования в виде релейно-контактных символов (LAD) в программном пакете " LOGO! Soft comfort " показана на рис. 1 1 и 1 2.

Рис. 11 . Первый фра г мент программы на языке LAD

Рис. 1 2 . Второй фрагмент программы на языке LAD

Если Вам понравилась эта статья, поделитесь ссылкой на неё в социальных сетях. Это сильно поможет развитию нашего сайта!

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

Рассмотрим отличия написания программы для ПЛК и микроконтроллера. Для примера возьмем простейшую задачку для МК - мигающий светодиод. Подозреваю, что все начинали знакомство с МК именно с этой задачи. Алгоритм будет следующим

  1. Записать в порт лог. 1.
  2. Временная задержка
  3. Записать в порт лог.0.
  4. Временная задержка
  5. Переход по метке на начало программы.

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

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

С учетом выше сказанного, правильный алгоритм будет выглядеть следующим образом:
1. Проверить таймер, если время паузы вышло, то
а) инвертировать выход
б) начать новый отсчет
2. Конец программы

Реализуем данный алгоритм на практике ниже, а теперь рассмотрим основные особенности LAD (Ladder Diagram) языка.

Релейная схема представляет собой две вертикальные шины, между ними расположены горизонтальные цепи образованные контактами и обмотками реле. Пример на рисунке:

Пример программы на языке LAD

Нормально разомкнутый контакт

- нормально разомкнутый контакт

Нормально замкнутый(инверсный) контакт

- нормально замкнутый(инверсный) контакт

Обмотка реле

- обмотка реле

Количество контактов цепи может быть разным, а обмотка одна.

Любому контакту ставится в соответствие логическая переменная, определяющая его состояние. Если нормально замкнутый контакт замкнут, то ИСТИНА, если размокнут – Ложь, для инверсного наоборот, он замкнут когда переменная имеет значение ЛОЖЬ. Имя переменной пишется над контактом и служит его названием.

Последовательно соединенные контакты равносильны логической операции И, а параллельно-монтажное ИЛИ. Инверсный контакт равносилен операции НЕ. Параллельное соединение обмоток допускается, а последовательное нет. Обмотка реле также может быть инверсной, тогда она копирует в соответствующую логическую переменную инверсное состояние цепи.

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

Любая переменная в рамках одной цепи имеет одно и то же значение. Если даже реле в цепи изменит переменную, то новое значение поступит на контакты только в следующем цикле. Цепи расположенные выше получают новое значение переменной сразу, а цепи расположенные ниже – только в следующем цикле. Строгий порядок выполнения очень важен, и благодаря ним LAD- диаграмма сохраняет устойчивость при наличии обратных связей.

Хоть это и противоречит аналогии LAD с релейными схемами, порядок выполнения LAD- программы можно нарушить с помощью меток и переходов. Это ухудшает читаемость программе, и в них бывает сложно разобраться, но как говориться если очень хочется, то можно. Для этого желательно разбить программу на модули, и делать переходы между модулями.

Возможности LAD программы можно расширить, вставляя функциональные блоки. Вставлять можно все стандартные функциональные блоки, которые содержаться в МЭК. Описание для функциональных блоков можно найти в справке.

Давайте составим нашу первую программу на LAD в среде CoDeSys. CoDeSys можно скачать в интернете, достаточно воспользоваться поисковиком

После установки, выбираем создать новый проект, и CoDeSys попросит выбрать целевую платформу для ПЛК. Указание целевой платформы необходимо, чтобы среда знала, для какого типа контроллера пишется программа. Выбираем 3S CodeSyS Sp PLCWinNT V2.4 и жмем OK.

Окно настройки целевой платформы

Имя проекта оставляем по умолчанию, язык выбираем LD

Выбор языка и имя проекта

Интерфейс программы на русском языке, и интуитивно понятен. При наведении на элемент всплывает имя. Советую рассмотреть все элементы, а также пункты главного меню.

Интерфейс программы

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

Нормально разомкнутый контакт

Вместо вопросительных знаков пишем имя нашей переменной, например SB, и нажимаем Enter, выходит окно объявление переменной, выбираем Bool и нажимаем OК.

Окно объявления переменной

Рассмотрите, какие типы можно выбрать, а также какие классы переменных.

Давайте, реализуем программы для мигания светодиодом, а если говорить в общем, то программа для генератора одиночных импульсов

Для реализации программы используем функциональные блок таймер TP. Таймер TP – этой таймер одиночного импульса с заданной по входу PT длительностью.

Пока IN равен FALSE, выход Q = FALSE, выход ET = 0. При переходе IN в TRUE выход Q устанавливается в TRUE и таймер начинает отсчет времени на выходе ET до достижения длительности, заданной PT. Далее счетчик не увеличивается. Таким образом, выход Q генерирует импульс длительностью PT по фронту входа IN.

Временная диаграмма работы TP:

Временная диаграмма работы TP

Для вставки TP, на панели элементов выбираем:

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

И у нас всплывает ассистент выбора функционального блока.

Вид окна ассистента ввода

Скачайте файл проекта, и давайте рассмотрим как он работает.

Программа генератора одиночных импульсов

В начальный момент X= False , поэтому инверсный контакт X замкнут и таймер T2 запущен, выход Q= True, поэтому цепь включена. А так как обмотка в цепи инверсная, значит она копирует инверсное состояние цепи в X , и X остается False, после переполнения таймера Q = False , и инверсная обмотка переводит X в True. После этого запускается T1, после переполнения скидывает X в False и все повторяется. Переменная X является выходом генератора. Таймер T2 устанавливает паузу, а T1 длительность импульса.

Компилируем проект Проект -> Компилировать

В пункте онлайн выбираем Режим эмуляции , а затем Подключение и Старт. И видим, наша схема начинает переключаться, цепь где «протекает ток» выделяется синим цветом. Также в области объявления переменных видим текущее значение переменных.

Выход генератора можно поглядеть с помощью цифрового трассировщика, для этого переходим на вкладку Ресурсы в нижнем левом углу

Вкладка Ресурсы

Выбираем Цифровой трассировщик -> Дополнение -> Настройка трассировки, выйдет следующее окно

Окно конфигурации трассировки

Цикличность записи поставим Вручную, нажимаем на менеджер и выбираем переменные X(Bool)

Выбор переменной для трассировщика

Нажимаем Ok . Выбираем перо для нашей переменной

Выбираем в онлайн Подключение, нажимаем Старт , далее Дополнительно -> Начать трассировку, также выберите пункт Автоматическая трассировка

Цифровая трассировка проекта генератора одиночных импульсов

Рассмотрим еще один пример управление двигателем с электронной коммутацией обмоток статора
Саму программу представлять не буду, скачайте проект. А об алгоритме работы расскажу.

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

Примеры простых программ для ПЛК в CodeSys на языке релейных диаграмм

В этой статье показан пример трех простых программ для программируемых логических контроллеров (ПЛК) . Все программы написаны для автоматизации систем управления различными установками в промышленности. Они носят учебный характер и могут использоваться для обучения программированию ПЛК.

Ранее по этой теме мы рассматривали несколько типовых решений в программах для ПЛК, которые могут использоваться для управления электродвигателями: Схемы пуска электродвигателя на языке лестничных диаграмм LD для ПЛК

Примеры простых программ для ПЛК в CodeSys на языке релейных диаграмм

В этой подборке рассмотрена автоматизация следующих процессов:

Автоматическая система для отбрасывания бутылок;

Автоматический выбор цвета краски;

Автоматизация вентиляционной системы.

Идеи и иллюстрации технологических технологических процессов взяты с сайта InstrumentationTools .

Все программы написаны в CodeSys на языке релейных диаграмм, в англоязычном варианте это язык Ladder Diagram, сокращенно LD.

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

Автоматическая система для отбрасывания бутылок

Принцип работы: данная система позволяет отбрасывать упавшие бутылки, которые затрудняют процесс производства.

Схема технологического процесса:

Автоматическая система для отбрасывания бутылок

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

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

Программа на языке релейных диаграмм для ПЛК в CodeSys автоматической системы отбраковки бутылок:

Программа на языке релейных диаграмм для ПЛК в CodeSys автоматической системы отбраковки бутылок

Программа в режиме эмуляции:

Программа в режиме эмуляции

Описание работы программы:

Нажимаем кнопку «START» тем самым питая схему. Запускается цикл и конвейер. Во второй части цепи находится два индукционных датчика «Х1» и «Х2», с помощью которых и определяется положение бутылки на конвейере. Когда бутылка упала срабатывает датчик «Х2» и его контакт разрывает цепь тем самым, не пропуская упавшую бутылку.

Когда бутылки перемещаются по конвейеру, эти датчики определяют положение бутылок независимо от того, стоят они или упали. Датчик X2 определяет нижнее положение бутылки, а датчик X1 верхнее положение бутылки. Если датчик X2 определяет бутылку, а датчик X1 не определяет, то включается пневматический привод ( Cilinder ), и он отбросит бутылку с конвейера. После этого остальные бутылки попадут на станцию розлива воды и весь цикл будет завершен.

Процесс сброса бутылки:

Процесс сброса бутылки

Автоматический выбор цвета краски

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

Схема технологического процесса:

Автоматический выбор цвета пигмента

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

Как мы знаем, смешивание желтого и синего - это зеленый цвет, поэтому нет необходимости в отдельном клапане для зеленого цвета. Когда желтый и синий цвета заполнены одновременно, он станет зеленым.

Селекторный переключатель используется для выбора цвета в системе, а переключатель ON/OFF используется для остановки системы.

Программа для ПЛК в CodeSys:

Программа для ПЛК в CodeSys

Описание работы программы:

Когда переключатель ВКЛ/ВЫКЛ (I2.0) находится в положении ВКЛ и нажата кнопка START, загорается лампа CYCLEON. Если цикл включен и выбрана краска желтого цвета ( YELLOWPIGMENTSELECTION ), клапан управления желтого цвета ( YELLOWCONTROLVALVE ) будет включен. Если цикл включен и выбрана краска синего цвета (BLUEPIGMENTSELECTION), клапан управления синим цветом (BLUECONTROLVALVE) будет включен. Если выбрана краска зеленого цвета (GREENPIGMENTSELECTION), оба клапана будут включены, а краска станет зеленого цвета.

Программа в режиме эмуляции (заполнение бутылки краской зеленого цвета):

Программа в режиме эмуляции

Автоматизация движения механизма в функции пути

Курс по программированию контроллеров:

Автоматизация вентиляционной системы

Программа ПЛК для системы управления вентиляторами для промышленности.

Во время работы системы должны работать любые два вентилятора из трех. Для запуска любых двух вентиляторов - скажем, вентилятора 2 и вентилятора 3 - для каждого предусмотрены отдельные кнопки запуска и остановки.

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

Состояние «ВКЛ» вентиляторов, а также состояние основного питания должно указываться соответствующим светодиодом. Если есть неисправность с более чем одним вентилятором, то это остсояние должно указываться мигающим светодиодом с частотой 5 Гц. Неисправность с одним вентилятором или отсутствие неисправности с вентилятором должны указываться постоянным светом на индикаторе состояния неисправности.

Это простой пример блока управления вентиляторами, используемый в промышленности.

Автоматизация вентиляционной системы

Программа для ПЛК в CodeSys:

Программа для ПЛК в CodeSys

Продолжение программы

В программе используется схема запуска цикла - катушка CYCLEK. Его можно запустить, нажав START, и остановить, нажав STOP. Главный выключатель (MS) должен быть включен.

Когда цикл включен (CYCLEK) и неисправностей вентилятора 2 и вентилятора 3 нет, то вентилятор 2 (FAN2) и вентилятор 3 (FAN3) будут включены. Если вентилятор 2 или вентилятор 3 неисправен, то будет запущен вентилятор 1 (FAN1).

В системе, если какие-либо два вентилятора из трех неисправны, то лампа индикации неисправности (FIND) начнет мигать с частотой 5 Гц. Для этого нужно использовать специальный таймер, но чтобы не усложнять программу ограничимся пока в ней отдельным контактом. Индикаторные лампы для вентилятора 1, вентилятора 2 и вентилятора 3 включаются в соответствии с сигналом неисправности.

Программа в режиме эмуляции (случай поломки вентилятора 3):

Программа в режиме эмуляции

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

Structured Text

Книга "Изучаем Structured Text МЭК 61131-3": Ссылка на книгу

Применение ПЛК Siemens:

Любите умные гаджеты и DIY? Станьте специалистом в сфере Internet of Things и создайте сеть умных гаджетов!

Записывайтесь в онлайн-университет от GeekBrains:

Обучение Интернет вещей и современные встраиваемые системы

Изучить C, механизмы отладки и программирования микроконтроллеров;

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

Получить удостоверение и сертификат, подтверждающие полученные знания.

Starter box для первых экспериментов в подарок!

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

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

Структурированный текст, ST

Язык ST является текстовым языком высокого уровня и очень сильно напоминает Паскаль:

Листинг 2. Пример программы на языке ST

IF Voltage>220 THEN

Current:=Current - 10; (*Если V>220 В, то уменьшить ток на 10*)

Current:=50; Speed:= ON;(*Установить ток 50А и включить мотор*)

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

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

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

Графический язык релейной логики впервые появился в виде электрических схем, которые состояли из контактов и обмоток электромагнитных реле (Рис. 1).

Рис. 1. Пример программы на языке LD (слева) и ее эквивалент в виде электрической цепи с реле и выключателями (справа)

Рис. 1. Пример программы на языке LD (слева) и ее эквивалент в виде электрической цепи с реле и выключателями (справа)

Такие схемы использовались в автоматике конвейеров для сборки автомобилей до эры микропроцессоров.

Язык релейной логики был интуитивно понятен людям, слегка знакомым с электротехникой и поэтому оказался наиболее распространенным в промышленной автоматике. Обслуживающий персонал легко находил отказ в оборудовании, прослеживая путь сигнала по релейной диаграмме.

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

Инкапсуляция (от лат. in capsule — в оболочке) — это заключение данных и функционала в оболочку. В объектно-ориентированном программировании в роли оболочки выступают классы: они не только собирают переменные и методы в одном месте, но и защищают их от вмешательства извне.

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

Сложные вычисления в этом языке невозможны. Недостатком является также то, что только маленькая часть программы умещается на мониторе компьютера или панели оператора при программировании.

Несмотря на указанные недостатки, язык LD относится к наиболее распространенным в мире, хотя используется для программирования только простых задач.

Диаграммы функциональных блоков, FBD

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

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

Функциональные блоки представляют собой фрагменты программ, написанных на IL, SFC или других языках, которые могут быть многократно использованы в разных частях программы и которым соответствует графическое изображение, принятое при разработке функциональных схем электронных устройств, см. Рис. 2.

Рис. 2. Пример программы на языке FBD

Язык FBD может быть использован для программирования функций, функциональных блоков и программ, а также для описания шагов и переходов в языке SFC. Функциональные блоки инкапсулируют данные и методы, чем напоминают объектно-ориентированные языки программирования, но не поддерживают наследование и полиморфизм.

Все то, что во время компиляции или исполнения программы может содержать или обрабатывать значения различных типов — является полиморфным, например:

  • переменные, меняющие свое значение на значение другого типа
  • объекты, обладающие свойствами, которые могут менять значение текущего типа на значение другого типа
  • функции, принимающие аргументы различных типов

Но пожалуй, самое лаконичное определение полиморфизма, можно найти в книге Бенджамина Пирса «Типы в языках программирования»: Термин «полиморфизм» обозначает семейство различных механизмов, позволяющих использовать один и тот же участок программы с различными типами в различных контекстах.

Под контекстом, грубо говоря, понимается набор всех доступных переменных в текущем участке программы.

Типичным применением языка FBD является описание «жесткой логики» и замкнутых контуров систем управления.

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

К типовым блокам относятся блок таймера, ПИД-регулятора, триггера, генератора импульсов, фильтра, и т. п.

Последовательные функциональные схемы, SFC

SFC называют языком программирования, хотя по сути это не язык, а вспомогательное средство для структурирования программ.

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

Язык SFC предназначен для описания системы управления на самом верхнем уровне абстракции, например, в терминах «Старт», «Наполнение автоклава», «Выполнение этапа № 1», «Выполнение этапа № 2», «Выгрузка из автоклава».

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

Например, алгоритм автоматического соединения модема с коммутируемой линией описывается состояниями «Включение», «Обнаружение тона», «Набор номер», «Идентификация сигнала» и переходами «Если длинный — то ждать 20 сек», «Если короткий — перейти в состояние «Набор Номера» и т.д.

yazyki-programmirovaniya-plc-ld

Продолжаем разговор о языках программирования ПЛК.

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

Как я и обещал, в этой статье мы поговорим о языке LD – ladder diagramm, или языке релейной логики, который очень хорошо понятен тем, кто имеет дело с электрическими схемами. Типы данных здесь, естественно такие же, как и в IL.

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

Его достоинство – очень хорошая наглядность и восприятие для не очень сложных логических схем.

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

Начнем с того, что этот язык пришёл, фактически, из обычных релейных схем. Обозначения контактов в этом языке немного отличаются от тех, что приняты у нас:

— нормально разомкнутый контакт (NO)

— нормально замкнутый контакт (NC)

— или тоже катушка реле

Но, в общем, эти обозначения вполне интуитивно понятны.

Пример схемки на языке программирования LD (контроллер Simatic S1200):

Shema-na-LD

В этом примере, если приходит команда «Открыть» от кнопки (RK14_btnOpen) и нет открытого состояния клапана (RK14_IOPEN), то формируется выходная команда открыть клапан (RK14_COPEN).

Вполне себе понятная стандартная релейная схема.

Есть, правда, и отличия. Как видно на рисунке, в схеме с левой стороны, как и обычно, присутствует шина питания. Но! Если в электрической релейной схеме это питание подается сразу на все элементы, к ней присоединенные, то в контроллере выполнение команд происходит последовательно слева направо и сверху вниз.

Что это означает на практике?

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

Да, кстати. Уже, я думаю, понятно, что реле в языке LD имеет бесконечное (в пределах памяти контроллера) множество контактов NO и NC, имеющих такое же имя (адрес) как и само реле (в нашем примере это RK14_COPEN).

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

Кроме обычных реле присутствуют и реле с самофиксацией. Что бы установить такое реле во включённое положение используется команда SET, а чтобы выключить – команда RESET. Обозначаются они в стандарте следующим образом:

SET, значение «Tag_2» будет установлено в логическую «1», пока не применится команда

RESET, которая сбросит значение «Tag_2» в «0».

Кроме того, катушка реле тоже может быть инвертирована, и выглядит это так:

т.е., если на реле нет напряжения, то оно сработано, а если появляется, то отпущено.

Присутствуют в арсенале этого языка и реле времени. Выглядят они так:

— таймер с задержкой включения,

— таймер с задержкой отключения.

Есть еще TP – генератор импульса, TONR – аккумулирующий таймер. А есть и счетчики импульсов CTU – с увеличением, CTD – с уменьшением, CTUD – с увеличением и с уменьшением.

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

Кроме того, LD позволяет использовать и, так называемые, функциональные блоки – небольшие законченные программы, выполняющие определенную функцию и имеющие набор входов и выходов. Функциональные блоки есть готовые и даже определенные стандартом МЭК 61131-3. А есть возможность использовать и функциональные блоки написанные пользователем на любом другом стандартном языке программирования ПЛК. Т.е., по сути, возможности языка LD в таком варианте безграничны.

Пример вызова функционального блока из релейной логики:

LD_vizov-FB

В рамках одной статьи описать все возможности и команды языка LD, конечно же, не возможно. Или это будет уже не статья :).

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

Поэтому, самый надёжный вариант изучения языка — это изучение мануала по программированию конкретного контроллера.

А моя задача была дать понимание и представление об этом языке, а дальше – обращайтесь к Марксу, т.е. к «Руководству по программированию контроллеров …» (вместо троеточия вставляете свой контроллер).

Пишите вопросы, пожелания, замечания в комментариях ниже. Если статья понравилась – не жадничайте, делитесь с друзьями и коллегами в соцсетях. 🙂

Читайте также: