PDA

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



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

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

PLCInfo
PLC model MODEL PLC 100
Binary VERSION 2.05.6
Need Target version 2.05

Rand0m
16.01.2009, 13:48
Можно попробовать так, но там еще наверное надо будет таймеры сбрасывать.

АлексPetr
16.01.2009, 15:03
Повторите пожалуйста исправленный пример - не открывается он

Игорь Петров
16.01.2009, 16:04
Про SFCInit/SFCReset см. тут. (http://forum-ru.3s-software.com/viewtopic.php?t=712)

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

Rand0m
19.01.2009, 11:19
Про SFCInit/SFCReset см. тут. (http://forum-ru.3s-software.com/viewtopic.php?t=712)

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


вы тут наверное погорячились... вопрос в том можно ли прерывать выполнение ФБ до его завершения или всетаки нет.

Малышев Олег
19.01.2009, 13:13
return Вы имели в ввиду??

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

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

Rand0m
19.01.2009, 15:28
Про SFCInit/SFCReset см. тут. (http://forum-ru.3s-software.com/viewtopic.php?t=712)



В вами же приведенной ссылке все четко написано...
Вопрос ставился тоже вполне конкретно. Дальнейшие рассуждения уходят от темы :)