С девятой версии FLProg в штатных инструментах появился диспетчер задач. Авторство этого нововведения принадлежит тому "Кого нельзя называть". Но наверняка все о нём, если и не знают, то догадываются. Для этого программу FLProg нафаршировали демоническими библиотеками. Я не скажу что эти библиотеки плохо работают. Наоборот, это весьма умный и продвинутый подход в сфере программирования на FBD (Function Block Diagram). Демонические они потому, что как и всё демоническое, покрыты мраком. Никто, повторюсь НИКТО из пользователей FLProg, кроме самого Демона не сможет в них до конца разобраться, а тот кто способен, не будут этого делать. Ибо для практического применения вне среды FLProg в целом они не пригодны, в том числе и потому, что постоянно трансформируются.
В этой статье я постараюсь пролить свет на основные моменты нового функционала под таинственным и величественным названием ДИСПЕТЧЕР ЗАДАЧ. Мы не будем вникать как он устроен, а разберёмся как этим чудом пользоваться. Во всяком случае на этапе версии FLProg 9.4.x.
Часть первая "Не так страшен Чёрт, как его малюют"
Практически изначально Автором FLProg задуманы платы в проекте. По сути это независимые кусочки кода которые можно двигать вверх или вниз относительно их взаимного расположения в теле пользовательской программы. От их расположения зависит и очередность выполнения в цикле. Схематично это выглядит так...
. .
Все платы в цикле выполняются по порядку и время каждого цикла является суммой времени выполнения каждой из плат. Соответственно, если у вас большая программа то и время цикла может возрастать до неприличных величин и те блоки, работоспособность которых критически зависит от величины таймаута между их выполнением, перестают адекватно работать. Контроллер начинает тормозить и глючить.
Другим же блокам таймаут не важен и бывает даже наоборот, желательно чтобы они выполнялись, например не чаще одного раза в секунду. Чтобы распределить ресурсное время в соответствии с потребностями блоков и был внедрен диспетчер задач. Он выстраивает платы не последовательно а в псевдо-параллель. Моделирует псевдо-многопоточность. Псевдо потому, что поток то у нас остался один и никуда от этого не деться. Условно это можно представить так...
. .
Теперь в каждом цикле выполняется всего одна плата. Однако суммарное время выполнения всех плат не изменилось, а даже слегка выросло. Дело в том, что для перезапуска цикла тоже требуется время, хотя и не большое. Последовательность выполнения выглядит так...
. .
Если как бы размотать этот клубок, то мы увидим, что ничего не изменилось и смысла использовать все платы со свободой задачей нет никакого. Однако это не совсем так. Дело в том, что помимо плат с вашими блоками существует и служебный код, который будет выполняться каждый цикл, в отличии от кода платы выполняемого один раз в четыре цикла.
Этот момент так же накладывает отпечаток на общее время выполнения всех плат, потому как служебный код тоже занимает процессорное время и выполнится четыре раза за время выполнения всей программы. В том числе в этом служебном коде и "обслуживатель" диспетчера задач.
Ну и в чём смысл? - спросите вы. Да нет в этом особого смысла. И если у вас только свободные задачи, то просто отключите диспетчер задач. Он вам не нужен, а лишь загружает память контроллера и увеличивает время компиляции.
Часть вторая "В чём тайный замысел Демона"
Всё демоническое УМНО и в то же время просто! Главное разобраться как это работает. Так сказать впитать демонические знания. Главное при этом, не продать Демону душу.

Бесполезность диспетчера задач заканчивается и начинается магия в том случае, когда наряду со свободными задачами вы начинаете использовать и другие варианты - Оперативная, Быстрая, Фоновая, Медленная задачи.
В отличии от свободных задач, эти выполняются не в порядке очереди, а по таймеру. Время таймаута этих задач вы можете посмотреть в параметрах.
. .
В процессе выполнения программы, тайминговые задачи не ждут своей очереди, а вклиниваются между свободными, когда пришло время. В своей иерархии они конечно тоже имеют очередность, но это уже не рядовые, а офицерский состав. Соответственно и прав у них больше.
Но самым главным генералом, который плевать хотел на все очередности - это плата на которой поставлено "Без диспетчера задач". Такая плата встанет во главу и будет выполняться каждый цикл наряду со служебным кодом. Однако чем выше звание тем больше и ответственность. Сделав много таких плат, вы убьёте весь замысел.
. .
С названиями задач конечно беда. "Свободная задача"- ну какая же она свободная, когда ущемлена больше всего. Её свобода лишь в том, чтобы стоять и ждать своей очереди в борьбе за право на цикл. Но на то он и Демон, чтобы ввести во искушение, а потом нагнать мути и заморочить. Я догадываюсь откуда ноги растут. Неудачная калька с английского - free task.
Будь моя воля, назвал бы более привычными для славян терминами, типа Рядовая задача, Задача I ранга, Задача II ранга, Внеочередная задача и т.п.
Но Демону видней, да и колода у него в руках.
Послесловие
Вообще-то это даже хорошо что есть белое и чёрное, Ангел и Демон. Благодаря этому в нашем Мире есть Свет и Тень, Инь и Ян.
Не будь чего то одного, невозможно было бы оценить по достоинству имеемое.
На этом в общем то алес!

Абсолютно весь демонический замысел раскрыл для вас за 5 минут.
Буду рад, если мой творческий порыв кому-то поможет.
Ваш Dryundel
2025г.