Codesys язык st мигание светодиода

Подробности об языке программирования на ST в CoDeSyS

Прежде чем мы с вами будем рассматривать упрощённую графическую систему программирования для технологов, хотелось бы в двух словах рассказать о базисном языке программирования СИ. Язык ST CoDeSyS отличается от других своей гибкостью и адаптивностью под любые задачи. Он позволяет обрабатывать сложные решения и видеть всю картину в целом. Чаще всего применяется в функциональных блоках для обработки алгоритма той или иной части рабочего органа станка или линии.

Из этой статьи вы узнаете:

Здравствуйте уважаемые Дамы и Господа! Меня зовут Гридин Семён, и я являюсь автором этого блога. В данном посте я хочу обсудить с вами базовые понятия языка программирования CoDeSyS. Называется он ST CoDeSyS, очень сильно напоминает СИ.

Язык программирования ST и типы переменных

ST (Structured text) — это одна из составных частей комплекса CoDeSyS и представляет собой текстовый редактор высокого уровня. Он очень похож на Basic или Pascal. Такой способ программирования является идеальным инструментом для людей-программистов. Преимуществом языка является создание сложных математических и разветвленных алгоритмов.

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

В чём преимущество данного способа программирования? давайте с вами перечислим:

С этим мы разобрались, но, прежде чем переходить к непосредственному изучению азов программирования, необходимо ознакомиться с элементом языка — тип данных. Хочу обратить внимание, этот элемент практически схож во многих си-подобных языках (Питон, Ардуино IDE, СИ# т.д.)

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

В таблице ниже я представлю типы данных, которые используются чаще всех:

Тип Название Предел Размер в байтах
BOOL Логическое 1 бит 1 бит
BYTE Целочисленое 8 бит 1 байт
WORD Целочисленое 16 бит 2 байта
INT Целочисленое -32768-32767 2 байта
UINT Целочисленое 0-65535 2 байта
FLOAT Вещественное ±10³³ 4 байта
DATE_AND_TIME Дата и время
STRING Строковое

Перечень основных операторов

Операторы — это символы определённых операций. Но их можно определить и как функции, наделёнными определёнными привилегиями. Они имеют определённые ключевые слова и формы для представления на ST.

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

Источник

Программирование ПЛК

Особенности языка LAD в CodeSys

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

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

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

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

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

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

Читайте также:  Домашняя работа на французском языке

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

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

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

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

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

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

Идея релейных схем, такова, что все цепи работают параллельно, т.е. ток во все цепи подается одновременно. Но мы знаем, что программу процессор выполняет последовательно, и мы не можем это сделать одновременно. Так и в 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, на панели элементов выбираем:

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

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

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

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

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

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

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

Источник

Codesys язык st мигание светодиода

Профиль
Группа: Участник
Сообщений: 8
Регистрация: 29.10.2012

Репутация: нет
Всего: нет

На входе в квартиру установлены два датчика: один снаружи квартиры, другой внутри. Если
срабатывает сначала внешний, а потом внутренний датчики, то человек зашел в квартиру. Если
срабатывает сначала внутренний, а потом внешний датчики, то человек вышел из квартиры.
Необходимо включать свет в квартире, когда человек зашел у нее, и выключать светло через
10 секунд после выхода человека из квартиры. Также необходимо считать количество людей,
которые зашли в квартиру.

Читайте также:  Бесплатные уроки финского языка

На основе задания разработать :
a) прикладную программу для ПЛК;
b) дать описание работы прикладной программы.

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

Код
PROGRAM PLC_PRG
VAR
vh_N: BOOL;
N: INT;
vuh_N: BOOL;
TMR: TOF;
vuh: BOOL;
vh: BOOL;
lamp: BOOL;
END_VAR

