Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 21 по 30 из 33

Тема: Программирование на SFC

  1. #21

    По умолчанию

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

  2. #22

    По умолчанию

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

  3. #23

    По умолчанию

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

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

  4. #24

    По умолчанию

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

  5. #25

    По умолчанию

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

  6. #26

    По умолчанию

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

  7. #27

    По умолчанию

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

  8. #28

    По умолчанию

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

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

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

  9. #29
    Пользователь
    Регистрация
    10.09.2012
    Адрес
    Кемерово
    Сообщений
    93

    По умолчанию

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

  10. #30
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

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



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

    Что быстрее, а что медленнее однозначно не скажешь. Само по себе оно всё одинаково.
    Последний раз редактировалось Yegor; 02.11.2012 в 13:51.

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •