Привет.
Недавно обнаружил странное поведение программы на языке SFC.
Как мы знаем в каждом шаге сначала однократно выполняется действие Entry.
Потом длительно выполняется код самого шага, до выполнения условия перехода.
Ну а затем однократно выполняется действие Exit.
Но вот пример программы, где НЕ выполняется действие Entry в шаге.
Screenshot 2024-11-04 074320.png
Это касается шага check и его действия Entry.
В этом действии увеличивается указатель на массив, и если выходит за пределы, то он устанавливается в начальную позицию.
Screenshot 2024-11-04 074622.png
Все работает ровно. Контрольный счетчик в шаге counter постоянно увеличивается.
Но если вы сбросите один из элементов массива, например, 5, то программа остановится.
Screenshot 2024-11-04 075017.png
Действие Entry не выполняется. Индекс не увеличивается, контрольный счетчик не увеличивается.
Программа написана под Raspberry, но она ведет себя также и на других ПЛК.