Страница 1 из 1
Порядок выполнения логики в FBD
Добавлено: 03.08.2016{, 15:28}
Arsbond
Добрый день!
Обнаружился такой баг: при стандартном для восприятия расположении трех блоков SWITCH (два промежуточных слева друг над другом, последний правее и посередине) логика отрабатывает некорректно. При перемещении третьего блока вниз (ниже первых двух) он в коде выполняется последним и логика отрабатывает корректно. Выявилось это при анализе кода после компиляции.
Во вложении два скрина с расположением блоков и соответствующим кодом для понимания.
Порядок выполнения логики в FBD
Добавлено: 03.08.2016{, 15:49}
Darel68
Приветствую!
Тоже попробовал -- есть такое и в 14, и в 15 версии.
Порядок выполнения логики в FBD
Добавлено: 09.08.2016{, 13:25}
Evgesha
тоже самое заметил в блоках mux. пришлось делать проскок в в одном блоке меньше чем в другом(плата номер 5).
Порядок выполнения логики в FBD
Добавлено: 10.08.2016{, 08:16}
Balzamalex
Порядок выполнения логики в FBD
Добавлено: 25.08.2016{, 16:14}
Слимпер
Arsbond писал(а):Обнаружился такой баг: при стандартном для восприятия расположении трех блоков SWITCH (два промежуточных слева друг над другом, последний правее и посередине) логика отрабатывает некорректно. При перемещении третьего блока вниз (ниже первых двух) он в коде выполняется последним и логика отрабатывает корректно. Выявилось это при анализе кода после компиляции.Во вложении два скрина с расположением блоков и соответствующим кодом для понимания.
Ну тут не баг, а недопонимание
support, писал:
Затем обрабатываются оконечные блоки. Это в основном блоки которые не имеют выходов. Например вывод на дисплей, вывод на UART, запись в переменные.
Порядок обработки блоков внутри групп организован следующим образом. Первым обрабатывается блок наиболее близкий по прямой (пришлось вспоминать расчёт гипотенузы в прямоугольном треугольнике) к правому верхнему углу платы. Последним соответственно самый дальний.
Логические блоки (например AND, OR, входы, математика) не рассчитываются. При обработке блоков других типов запрашивается состояние выходов таких блоков. Они в ответ выдают логические выражения (готовый код С) соответствующие своей логике. Такое решение принято для экономии памяти контроллера. Не хорошо было бы для каждого логического или математического действия создавать переменную. В большинстве случаев в этом нет необходимости.
Ну где то так. Это очень упрощённо, на самом деле логика компилятора намного сложнее. Я даже не очень представляю как её описать подробно. На это потребуется много времени и сил.
Т.е. все обрабатывается как и должно. Когда вы сдинули блок в низ все отработало корректно.
Только можно не так сильно это делать.
Порядок выполнения логики в FBD
Добавлено: 25.08.2016{, 16:36}
Слимпер
А вот, что уже интересно
Вариант 1
Все правильно и корректно, претензий нет.
Вариант 2
Вот тут уже как не сдвигай, правильной последовательности получить не получится.