+1. Зависать в любом месте программі нельзя.
Да, в принципе. уважаемый коллега petera дал вполне годный код. Автору вопроса нужно всего лишь ввести этот код в пустой проект, подключить Standard.lib и убедиться, как все красиво работает. То, что у него должно выполняться 1 раз в каждом шаге цикла при истечении таймера - записать над или под строкой
И фсьо...Код:i:=i+1;
Рассуждая дальше, не могу не отметить, что упомянутая "сложная и громоздкая" конструкция CASE на самом деле очень и очень часто используется как раз при разруливании задачи: выполнять несколько разных по смыслу действий с разносом в некоторые интервалы времени (даже не обязательно одинаковые, как в нашем примере) или по выплнению тех или иных условий во внешнем мире (то есть ожидать не внутренние таймеры, а внешние события). Для таких случаев заводится переменная ФАЗА, которая может принимать одно из ограниченного множества значений, а по ней прокручивается тот самый
Ну, и уж совсем красиво это решается в SFC. Там замени слово ФАЗА на понятие ШАГ - и получишь те же крашенки, только в профиль :)Код:CASE ФАЗА OF
ФАЗА1: (* Ждем Q первого таймера *)
...
ФАЗА2: (* Ждем Q второго таймера *)
...
ФАЗА3: (* Джем внешнего события *)
...
END_CASE