Цитата Сообщение от Але-ндр Посмотреть сообщение
ДА.
Как это не парадоксально. но вся программа у меня также написана на FBD и уже давно работает (больше 2 лет).
А тут решил ( как говорится) ради самоистязания (в свободное время) изучить ST, и переписать уже работающую программу. (на самом деле готовлю обновление).
По этому все вопросы исключительно по ST.
Самая большая проблема что я не смог найти данных о времени выполнения тех или иных функций (тайминги реального процессора) хотя в принципе они не критичны. Опытным путем определил что Vaur OUT := Var IN корректно работает в первых трех строках.
И до сих пор не разобрался в приоритетах выполнения (последовательности функциональных блоков).

Почему разбиваю выполнение на 2 блока? На самом деле это мая (в некотором смысле ) прихоть не хочу нагружать цикл тупым переписываниями 14 переменных одними и теми же данными, обычно они прописываются при инициализации. К сожалению при определении переменных им можно задавать только константы. На сколько я помню (могу ошибаться, не хочу лезть в справочник) на запись уходит 3 такта процессор (3х14=42) а на функцию IF около 10.
Ситуация с "первыми тремя строчками" конечно странная - как я понимаю, при обработке ФБ его программа на ST обрабатывается полностью, прежде чем произойдёт запись в переменные, присоединённые к его выходам или начнётся обработка следующего ФБ. И поэтому все эти такты/тайминги влияют только на общее значение текущего времени обработки холста (времени цикла).

Выбор порядка выполнения блоков остаётся за компилятором, и можно повлиять на него лишь используя линии задержки. Наверное можно считать, что ФБ связанные непосредственной линией связи - будут обработаны последовательно,. Я бы хотел, чтобы на блоках отображался порядок их выполнения (хотя бы по вызову, как например в CDS3.5)