Обратите внимание на то, что кроме "oscat_basic.lib" есть еще и "oscat_building_100.lib".
В этой библиотеке уже есть похожие ФБ
ACTUATOR_3P
Тип Функциональный блок
Входы 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 - является интерфейсом для двухпозиционных приводов, таких как электромагнитные клапаны.
ACTUATOR_A
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
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 дней.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
если
то чего такая упёртость
Если Вам в принципе знакомо программирование а не только поиск готовых блоков то это :
превращается в это :
Это всего лишь развернутый вариант решения.Вариант под квадратикиКод:входы команда на запуск :буль; подтверждение:буль; заданное время:время; выходы механизм:буль; статус:(стоит,запускается,работает,авария); внутри таймер:задержка включения; если нет механизма и есть подтверждение тогда статус := авария; (*тупо контакт реле прилип ? ау .. постановщик*) если нет команды на запуск тогда статус := стоит; (*и из аварии тоже выходим ? ау.. постановщик*) конец_если; ходим по статусу стоит: если команда_на_запуск тогда статус := запускается; таймер сбросить; конец_если; запускается: таймер ждет подтверждения заданное время; если таймер не дождался тогда статус:=авария; иначе если подтверждение тогда статус:=работает; конец_если; работает: если нет подтверждения тогда статус:=авария; конец_если; больше_не_ходим; механизм:=статус = запускается или статус = работает;
PSКод:таймер активируется если команда на запуск и нет подтверждения статус 'стоит' если нет комады на запуск статус 'запускается' если активирован таймер статус 'работает' если подтверждение и статус не 'авария' статус 'авария' если фиксация таймера или (нет команды и есть подтверждение) или (статус 'работает' и нет подтверждения) механизм включен если статус не 'авария' и есть команда на запуск
Кстати - текст конвертируется в мазохисткий FBD (при наличии CFC)
Последний раз редактировалось Валенок; 21.04.2013 в 14:33.
Валенок большое спасибо, немного прояснили ситуацию. Правда я ST не очень знаю, больше FBD или CFC.
Всем большое спасибо, по поводу редактирования блоков не знал. Хотя хотелось посмотреть, что у них внутри
Валенок, а можно поподробней по поводу конвертации ST в FBD(или CFC)
ну там же все в кдсе, наводите курсор на ФБ, кликаете правой кнопкой, в открывшемся меню выбираете конвертировать, ну или справку почитайте(хотя я не знаю есть ли там про это или нет). в цфц и сфц конечно никак, а обратно и из всех остальных в три доступных, плиз..
Последний раз редактировалось lazhator; 22.04.2013 в 04:17.
Melandr, если есть большое стремление к познанию нового, нарисуйте свою диаграмму в пакете StateFlow (в MatLAB), затем с помощью пакета Simukink PLC Coder (в MatLAB) получаете программу на языке ST для CoDeSys. Останется заменить переменные реальными входами и выходами. Это настоящее автоматное программирование для ПЛК.
Для контроллеров Siemens есть готовое средство.Называется - Hi-Graf.
2017-02-01_06-23-52.png
Не могу разобраться в макросе.
на вход IN подаю от 0 до 255
END_POS сигнал от концевика = 1
ARE = 0
TEST = 0
ARX = 0
И ничего не происходит.