PDA

Просмотр полной версии : Алгоритм управления задвижкой или двигателем



melandr
18.04.2013, 22:07
Стоит такая задача. Необходимо реализовать алгоритм управления двигателем или задвижкой на языке FBD. Входными сигналами , например, для задвижки должны быть "Команда открыть", "Команда закрыть", "Задвижка открыта", "Задвижка закрыта". Выходными сигналами являются "Выходной импульс открыть", "Выходной импульс закрыть", "Статус устройства". Модуль должен выдавать информацию о состоянии задвижки: открыта, закрыта, открывается, закрывается, ошибка открытия, ошибка закрытия. Аналогом такого блока является, например, в DeltaV ФУНКЦИОНАЛЬНЫЙ БЛОК УПРАВЛЕНИЕ УСТРОЙСТВОМ. во вложении алгоритм управления в виде автоматного программирования.

rovki
18.04.2013, 23:16
Стоит такая задача. Необходимо реализовать алгоритм управления двигателем или задвижкой на языке FBD.
Так может стоит поиграться на ПР ,а потом ,если нужно перенесите в ПЛК:rolleyes:

melandr
18.04.2013, 23:32
Так может стоит поиграться на ПР ,а потом ,если нужно перенесите в ПЛК:rolleyes:

Что такое ПР? Или я не правильно спрашиваю?Нужны алгоритмы управления двигателем, задвижкой типа как в приложенном файле, только на ФБД.

SBER
19.04.2013, 00:49
Чей-то вы рано активизировались, до сессии вроде далеко.

capzap
19.04.2013, 04:12
те кто изучал КДС, знают что можно конвертировать любой язык в фбд

melandr
19.04.2013, 22:31
А по интересуещей теме, никто ничего сказать не может?

rovki
19.04.2013, 22:45
Что такое ПР? Или я не правильно спрашиваю?Нужны алгоритмы управления двигателем, задвижкой типа как в приложенном файле, только на ФБД.

Пр110 -программируемое реле ,язык ФБД (овен лоджик) ;)
Если вам диплом ,то делайте как задали (на ПЛК) ,если для себя ,то можно и на ПР110 сделать , а потом и на ПЛК переложить......

melandr
20.04.2013, 00:22
Это не диплом. проблема состоит не в чем делать, а как сделать правильно. Я работаю в SCADA DeltaV. Так вот в ее библиотеке есть такой функциональный блок DC(управление устройством). Он реализует логику управления или задвижкой, или двигателем с 2-мя или 3-мя состояниями. При этом контролируется полностью работа управляемого механизма. Например, при поступлении команды на запуск, если через заданное время не пришел сигнал подтверждения, происходит отключение механизма с выдачей аварии. Также на выходе статуса выдается состояние устройства: стоит, работает, авария, запускается и т.д.. У меня стоит задача реализовать такое же управление только на чистом FBD, используя элементы И, ИЛИ, НЕ, триггеры, таймеры. Просто пытаюсь делать, но не хватает опыта.

melandr
20.04.2013, 00:25
Пытаюсь это сделать в Кодесис. Подключил библиотеку OSCAT. Но те модули, которые есть в библиотеке работают не так, как мне нужно. И нет нормального описания, для того чтобы понять, как работает каждый модуль

capzap
20.04.2013, 02:25
подобное решение расписывается на уроках у Семена на языке CFC.
Оскат делают свои блоки удовлетворяющие широкую аудиторию, если хотите что то свое, значит самому и придется "допиливать"

rovki
20.04.2013, 06:52
Это не диплом. проблема состоит не в чем делать, а как сделать правильно. Я работаю в SCADA DeltaV. Так вот в ее библиотеке есть такой функциональный блок DC(управление устройством). Он реализует логику управления или задвижкой, или двигателем с 2-мя или 3-мя состояниями. При этом контролируется полностью работа управляемого механизма. Например, при поступлении команды на запуск, если через заданное время не пришел сигнал подтверждения, происходит отключение механизма с выдачей аварии. Также на выходе статуса выдается состояние устройства: стоит, работает, авария, запускается и т.д.. У меня стоит задача реализовать такое же управление только на чистом FBD, используя элементы И, ИЛИ, НЕ, триггеры, таймеры. Просто пытаюсь делать, но не хватает опыта.
Потому вас и отсылаю к ПР (Овен лоджик),что там вам помогут в освоении данного языка и составлении алгоритма (проекта) ,а потом уже реализуете на чем хотите .:rolleyes: .Но я не настаиваю -решать вам .

