PDA

Просмотр полной версии : Программирование на SFC



TYER
14.04.2011, 12:04
Добрый день!
Прошу вашей помощи по программированию на SFC!
Мне необходимо автоматизировать линию сращивания древесины по длине.
Весь процесс поделен на две зоны, которые работают параллельно и независимо друг от друга, на каждую зону я планирую написать программы на SFC т,к нужна определенная последовательность работы. Дополнительно нужна будет программа на SFC для запуска и останова в строгой последовательности основных двигателей станка, где также будут проверяться конт.состояния их пускателей и автоматов.
Еще необходимо постоянно контролировать датчики безопасности станка.

У меня возникает вопрос по цикличности такой программы.
Если я основной PLK_PRG сделаю программу на ST или CFC, где буду проверять безопасность работы, если все нормально вызываю программы:
-запуск или контроль работы двигателей SFC1,
-зона1 SFC2,
-Зона2 SFC3.

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

2. При пропадании сигнала Power status, в статистике ПЛК все исполнительные механизмы переведутся в безопасное состояние а программа остановится.
При возобновлении питания механизмы останутся выключенными а программа продолжит свое выполнение с места останова?
Чтобы этого избежать необходимо дополнительно проверять переменную питания в каждом переходе и при её пропадании сделать переход в исходный шаг?

3. Если учитывать все выше написанное, то программы SFC получатся очень большими и будут иметь много ветвей, скажутся ли эти ответвления при условии, что никаких аварийных ситуаций не случится, на скорости работы станка?

Pointer
14.04.2011, 12:26
Никогда не доверяйте ПЛК в вопросах безопасности...датчики безопасности и стоповые кнопки должны не только обрабатываться программой контроллера, но и схемотехнически "рвать" подачу питания на исполнительные устройства (вне зависимости от того, "что думает об этом контроллер").

Pointer
14.04.2011, 12:32
Датчики безопасности проверяйте в основной проге, которая должна управлять выходами...SFC может просто управлять регистром (переменной) состояния системы (в зависимости от входных сигналов) и это "состояние" уже и используйте в основной проге (я бы наверное использовал для неё LD или FBD) для непосредственного управления выходами ...

TYER
14.04.2011, 12:33
Программа должна все равно видеть эту ситуацию и перейти в безопасный режим

Pointer
14.04.2011, 12:46
А кто против?

swerder
14.04.2011, 13:31
Программа должна все равно видеть эту ситуацию и перейти в безопасный режим

к примеру в plc_prg обрабатываете ошибки, переменную "ошибка" заводите в sfc программы, там через ответвление мониторите ее состояние, в случае чего алгоритм прерывается, возвращается на шаг init. + ко всему и там и там по сигналу "ошибка" отключаете все выходы управления

TYER
14.04.2011, 13:51
Мной так и предусмотрено. Вопрос в том - эту переменную необходимо проверять в каждом переходе межу шагами.
Нашла в руководстве пользователя CoDeSys в описании языка флаги SFC:

SFCInit: Переменная типа BOOL. Когда переменная получает значение ИСТИНА, программа переходит на шаг Init и все SFC флаги сбрасываются. Шаг Init становится активным, но не выполняется, пока переменная имеет значение ИСТИНА. Как только SFCInit примет значение ЛОЖЬ, выполнение программы продолжится.

SFCReset: Переменная типа BOOL. Работает подобно SFCInit. Но приостановка выполнения происходит после шага инициализации Init. Поэтомуфлаг SFCReset можно сбросить в самом шаге Init.
Внимание: начиная с версии компилятора 2.3.7.0, флаг SFCReset сбрасывает также логические действия, ассоциированные с МЭК шагами, чего не было ранее.

Сейчас попробую проверить как они работают.

Игорь Петров
14.04.2011, 14:16
SFC порядок работы, флаги и пр. см. 'Отладка прикладных ПЛК программ в CoDeSys (http://www.prolog-plc.ru/pb1)' части 6-8

TYER
14.04.2011, 16:26
Спасибо. Полезная статья.
1. Можно использовать Переменную SFCReset для перевода программы в шаг Init, где можно выключить все выходы при попадании питания на ПЛК, чтобы не делать условий переходов в начальный шаг. И я посмотрела она работает одновременно для всех подпрограмм SFC.
2. Можно использовать действие стандартного SFC для установления/снятия сигнала на выходе ПЛК или блока расширения или для этого лучше использовать упрощенный SFC.
Если можно, сильно это повлияет на быстродействие программы.

