Показано с 1 по 9 из 9

Тема: Прерывание функционального блока. Аварийный сброс. Нужна помощь

  1. #1

    По умолчанию Прерывание функционального блока. Аварийный сброс. Нужна помощь

    На одном из шагов функционального блока программа зацикливается (по алгоритму), необходимо, чтобы при повторном вызове этого блока он начинался с начала, а не с места прерывания (в данном случае это место зацикливания). Предполагаю, что вопрос решается с помощью SFCInit/SFCReset, но корректно выполнить это не удалось.

    Проект прикрепляю.

    PLCInfo
    PLC model MODEL PLC 100
    Binary VERSION 2.05.6
    Need Target version 2.05
    Вложения Вложения

  2. #2
    Пользователь
    Регистрация
    20.07.2007
    Адрес
    Киров
    Сообщений
    154

    По умолчанию

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

  3. #3

    По умолчанию

    Повторите пожалуйста исправленный пример - не открывается он

  4. #4

    По умолчанию

    Про SFCInit/SFCReset см. тут.

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

  5. #5
    Пользователь
    Регистрация
    20.07.2007
    Адрес
    Киров
    Сообщений
    154

    По умолчанию

    Цитата Сообщение от Игорь Петров Посмотреть сообщение
    Про SFCInit/SFCReset см. тут.

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

  6. #6

    По умолчанию

    return Вы имели в ввиду??

  7. #7
    Пользователь
    Регистрация
    20.07.2007
    Адрес
    Киров
    Сообщений
    154

    По умолчанию

    ФБ написан на SFC и состоит из нескольких шагов, если прекратить его выполнение в произвольном месте а потом вновь вызвать, то он (ФБ) продолжит выполняться с того же места. Задача, как я понял, чтобы он при вызове выполнялся с начала. Вот и думается мне что без SFCreset никак... Хотя возможно я и ошибаюсь

  8. #8

    По умолчанию

    Цитата Сообщение от Rand0m Посмотреть сообщение
    вы тут наверное погорячились... вопрос в том можно ли прерывать выполнение ФБ до его завершения или всетаки нет.
    А что значит завершение FB написанного на SFC? Это же не выражение типа 2 +2, посчитал и закончил. SFC диаграмма не имеет никакого завершения принципиально. Она просто переходит из одного состояния в другое и так живет. Одно из этих состояний совершенно условно названо стартовым. Оно получает управление при старте, далее ничем особенным не отличается. FB на SFC можно просто вызывать или не вызывать. Проще всего его вызывать всегда. Если он не нужен, то он может просто спокойно стоять на пустом шаге.
    По return влетит SFC из некоего действия. При следующем вызове опять с этого шага начнет. Return имеет смысл в действиях, например для выхода из цикла со сложными условиями.
    SFCReset – это как goto в языке Си. Если диаграмма сразу продумана, то в ней будет предусмотрено когда надо и где можно переход на начало по условию (по некой входной переменной). Когда же диаграмма уже большая, то переделывать ее всю лень. На этот случай и есть SFCReset.

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

    По умолчанию

    Цитата Сообщение от Игорь Петров Посмотреть сообщение
    Про SFCInit/SFCReset см. тут.
    В вами же приведенной ссылке все четко написано...
    Вопрос ставился тоже вполне конкретно. Дальнейшие рассуждения уходят от темы

Ваши права

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