Бвахахахаха жесткач. Смарите пацаны чё натворить можно:
Вложение 21231
Открываем стандарт, 2.6.5 Rules of evolutionОчевидно, с позиции внешнего автомата данное правило нарушается. Ну а с позиции внутреннего автомата нарушается 2.6.3 Transitions:Цитата:
Evolutions of the active states of steps shall take place along the directed links when caused by the clearing of one or more transitions.
В результате внешний автомат получает два (минимум) активных шага вопреки условию перехода, а внутренний автомат остаётся без активности. А всё почему? Да потому что кто-то позволил писать в это поле что попало:Цитата:
A transition represents the condition whereby control passes from one or more steps preceding the transition to one or more successor steps along the corresponding directed link
Вложение 21232
... и почему-то сделали так, что шаги автоматов всей иерархии оказываются в одной области имён. Хм, а я знаю почему: потому что шаги включаются в область имён вышестоящего POU как самостоятельные имена. Если бы разработчики компилятора не поленились и ввели бы отдельные структуры для каждого автомата или не рассматривали шаги как именованную единицу компиляции, такой фигни бы не было.
Выходит, что с кодесисом надо очень чётко разделять вопросы «как работает» и «как формально описывается». Я бы сказал, что переход маркера из автомата в автомат в рамках стандарта рассматривать вообще нет смысла — это не допускается определениями переходов и порядка вычисления. При этом правила не запрещают вкладывание SFC в SFC и напоминают, что даже при соблюдении всех правил возможно сформулировать в принципе нефункционирующий и/или самоблокирующийся автомат, только среда исполнения должна считать возникновение такой ситуации ошибкой:Проект прилагается к посту. Для воспроизведения проблемы открыть визуализацию и воспользоваться кнопками: один раз Next outer, три раза Next inner.Цитата:
The application of the rules given in this subclause cannot prevent the formulation of “unsafe” SFCs, such as the one shown in figure 18 a), which may exhibit uncontrolled proliferation of tokens. Likewise, the application of these rules cannot prevent the formulation of “unreachable” SFCs, such as the one shown in figure 18 b), which may exhibit “locked up” behavior. The programmable controller system shall treat the existence of such conditions as errors as defined in 1.5.1.

