Сообщение от
Антон_Б
Здравствуйте. Пишу основную программу на SFC. Есть набор шагов от Step0 - Step10. При нажатии кнопки сброс (reset := TRUE) нужно вернуться на шаг Init,
т. е. в начало программы. Как это проще сделать, что бы в каждом шаге не рисовать альтернативный шаг с проверкой условия reset и безусловным переходом на Init?
Есть ли переменная (типа Step0.x) или функция принудительного перехода на шаг Init?
Для этого Вам понадобится:
1) у Вашего POU объявить входную переменную SFCInit (или SFCReset) типа BOOL;
2) Зайти в настройки проекта
SfcInitSettings.png
3) И отметить одну из переменных SFCInit или SFCReset.
SfcInitVariables.png
Разница между ними:
3.1) До тех пор, пока переменная SFCInit равна TRUE ФБ будет "висеть" на шаге Init, но шаг Init не будет выполняться
т.е. чтобы сбросить ФБ нужно будет выполнить приблизительно следующее:
Код:
IF m_xNeedToInitSfc THEN
// Сбрасываю FB на шаг Init
m_fb_SfcInitTest.SFCInit:= TRUE;
m_fb_SfcInitTest();
// Разрешаю дальнейшую работу ФБ
m_fb_SfcInitTest.SFCInit:= FALSE;
m_xNeedToInitSfc := FALSE;
END_IF
3.2) До тех пор, пока переменная SFCReset равна TRUE ФБ будет "висеть" на шаге Init, и шаг Init будет выполняться
Т.е. значение этой переменной можно обнулить уже на шаге Init
Например в теле программы делаем так:
Код:
IF m_xNeedToResetSfc THEN
// Сбрасываю FB на шаг Init
m_fb_SfcInitTest.SFCReset := TRUE;
m_xNeedToResetSfc := FALSE;
END_IF
а уже внутри Init так:
Архив проекта с обоими вариантами реализации прикладываю.
На визуализации кнопки "ResetSfc" и "InitSfc" выполняют описанные выше действия.