Мы у себя в АСУТП что-то типа простого Self-Checking-а тоже применяем.
Каждый Оберон-мессидж имеет процедуру Check, состояние любого объекта тоже имеет процедуру валидации - и эти валидации выполняются как при прохождении мессиджей, так и при установке нового состояния объекта после такта работы логики.