petera
20.04.2013, 10:27
Это не диплом. проблема состоит не в чем делать, а как сделать правильно. Я работаю в SCADA DeltaV. Так вот в ее библиотеке есть такой функциональный блок DC(управление устройством). Он реализует логику управления или задвижкой, или двигателем с 2-мя или 3-мя состояниями. При этом контролируется полностью работа управляемого механизма. Например, при поступлении команды на запуск, если через заданное время не пришел сигнал подтверждения, происходит отключение механизма с выдачей аварии. Также на выходе статуса выдается состояние устройства: стоит, работает, авария, запускается и т.д.. У меня стоит задача реализовать такое же управление только на чистом FBD, используя элементы И, ИЛИ, НЕ, триггеры, таймеры. Просто пытаюсь делать, но не хватает опыта.

Пытаюсь это сделать в Кодесис. Подключил библиотеку OSCAT. Но те модули, которые есть в библиотеке работают не так, как мне нужно. И нет нормального описания, для того чтобы понять, как работает каждый модуль
Обратите внимание на то, что кроме "oscat_basic.lib" есть еще и "oscat_building_100.lib".
В этой библиотеке уже есть похожие ФБ
ACTUATOR_3P
http://www.wago.su/_/rsrc/1313599974946/oscat/building/actuator_3p/actuator_3p.gif
Тип Функциональный блок
Входы VAL : REAL (Входной управляющий сигнал 0 - 1)
FORCE : BOOL (Режим управления ON / OFF, если TRUE)
ON : BOOL (Управляющий сигнал, когда FORCE = TRUE)
END_POS : BOOL (Вход для позиционного переключателя)
DIAG : BOOL (Запуск диагностики)
Выходы OUT1 : BOOL (Управляющий сигнал на открытие клапана)
OUT2 : BOOL (Управляющий сигнал на закрытие клапана)
POS : REAL (Имитация положения клапана)
BUSY : BOOL (TRUE, когда клапан работает)
ERROR : BOOL (Выход ошибки)
Настройки MIN_ONTIME : TIME (Минимальное время работы двигателя)
MIN_OFFTIME : TIME (Минимальное время простоя двигателя)
MAX_RUNTIME : TIME (Максимальное время работы двигателя)
AUTO_DIAG_TIME : TIME (Врмя, после которого автоматически осуществляется диагностика)
CAL_RUNTIME : TIME (Время работы двигателя, после которого автоматически выполняется калибровка.)
SWITCH_AVAILABLE : BOOL (TRUE, если концевой выключатель подключен)

ACTUATOR_3P представляет собой интерфейс трехпозиционного привода для управления исполнительными устройствами (например, клапанами) с управляющими сигналами на открытие и закрытие.
Сигнал на входе IN преобразуется в управляющие импульсы на выходах OUT1 и OUT2, которые соответственно управляют двигателем.
Входной сигнал IN обрабатывается, а состояния обоих выходов (OUT1 и OUT2) изменяются таким образом, что при входном значении 0 клапан закрыт, при значении 1 клапан открыт, при 0.5 клапан полуоткрыт, и т.д.
Если вход FORCE установлен в TRUE, то положение клапана соответствует не входному сигналу IN, а двоичному управляющему сигналу ON. Значение ON=FALSE означает, что клапан закрыт, а ON=TRUE означает, что клапан на 100% открыт.
В режиме FORCE промежуточные положения невозможны. Клапан может быть только на 100% открытым или закрытым.
Блок может также обрабатывать состояние концевых выключателей.
Концевые выключатели должны быть подключены таким образом, чтобы при достижении как верхнего, так или нижнего положения, вход END_POS принимал значение TRUE и тем самым указывал, что клапан достиг одного из крайних положений.
Чтобы включить функцию обработки концевых выключателей, настроечная переменная SWITCH_AVAILABLE должна иметь значение TRUE, в противном случае состояние концевых выключателей игнорируется.
Вход диагностики (DIAG) позволяет в любое время запустить диагностику клапана и двигателя.
После этого блок проводит цикл диагностики и сообщает об ошибке с помощью выхода ERROR. Цикл диагностики возвращает клапан в положение 0%, затем отрабатывает открытие 0% - 100% и следом закрытие до 0%.
При этом также проверяется функционирование концевых выключателей (в том случае, если они были активированы настроечной переменной SWITCH_AVAILABLE).
По завершении диагностического цикла клапан возвращается в положение, определяемое входом IN.
Измеренные при прохождении диагностики времена хода используются при работе, чтобы максимально точно позиционировать клапан в заданную позицию.
С помощью настроечной переменной AUTO_DIAG_TIME указывается, по истечении какого срока диагностика запускается автоматически, без её активации входом DIAG.
При запуске, диагностический цикл автоматически проводится всегда. Если это значение равно 0, автоматический цикл диагностики не проводится.