Игорь Петров
15.04.2011, 14:25
TYER Вы все правильно понимаете. 1 нормально. Обычно короткую главную программу PLC_PRG пишут на LD или ST. В ней идет обработка выбора режимов, кнопки Стоп. Минимум кода - надежность, быстрая реакция. Из нее же идет вызов (если все хорошо) основной управляющей подпрограммы (PRG или FB) автоматического режима, на SFC.

Выше уже заметили, что переход от шага к шагу – это всегда 1 цикл вызова. Длительность цикла задачи знаем. Число переходов из шага А в шаг Б знаем. Время реакции всегда SFC четко просчитывается.

Если активируем переменную-действие МЭК SFC, связанную в выходом ПЛК, то физически она поднимается в хвосте своего цикла, как и в любом другом языке. Никаких задержек тут нет.

swerder
15.04.2011, 14:39
Игорь Петров, будьте добры, подскажите ответ на вопрос (http://www.owen.ru/forum/showpost.php?p=58977&postcount=121)

TYER
15.04.2011, 15:21
Спасибо!________

Игорь Петров
15.04.2011, 19:19
Игорь Петров, будьте добры, подскажите ответ на вопрос (http://www.owen.ru/forum/showpost.php?p=58977&postcount=121)
Попытаюсь. (http://forum-ru.3s-software.com/viewtopic.php?f=1&t=1052)

Алексей Дмитриев
18.04.2011, 23:00
Добрый день!
Прошу вашей помощи по программированию на SFC!
Весь процесс поделен на две зоны, которые работают параллельно и независимо друг от друга, на каждую зону я планирую написать программы на SFC т,к нужна определенная последовательность работы.
Вообще, язык SFC предназначен для строго последовательного описания действий машины, то есть движений. Он создавался для роботов-манипуляторов, то есть алгоритмы типа: взял, поднял, переместил, поставил и снова... Почему Вы не хотите писать это на LD - самый универсальный язык для построения любых логических алгоритмов. В простейшем случае надо написать столько цепочек, сколько выходов в системе (можно для упрощения читабельности алгоритма выделить еще несколько промежуточных переменных). В этом случае все условия безопасности будут стопудово учтены, причем для каждого выхода по своим (любым) правилам. :confused:

TYER
19.04.2011, 08:11
У станка схожие операции переместил, обработал, переместил и снова

Алексей Дмитриев
19.04.2011, 09:00
Какая размерность системы, то есть сколько входов/выходов контроллера?

TYER
19.04.2011, 10:18
ПЛК 110-60 + 3МУ16 (вых) + 2МВ16

TYER
19.04.2011, 11:24
Подскажите, пожалуйста, почему компилятор пишет недопустимые символы в выражении на ST
PLK2 AND PLK14;
в действии перехода SFC

Алексей Дмитриев
19.04.2011, 12:40
ПЛК 110-60 + 3МУ16 (вых) + 2МВ16
То есть 40 выходов, грубо по 20 на каждую половину линии (половины однотипные, как Вы писали).
Получаем, порядка 30 цепочек LD всего (другие 30 для второй половины, аналогичные с другими адресами переменных).

Игорь Петров
19.04.2011, 14:10
SFC мой любимый язык. Не раз бывали ситуации, когда технологии нет в виде документа, а есть только человек, который думает что знает как должно работать. Например, стенд испытания пружин подвески грузовиков – установка, замер по двум уровням, серии циклов сжатия с разными уровнями, повтор замеров, отбраковка. Один человек рассказывает, второй сразу рисует SFC, показывает в работе и правит. Потом параллельным переносом ветви разносятся по рабочим позициям стола и сдвигаются по фазам. Специалист по пружинам в программировании ничего не понимает, но через 2 часа совместной работы берется править SFC сам. Теперь он сам все свои тесты и задает. Так и было задумано. Была машина по прессовке и упаковке макулатуры, теплица, инкубатор – поворот сотен лотков по расписаниям и др.пр.. Все это на SFC ложится в темпе устной речи.

По опыту наших учебных курсов, именно программистам SFC дается тяжело. LD, ST, FBD, CFC проходятся за 3 часа с нуля. На SFC надо скрупулезно потратить часов 6, тогда начинает получаться, иногда озарение происходит довольно резко и с бурным восторгом :) Продуманная SFC программа красива и читается в 50 раз легче чем на любом другом языке. Но, вопросов по SFC больше всего.

Поэтому мы решили в этом году в конференцию CoDeSys (http://www.users-conference.com/index.shtml?ucru_cocept)(24-25 мая) включить разбор SFC особой темой. Что показать уже есть.

Алексей Дмитриев
20.04.2011, 13:02
Все хорошо, пока у Вас не движутся 2 десятка механизмов одновременно и нужно управлять каждым по своим условиям. Еще хуже ситуация при аварийной остановке цикла - продолжение, как правило, если программа на SFC очень трудно добиться, либо сначала, либо, в лучшем случае с какого-то шага, но не с любой точки.:mad:

swerder
20.04.2011, 14:03
Алексей Дмитриев а что вам мешает написать для каждого из 2х десятков отдельную подрограмму на SFC?

Игорь Петров
20.04.2011, 16:36
Еще хуже ситуация при аварийной остановке цикла - продолжение, как правило, если программа на SFC..
Не надо делать на SFC главную программу PLC_PRG. Это типовая ошибка. Ее стоит написать на ST или LD, а уже в ней организовать вызов 2 десятка SFC подпрограмм и их сброс по авариям. Еще красивее распараллеливаться задачами. Блок SFC можно объявлять Retain и он при рестарте продолжит там, откуда слетел.

SFC язык шикарный, если научиться правильно применять. Например, у компании Бош все их прикладные программы самых разнообразных машин в CoDeSys написаны строго на связке ST-SFC. Иное запрещено. Это самые красивые, читабельные и сопровождабельные программы из того, что вообще доводилось видеть.

Алексей Дмитриев
21.04.2011, 00:08
Не знаю, я как-то привык к старой доброй Булевой алгебре. Там все получается наиболее компактно и читабельно, имею в виду чисто релейные алгоритмы. А все остальное на ST, естественно.

Andy
22.04.2011, 12:17
Это самые красивые, читабельные и сопровождабельные программы из того, что вообще доводилось видеть.
Так-то так, только печатать на бумагу их не очень-то... Или есть средства для разбития по листам?

TYER
25.04.2011, 14:51
Игорь Петров, подскажите пожалуйста можно ли сделать задержку при переходе на альтернативную ветвь в простом SFC.
В приложенном примере для перехода из шага 6 в 7 необходимо выполнить условие Trans5, если по истечении какого-то времени это условие не выполнилось перейти на Trans21 и выполнить исключение.

swerder
25.04.2011, 15:35
TYER
в шестом шаге запускаете таймер на какое-то время, в транс5 добавляете условие "and not таймер.q", в транс21 добавляете условие "and таймер.q"

Игорь Петров
25.04.2011, 16:24
..если по истечении какого-то времени это условие не выполнилось перейти на Trans21 и выполнить исключение.
Варианты:
1) В проостом SFC: в шаге 6 завести таймер TON, по его выходу переход на альтернативу.

2) Для МЭК SFC в шаге 6 ставим действие D ‘отложенное’. В него прописываем лог. переменную. По ней уход на альтернативную ветку.

3) Делаем свой единый обработчик исключений SFC на проект. В нем проверяем флаг SFCError, определяем где зависло по SFCErrorPOU, SFCErrorStep, даем диагностику пользователю, если надо, и принимаем меры. Для включения контроля, на нужные шаги ставим 'Дополнения' - 'Атрибуты шага' Макс. время.

