PDA

Просмотр полной версии : Язык SFC переход на Init



Антон_Б
19.03.2018, 13:59
Здравствуйте. Пишу основную программу на SFC. Есть набор шагов от Step0 - Step10. При нажатии кнопки сброс (reset := TRUE) нужно вернуться на шаг Init,
т. е. в начало программы. Как это проще сделать, что бы в каждом шаге не рисовать альтернативный шаг с проверкой условия reset и безусловным переходом на Init?
Есть ли переменная (типа Step0.x) или функция принудительного перехода на шаг Init?

Осинский Алексей
19.03.2018, 14:33
Здравствуйте. Пишу основную программу на SFC. Есть набор шагов от Step0 - Step10. При нажатии кнопки сброс (reset := TRUE) нужно вернуться на шаг Init,
т. е. в начало программы. Как это проще сделать, что бы в каждом шаге не рисовать альтернативный шаг с проверкой условия reset и безусловным переходом на Init?
Есть ли переменная (типа Step0.x) или функция принудительного перехода на шаг Init?

Для этого Вам понадобится:
1) у Вашего POU объявить входную переменную SFCInit (или SFCReset) типа BOOL;
2) Зайти в настройки проекта
36120
3) И отметить одну из переменных SFCInit или SFCReset.
36121
Разница между ними:
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 так:


SFCReset := FALSE;


Архив проекта с обоими вариантами реализации прикладываю.
На визуализации кнопки "ResetSfc" и "InitSfc" выполняют описанные выше действия.

Антон_Б
19.03.2018, 15:07
Спасибо, добрый человек.

Антон_Б
19.03.2018, 16:53
А можно ли переходить на какой - либо шаг SFC из ST пограммы типа JUMP Step7 ?

Осинский Алексей
19.03.2018, 17:25
А можно ли переходить на какой - либо шаг SFC из ST пограммы типа JUMP Step7 ?

Зачем это понадобилось?
SFC как раз удобен тем, что все переходы заранее прописаны и видны на диаграмме.

Антон_Б
19.03.2018, 17:34
Согласен. Хотел упростить "картинку" ;-)

Осинский Алексей
19.03.2018, 17:48
Согласен. Хотел упростить "картинку" ;-)

Такое упрощение привело бы к сложностям отладки.
Мы видим картинку, а работает она совсем не так, как нарисована :)

Я не совсем уверен, что под Вашу задачу подойдет, но в SFC для организации программы есть "макросы" (по сути набор шагов SFC, которые отображаются как один блок).
Макрос должен начинаться с шага и заканчиваться переходом
36125
Вход и выход из макроса осуществляются кнопками на панели инструментов (обвел их рамкой).