Опять же большое спасибо!
Другой вопрос - по реализации конечных автоматов в CDS.
Суть вопроса - как производить некое действие (показ визуализации в моем случае) однократно при наступлении заданного события (перехода КА в определенный статус)?
Пример - есть два статуса КА - State1 и State2. Когда КА в первом, то пользователь должен видеть Vis1, для Статуса2 - Vis2. Но из Vis1 можно перейти в VisN посредством нажатия кнопки, например.
Тогда имеем примерно такой код:
Case System.State OF
State1:
<код, связанный со статусом>
VisuElems.CurrentVisu:='Vis1';
State2:
<код, связанный со статусом>
VisuElems.CurrentVisu:='Vis2';
END_CASE
Проблема тут в том, что это код будет выполнятся постоянно благодаря парадигме CDS и из Vis1 мы никогда не перейдем в VisN, поскольку VisN будет в следующем цикле затерта Vis1.
Эта же проблема делает очень затруднительной отладку в симуляции, когда нельзя вручную выбрать визуализацию.
Решение, которое напрашивается - это блокировка навроде:
Case System.State OF
State1:
<код, связанный со статусом>
IF DrawOnlyOnce = True Then
VisuElems.CurrentVisu:='Vis1';
DrawOnlyOnce :=False;
END_IF
State2:
<код, связанный со статусом>
VisuElems.CurrentVisu:='Vis2';
END_CASE
Но это какой-то громоздкий и неправильный выход.
Как надо в этом случае поступать?