IF vuh AND NOT (vh_N)
THEN;
N:=N+1;
END_IF;
IF vh AND vuh AND NOT (vuh_N)
THEN;
N:=N-1;
END_IF;
IF N>0
THEN;
lamp:=TRUE;
END_IF;
IF N=0
THEN;
lamp:=FALSE;
END_IF;
TMR( IN:=%QX1.0,PT:=T#10s);
vh_N:=vh;
vuh_N:=vuh;

Присоединённый файл ( Кол-во скачиваний: 3 )
7.pdf 48,19 Kb

АСУТП-кодер

Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 1
Всего: 95

Код
PROGRAM PLC_PRG
VAR
Sensor_Out AT %IX0.0 : BOOL;
Sensor_Out_Flag : BOOL;
Sensor_In AT %IX0.1 : BOOL;
Sensor_In_Flag : BOOL;
Lamp AT %QX0.0 : BOOL;
ActiveLamp : BOOL;
TD : TOF;
Count : INT:=0;
END_VAR

IF Sensor_Out AND NOT Sensor_Out_Flag THEN // Появился сигнал с первого датчика
IF Sensor_In_Flag THEN // Если уже есть сигнал со второго датчика
Count:=Count-1; // Увеличиваем счетчик людей
END_IF;
ELSIF Sensor_In AND NOT Sensor_In_Flag THEN // Появился сигнал со второго датчика
IF Sensor_Out_Flag THEN // Если уже есть сигнал с первого датчика
Count:=Count+1; // Уменьшаем счетчик людей
END_IF;
END_IF;
Count:=SEL(Count 0,PT:=T#10S); // Таймер
Lamp:=TD.Q; // Формируем выход контроллера

Sensor_Out_Flag:=Sensor_Out; // Защелка внешнего датчика
Sensor_In_Flag:=Sensor_In; // Защелка внутреннего датчика

Профиль
Группа: Участник
Сообщений: 8
Регистрация: 29.10.2012

Репутация: нет
Всего: нет

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | SCADA-системы и контроллеры стандарта IEC (МЭК) | Следующая тема »

[ Время генерации скрипта: 0.0882 ] [ Использовано запросов: 20 ] [ GZIP включён ]

Источник

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Structured Text

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

Источник

Codesys язык st мигание светодиода

есть ли подобный пример на CoDeSys?

есть ли подобный пример на CoDeSys?

Хорошая задачка! +1 задача в сборник 🙂

есть ли подобный пример на CoDeSys?

Есть. Разработал года четыре назад и использую постоянно 🙂

Есть. Разработал года четыре назад и использую постоянно 🙂

В визуализации есть таблица алармов. Выполняет аналогичную работу.

А примерчика ни у кого нет?

X0-кнопка съема звонка,
L0-звонок.

X0-кнопка съема звонка,
L0-звонок.

Что-то странно, как-то программка работает.

Как мне кажется, алгоритм работы должен быть такой.

1). При срабатывании любого из Х1, Х2, Х3 или Х4, должна мигающим светом гореть соответствующая по номеру лампа (фиксация первопричины).
Даже при размыкании датчика, лампа должна продолжать мигать до появления сигнала «сброс».

2). При срабатывании любого из следующих из датчиков, должна зажечься и гореть постоянным светом соответствующая по номеру лампа.
При размыкании датчика лампа всё равно горит до появления сигнала «сброс».

Звуковой сигнал включается и по первому и по второму случаю.

3). Кнопкой «съём звукового сигнала» сбрасывается звуковой сигнал, а кнопкой «сброс» полностью сбрасываются и световые и звуковой сигналы.

Что-то странно, как-то программка работает.

Как мне кажется, алгоритм работы должен быть такой.

Может, выразился не совсем понятно.
Представьте ситуацию.

У Вас на объекте 3 датчика безопасности.
Сработал первый. Замигала лампа №1. Этим зафиксировалась первопричина неисправности. Зазвонил звонок. Вы отключили звонок кнопкой «съём звукового сигнала». Но, при этом лампа как мигала, так и мигает.
Сработал второй датчик. Ровным светом загорелась вторая лампа. Зазвонил звонок. Вы его опять отключили кнопкой «съём звукового сигнала». Но лампа №1 продолжает мигать и лампа №2 продолжает гореть ровным светом.
При этом, датчики уже могли вернуться в норму, но лампы как светили, так и светят.
Когда Вам стала не нужна «иллюминация», Вы нажимаете кнопку «сброс» и возвращаете систему в первоначальное состояние, т.е., все лампы погашены, звонок не звонит.

Поэтому, должно учавствовать 2 кнопки:

1). Это Съём именно звукового сигнала (до прихода следующего аварийного сигнала), т.е., обеспечивается повторность действия звуковой сигнализации. Но съём звукового сигнала не должен влиять на световые сигналы.

2). Кнопка «Сброс» нужна для возврата автоматики безопасности в исходное состояние, т.е. осуществляется сброс световой сигнализации и, подспутно, звуковой.

Таким, примерно образом, работает блок БЗК-М «Прома».

ваш алгоритм я понил,но он НЕ приемлим именно с эргономической тчк. зрения,

ваш алгоритм я понил,но он НЕ приемлим именно с эргономической тчк. зрения,

Должна происходить ФИКСАЦИЯ ВСЕХ аварийных параметров в виде горения ламп.
Причём, первая из поступивших аварий фиксируется мигающей лампой.
Также, поступление аварийного сигнала дублируется звонком, который сбрасывается отдельно.
Звонок обеспечивает ПОВТОРНОСТЬ ЗВУКОВОЙ СИГНАЛИЗАЦИИ и должен иметь возможность ОТДЕЛЬНОГО сброса, не влияющего на индикацию.

А, если мы кнопкой «сброс» сбросили ВСЕ поступившие ранее сигналы, то схема возвращается в первоначальное состояние и готова к приёму аварийных сигналов.
И, если, в этот момент любой из датчиков находится в сработавшем состоянии, то мгновенно схема на это реагирует включением соответствующей лампы и звонком.

Источник

Поделиться с друзьями
Расскажем обо всем понемногу
Adblock
detector