Выход BUSY показывает, что клапан меняет свое положение в данный момент или же проводится диагностика, и на выходе POS присутствует сигнал 0 – 1, соответствующий текущей позиции клапана.
Для предотвращения биений клапана и, в случае мощных двигателей, для учета времени выбега привода можно установить минимальное время работы (MIN_ONTIME) и минимальное время простоя (MIN_OFFTIME).

Клапан обычно то открывается, то закрывается, принимая различные положения. Чем больше перемещается клапан, тем сильнее он отклоняется от идеальной абсолютной позиции, поскольку с каждым шагом возникает небольшая ошибка в позиционировании, которая накапливается в течение множества перемещений.
Чтобы бороться с этой ошибкой, с помощью настроечной переменной CAL_RUNTIME можно по прошествии определенного времени работы (совокупного времени всех перемещений) клапана автоматически выполнять калибровку.
При этой калибровке двигатель переводит клапан в закрытое положение, а затем возвращает клапан в состояние, заданное значением входной переменной IN.
Значение 0 для CAL_RUNTIME означает, что автоматическая калибровка не осуществляется.
Настроечная переменная MAX_RUNTIME устанавливает максимальное время, которое требуется двигателю для полного хода от 0% до 100% или наоборот.

Вызывает: T_PLC_MS, _RMP_NEXT

Использует библиотеку Oscat Basic
Что бы посмотреть программный код библиотечного ФБ, нужно открыть библиотеку как проект.
Еще похожие ФБ из "oscat_building_100.lib"
ACTUATOR_2P - является интерфейсом для двухпозиционных приводов, таких как электромагнитные клапаны.
http://www.wago.su/_/rsrc/1313599974942/oscat/building/actuator_2p/actuator_2p.gif
ACTUATOR_A
http://www.wago.su/_/rsrc/1313599974952/oscat/building/actuator_a/actuator_a.gif
ACTUATOR_A служит для управления исполнительными приводами с аналоговым входом. Блок имеет два входа (I1 и I2), значения которых от 0 до 255 перекрывают весь рабочий диапазон выхода Y. Выход Y имеет тип WORD, и его рабочий диапазон задается настроечными переменными OUT_MIN и OUT_MAX. Входное значение 0 формирует выходное значение OUT_MIN, а входное значение 255 формирует значение OUT_MAX на выходе.
ACTUATOR_COIL - служит для управления простыми клапанами. Выход OUT при этом меняет состояние вслед за входным сигналом IN. Если для настроечной переменной SELF_ACT_CYCLE установлено значение больше 0, клапан автоматически активируется на время SELF_ACT_TIME в случае, если он был выключен в течение времени SELF_ACT_CYCLE. Совместимый с ESR выход состояния передает изменения состояния клапана для дальнейшей обработки или для архивации.
ACTUATOR_PUMP
http://www.wago.su/_/rsrc/1313599974954/oscat/building/actuator_pump/actuator_pump.gif

ACTUATOR_PUMP представляет собой интерфейс насоса со счетчиком часов наработки. Насос может включаться входом IN либо MANUAL. Переменные настроек MIN_ONTIME и MIN_OFFTIME задают минимальную периодичность включения и минимальную продолжительность работы. Если вход IN установлен в TRUE меньшее, чем MIN_ONTIME время, то насос продолжает работать, пока не будет достигнута минимальная продолжительность его работы. Если вход IN установлен в TRUE дольше, чем MIN_ONTIME, то насос работает, пока IN снова не станет FALSE.

