Код:
(****кусочек 1******)
CASE i OF
	1: i:=i+1;
	2: i:=i+1;
	3: i:=i+1;
	4: i:=i+1;
	5: i:=i+1;
	6: i:=i+1;
	7: i:=i+1;
	8: i:=i+1;
	9: i:=i+1;
	10: i:=1;
END_CASE
(*****кусочек 2****)
IF i=0 THEN i:=i+1; END_IF
IF i=1 THEN i:=i+1; END_IF
IF i=2 THEN i:=i+1; END_IF
IF i=3 THEN i:=i+1; END_IF
IF i=4 THEN i:=i+1; END_IF
IF i=5 THEN i:=i+1; END_IF
IF i=6 THEN i:=0; END_IF
(****кусочек 3******)
//IF udc.reset=TRUE THEN udc.RESET:=FALSE; END_IF 

IF udc.CV =0 THEN udc.CU :=TRUE;END_IF
IF udc.CV =1 THEN udc.CU :=TRUE;END_IF
IF udc.CV =2 THEN udc.CU :=TRUE;END_IF
IF udc.CV =3 THEN udc.CU :=TRUE;END_IF
IF udc.CV =4 THEN udc.CU :=TRUE;END_IF

IF udc.Q=TRUE THEN udc.RESET:=TRUE;END_IF
IF udc.CU THEN udc.CU :=FALSE;END_IF

udc (
pv:=5);

(*****кусочек 4*****)
WHILE mainLoop DO

IF i=0 THEN i:=i+1; END_IF
IF i=1 THEN i:=i+1; END_IF
IF i=2 THEN i:=i+1; END_IF
IF i=3 THEN i:=i+1; END_IF
IF i=4 THEN i:=i+1; END_IF
IF i=5 THEN i:=i+1; END_IF
IF i=6 THEN i:=0; END_IF

END_WHILE

(*************)
имеем указанный код^ на ST, скармливаемый CDS v3.5

а теперь ув. знатоки ВОПРОС ?

какой кусок из перечисленных будет работать как конечный автомат ?
начальная переменная инициализируется снаружи (для отладки).

как реализовать конечный автомат на ST?
как это сделать корректно?

просьба не писать "мне нравится так",
а скомпилить и посмотреть как оно работает,
а потом написать,
я думаю что этот вариант лучше потому что...
будем коллективно обсуждать.