Согласен. Читаемость машины состояний отличная. Но в моем случае она неприменима.
Раз уж разговор завязался, опишу свою задачу - это обработка последовательного протокола обмена данными, который, естественно, содержит обработку ошибок. Именно для обработки ошибок мне и нужны переходы. Решения без goto я пока не нашел и уже склоняюсь к прекращению поиска и использованию LD вместо ST.
Думаю, это очевидно, что для этой задачи одним из самых важных требований является быстродействие алгоритма. Читаемость кода - вторична. К тому же у меня есть дополнительное ограничение: алгоритм должен быть реализован в одном POU (а конкретно FB).
П.С. Даже ярые ненавистники goto (в том числе те, кто слепо твердит: "Количество GOTO в программе обратно пропорционально качеству программиста" )
оправдывают применение goto для обработки ошибок (например см. Википедию). И я за них счастлив.