MikeF
01.11.2012, 11:11
Обычно короткую главную программу PLC_PRG пишут на LD или ST. В ней идет обработка выбора режимов, кнопки Стоп. Минимум кода - надежность, быстрая реакция. Из нее же идет вызов (если все хорошо) основной управляющей подпрограммы (PRG или FB) автоматического режима, на SFC.



Может кто-нибудь выложить такую программу для разбора-обучения?
Правильно я понимаю, что вышеупомянутая надежность и быстрота реакции характерна именно для аварийных режимов, в рабочем режиме время выполнения такой программы не будет лучше чем у написанной по другой структуре, например CFC+ST?

Yegor
02.11.2012, 13:47
Ну вот у меня ST-SFC сделано. Для разбора не выложу, но скриншот покажу:

http://images.devs-on.net/Thumb/KmwjW4OHaSbBgb4R-CoDeSysSilenaCo.png (http://images.devs-on.net/Image/KmwjW4OHaSbBgb4R-CoDeSysSilenaCo.png)

«Стоп», правда, в CommandAndControl обрабатывается.

Что быстрее, а что медленнее однозначно не скажешь. Само по себе оно всё одинаково.

MikeF
02.11.2012, 17:35
Так не всё понятно, но спасибо.
Может есть что-то не представляющее коммерческий интерес?
Хотя я занимаюсь котельными там SFC - не совсем лучший выбор, на мой взгляд.

Gans
02.11.2012, 18:11
Здравствуйте, MikeF

Так не всё понятно, но спасибо.
Может есть что-то не представляющее коммерческий интерес?
Хотя я занимаюсь котельными там SFC - не совсем лучший выбор, на мой взгляд.
Вот взгляните тему http://www.owen.ru/forum/showthread.php?t=9067 должно помочь ;)

MikeF
02.11.2012, 19:02
Спасибо, погляжу.