Если насос нужно запустить снова через короткое время, блок ожидает, пока не истечет время MIN_OFFTIME, и только затем насос снова включается. С помощью настроечной переменной RUN_EVERY задается время простоя насоса, после которого он автоматически включается, чтобы предотвратить блокировку насоса. В этом случае после автоматического включения насос работает в течение времени MIN_ONTIME. Установкой RUN_EVERY = T#0s можно отключить автоматический запуск насоса.

Встроенный счетчик часов наработки подсчитывает время работы насоса в часах, а также количество циклов включения. Оба значения могут быть сброшены в ноль подачей TRUE на вход RST. Значение счетчика является реманентным и не теряется при потере питания или сбросе контроллера. И RUNTIME, и CYCLES являются значениями типа REAL, и поэтому не переполняются, как обычные TIME, после 50 дней.

Валенок
21.04.2013, 14:30
если

Это не диплом.
то чего такая упёртость

реализовать такое же управление только на чистом FBD
Если Вам в принципе знакомо программирование а не только поиск готовых блоков то это :

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


входы
команда на запуск :буль;
подтверждение:буль;
заданное время:время;
выходы
механизм:буль;
статус:(стоит,запускается,работает,авария);
внутри
таймер:задержка включения;

если нет механизма и есть подтверждение тогда
статус := авария; (*тупо контакт реле прилип ? ау .. постановщик*)
если нет команды на запуск тогда
статус := стоит; (*и из аварии тоже выходим ? ау.. постановщик*)
конец_если;

ходим по статусу
стоит:
если команда_на_запуск тогда
статус := запускается;
таймер сбросить;
конец_если;
запускается:
таймер ждет подтверждения заданное время;
если таймер не дождался тогда
статус:=авария;
иначе если подтверждение тогда
статус:=работает;
конец_если;
работает:
если нет подтверждения тогда
статус:=авария;
конец_если;
больше_не_ходим;

механизм:=статус = запускается или статус = работает;


Это всего лишь развернутый вариант решения.Вариант под квадратики


таймер активируется если команда на запуск и нет подтверждения
статус 'стоит' если нет комады на запуск
статус 'запускается' если активирован таймер
статус 'работает' если подтверждение и статус не 'авария'
статус 'авария' если фиксация таймера или (нет команды и есть подтверждение) или (статус 'работает' и нет подтверждения)
механизм включен если статус не 'авария' и есть команда на запуск

PS
Кстати - текст конвертируется в мазохисткий FBD (при наличии CFC)

melandr
22.04.2013, 00:50
Валенок большое спасибо, немного прояснили ситуацию. Правда я ST не очень знаю, больше FBD или CFC.
Всем большое спасибо, по поводу редактирования блоков не знал. Хотя хотелось посмотреть, что у них внутри

melandr
22.04.2013, 00:51
Валенок, а можно поподробней по поводу конвертации ST в FBD(или CFC)

lazhator
22.04.2013, 03:58
ну там же все в кдсе, наводите курсор на ФБ, кликаете правой кнопкой, в открывшемся меню выбираете конвертировать, ну или справку почитайте(хотя я не знаю есть ли там про это или нет). в цфц и сфц конечно никак, а обратно и из всех остальных в три доступных, плиз..

pozdn
26.04.2013, 16:35
Melandr, если есть большое стремление к познанию нового, нарисуйте свою диаграмму в пакете StateFlow (в MatLAB), затем с помощью пакета Simukink PLC Coder (в MatLAB) получаете программу на языке ST для CoDeSys. Останется заменить переменные реальными входами и выходами. Это настоящее автоматное программирование для ПЛК.
Для контроллеров Siemens есть готовое средство.Называется - Hi-Graf.

dim1987
01.02.2017, 06:29
29055
Не могу разобраться в макросе.
на вход IN подаю от 0 до 255
END_POS сигнал от концевика = 1
ARE = 0
TEST = 0
ARX = 0
И ничего не происходит.