Эмм... оукей... Я тоже люблю говорящий код. Но я не люблю инородный код. Прелесть стандартных таймеров в том, что они хорошо работают в бесконечном цикле ПЛК. Пример из первого сообщения реализуется на обычном TON вот так:
Код:
VAR
ton1: TON := (PT := T#10s);
END_VAR
ton1(IN := NOT ton1.Q);
Одна строка. А действия в ФБ тяготеют к десктопной однократности, и из-за них приходится ставить IF'ы. В результате растёт цикломатическая сложность программы. И хоть она становится в какой-то мере более читаемой, но читать-то приходится воду. Так что не очень мне по нраву такой подход.
У меня вот в одном проекте были свои таймеры с перемоткой, паузой и задним ходом на основе стандартных. Делалось подменой функции TIME на свою в таймерах из библиотеки Standard.lib (есть её открытая версия Standard-intern.lib). Презабавнейшая вещь была в плане отладки длительных процессов.