Диспетчер задач. Инь и Ян.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2666
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 34 раза
Поблагодарили: 284 раза

Диспетчер задач. Инь и Ян.

Сообщение Dryundel »

Предисловие.

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

Часть первая "Не так страшен Чёрт, как его малюют"

Практически изначально Автором FLProg задуманы платы в проекте. По сути это независимые кусочки кода которые можно двигать вверх или вниз относительно их взаимного расположения в теле пользовательской программы. От их расположения зависит и очередность выполнения в цикле. Схематично это выглядит так...
.
Диаграмма 1.jpg
.
Все платы в цикле выполняются по порядку и время каждого цикла является суммой времени выполнения каждой из плат. Соответственно, если у вас большая программа то и время цикла может возрастать до неприличных величин и те блоки, работоспособность которых критически зависит от величины таймаута между их выполнением, перестают адекватно работать. Контроллер начинает тормозить и глючить.
Другим же блокам таймаут не важен и бывает даже наоборот, желательно чтобы они выполнялись, например не чаще одного раза в секунду. Чтобы распределить ресурсное время в соответствии с потребностями блоков и был внедрен диспетчер задач. Он выстраивает платы не последовательно а в псевдо-параллель. Моделирует псевдо-многопоточность. Псевдо потому, что поток то у нас остался один и никуда от этого не деться. Условно это можно представить так...
.
Диаграмма 2.jpg
.
Теперь в каждом цикле выполняется всего одна плата. Однако суммарное время выполнения всех плат не изменилось, а даже слегка выросло. Дело в том, что для перезапуска цикла тоже требуется время, хотя и не большое. Последовательность выполнения выглядит так...
.
Диаграмма 3.jpg
.
Если как бы размотать этот клубок, то мы увидим, что ничего не изменилось и смысла использовать все платы со свободой задачей нет никакого. Однако это не совсем так. Дело в том, что помимо плат с вашими блоками существует и служебный код, который будет выполняться каждый цикл, в отличии от кода платы выполняемого один раз в четыре цикла.
Этот момент так же накладывает отпечаток на общее время выполнения всех плат, потому как служебный код тоже занимает процессорное время и выполнится четыре раза за время выполнения всей программы. В том числе в этом служебном коде и "обслуживатель" диспетчера задач.

Ну и в чём смысл? - спросите вы. Да нет в этом особого смысла. И если у вас только свободные задачи, то просто отключите диспетчер задач. Он вам не нужен, а лишь загружает память контроллера и увеличивает время компиляции.


Часть вторая "В чём тайный замысел Демона"

Всё демоническое УМНО и в то же время просто! Главное разобраться как это работает. Так сказать впитать демонические знания. Главное при этом, не продать Демону душу. :)
Бесполезность диспетчера задач заканчивается и начинается магия в том случае, когда наряду со свободными задачами вы начинаете использовать и другие варианты - Оперативная, Быстрая, Фоновая, Медленная задачи.
В отличии от свободных задач, эти выполняются не в порядке очереди, а по таймеру. Время таймаута этих задач вы можете посмотреть в параметрах.
.
Разные Задачи.jpg
.
В процессе выполнения программы, тайминговые задачи не ждут своей очереди, а вклиниваются между свободными, когда пришло время. В своей иерархии они конечно тоже имеют очередность, но это уже не рядовые, а офицерский состав. Соответственно и прав у них больше.

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

Послесловие

Вообще-то это даже хорошо что есть белое и чёрное, Ангел и Демон. Благодаря этому в нашем Мире есть Свет и Тень, Инь и Ян.
Не будь чего то одного, невозможно было бы оценить по достоинству имеемое.

На этом в общем то алес! :)
Абсолютно весь демонический замысел раскрыл для вас за 5 минут.
Буду рад, если мой творческий порыв кому-то поможет.
Ваш Dryundel
2025г.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
slsl
Лейтенант
Сообщения: 338
Зарегистрирован: 08 дек 2021, 22:41
Имя: Вячеслав
Благодарил (а): 19 раз
Поблагодарили: 61 раз

Re: Диспетчер задач. Инь и Ян.

Сообщение slsl »

К слову сказать, в 9-й версии диспетчер стал удобоварим, и даже не вникая в тонкости и мануалы, даёт реальный прирост в производительности, даже в сложных задачах как-то - опрос хардового уарта + MQTT + WEB + дисплей (TFT) + опрос аналог входов + модбас RTU +..., довольно существенно.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2666
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 34 раза
Поблагодарили: 284 раза

Re: Диспетчер задач. Инь и Ян.

Сообщение Dryundel »

slsl писал(а): 17 июл 2025, 17:30 К слову сказать, в 9-й версии диспетчер стал удобоварим, и даже не вникая в тонкости и мануалы, даёт реальный прирост в производительности, даже в сложных задачах как-то - опрос хардового уарта + MQTT + WEB + дисплей (TFT) + опрос аналог входов + модбас RTU +..., довольно существенно.
Расскажите как Вы определили прирост производительности.
Ander
Лейтенант
Сообщения: 557
Зарегистрирован: 31 окт 2023, 12:50
Имя: Андрей
Благодарил (а): 29 раз
Поблагодарили: 110 раз

Re: Диспетчер задач. Инь и Ян.

Сообщение Ander »

Dryundel - посмотрите в каких вызываются Пулы, они тоже в задачах, а не в каждом цикле.
slsl
Лейтенант
Сообщения: 338
Зарегистрирован: 08 дек 2021, 22:41
Имя: Вячеслав
Благодарил (а): 19 раз
Поблагодарили: 61 раз

Re: Диспетчер задач. Инь и Ян.

Сообщение slsl »

Dryundel писал(а): 17 июл 2025, 17:45 Расскажите как Вы определили прирост производительности.
Самое простое - по количеству циклов.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2666
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 34 раза
Поблагодарили: 284 раза

Re: Диспетчер задач. Инь и Ян.

Сообщение Dryundel »

slsl писал(а): 17 июл 2025, 19:12 Самое простое - по количеству циклов.
:smile171:

Не убедительно. Перечитайте внимательно Первую часть и станет понятно, что при диспетчере задач, программа выполняется не за один цикл, а за несколько и количество циклов в единицу времени, в этом случае далеко не показатель производительности.
slsl
Лейтенант
Сообщения: 338
Зарегистрирован: 08 дек 2021, 22:41
Имя: Вячеслав
Благодарил (а): 19 раз
Поблагодарили: 61 раз

Re: Диспетчер задач. Инь и Ян.

Сообщение slsl »

Dryundel писал(а): 17 июл 2025, 19:19 при диспетчере задач, программа выполняется не за один цикл, а за несколько и количество циклов в единицу времени, в этом случае далеко не показатель производительности.
Сильно убеждать и не собирался. Но провёл несколько экспериментов: отключал те или иные модули (платы) с MQTT, опросы портов и.т.д., при этом было видно изменение количество циклов. При отключенном диспетчере дельта изменений была не большая по сравнению с включенном диспетчером. Т.е наблюдал не мгновенные значения, а в динамике по времени.

Одна из тяжёлых задач, жрущих циклы - MQTT.
Technician
Рядовой
Сообщения: 15
Зарегистрирован: 15 апр 2025, 16:29
Имя: Виктор
Благодарил (а): 4 раза
Поблагодарили: 5 раз

Re: Диспетчер задач. Инь и Ян.

Сообщение Technician »

Немного сложно Андрей объяснишь построение алгоритма - это основа вычислительной техники и программирования ,не все поймут.Все инструменты и раньше были : платы по условию и командоаппарат ,только путь указал тот "Кого нельзя называть" :smile38: .
ecoins
Полковник
Сообщения: 4144
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 161 раз
Поблагодарили: 205 раз

Re: Диспетчер задач. Инь и Ян.

Сообщение ecoins »

slsl писал(а): 17 июл 2025, 19:54
Dryundel писал(а): 17 июл 2025, 19:19 при диспетчере задач, программа выполняется не за один цикл, а за несколько и количество циклов в единицу времени, в этом случае далеко не показатель производительности.
Сильно убеждать и не собирался. Но провёл несколько экспериментов: отключал те или иные модули (платы) с MQTT, опросы портов и.т.д., при этом было видно изменение количество циклов. При отключенном диспетчере дельта изменений была не большая по сравнению с включенном диспетчером. Т.е наблюдал не мгновенные значения, а в динамике по времени.

Одна из тяжёлых задач, жрущих циклы - MQTT.
И это понятно. Там много работы со строковыми переменными и возможно в самих блоках присутствуют delay(). Попробуйте размещать эти блоки в медленные задачи (1 раз в секунду вызывается).
CraCk
Лейтенант
Сообщения: 699
Зарегистрирован: 10 сен 2015, 21:51
Благодарил (а): 16 раз
Поблагодарили: 10 раз

Re: Диспетчер задач. Инь и Ян.

Сообщение CraCk »

Где можно почитать, как правильно использовать диспетчер задач в FLProg?
У меня есть проект, сделанный без него, но хочу разобраться, как перейти на "Инь и Ян" 😊
Подскажите, как определить, к какому типу задачи относится моя плата (свободная, фоновая и т.д.)?
Нужно ли сразу проект строить с учётом типов задач, или можно переработать существующий?
Аватара пользователя
Dryundel
Полковник
Сообщения: 2666
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 34 раза
Поблагодарили: 284 раза

Re: Диспетчер задач. Инь и Ян.

Сообщение Dryundel »

CraCk писал(а): 01 авг 2025, 12:19 Нужно ли сразу проект строить с учётом типов задач, или можно переработать существующий?
Для того чтобы потом можно было определиться с типом задачи, проект изначально должен быть разделён та такие отдельные задачи по платам.
Например:
1 плата
Снимаем показания с датчика, заносим в переменную.
2 плата
Выводим показания из обработанный переменной на дисплей
3 плата
Обрабатываем переменную с датчика и готовим её к выводу на дисплей
4 плата
Управляем механизмом в зависимости от показаний датчика.

Заметили непоследовательность?
Так вот она должна работать независимо от порядка плат.

Ну и теперь смотрим
Как часто нам требуется менять данные на дисплее?
Надо ли снимать показания каждый цикл?
Какое быстродействие требуется механизму?

Ответив для себя на такие вопросы, Вы увидите, что ваш первый вопрос уже не актуален.
CraCk
Лейтенант
Сообщения: 699
Зарегистрирован: 10 сен 2015, 21:51
Благодарил (а): 16 раз
Поблагодарили: 10 раз

Re: Диспетчер задач. Инь и Ян.

Сообщение CraCk »

Как-то в голове пока не вкладывается, как все уместить. Есть несколько кнопок, датчиков, выходов, плюс к ним логика. Тогда проект легко потянет не десяток плат?
В чём преимущество Диспетчера задач по сравнению с обычным «Выполнением в цикле» или «по условию»?
Аватара пользователя
Dryundel
Полковник
Сообщения: 2666
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 34 раза
Поблагодарили: 284 раза

Re: Диспетчер задач. Инь и Ян.

Сообщение Dryundel »

Десяток плат - это вообще ни о чём.
Каждая плата должна быть логически завершённым куском, чем меньше тем лучше. Тогда и тестировать и отлаживать будет удобно.
CraCk писал(а): 01 авг 2025, 20:29 В чём преимущество Диспетчера задач по сравнению с обычным «Выполнением в цикле» или «по условию»?
Да ни в чём, в принципе.
Есть топор, а есть пила. В чём преимущество конкретного инструмента? Оба годятся для валки деревьев.
Так же и здесь. Можно использовать таймеры, блинки, условия. А можно распределить выполнение отдельных фрагментов диспетчером задач. Каждый инструмент создан чтобы помогать. Что выберите Вы, зависит только от Вас и задуманной Вами логики.
dstrufanov
Сержант
Сообщения: 205
Зарегистрирован: 07 янв 2024, 12:43
Имя: Дмитрий
Благодарил (а): 23 раза
Поблагодарили: 36 раз

Re: Диспетчер задач. Инь и Ян.

Сообщение dstrufanov »

Dryundel писал(а): 01 авг 2025, 20:50 Каждая плата должна быть логически завершённым куском, чем меньше тем лучше.
А почему это не касается блоков математики? :smile38:
ecoins
Полковник
Сообщения: 4144
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 161 раз
Поблагодарили: 205 раз

Re: Диспетчер задач. Инь и Ян.

Сообщение ecoins »

CraCk писал(а): 01 авг 2025, 20:29 Как-то в голове пока не вкладывается, как все уместить. Есть несколько кнопок, датчиков, выходов, плюс к ним логика. Тогда проект легко потянет не десяток плат?
В чём преимущество Диспетчера задач по сравнению с обычным «Выполнением в цикле» или «по условию»?
1.Планирование задач становится важным при росте проекта.
2.В 9-ой версии FLProg использует неблокирующие библиотеки - в последовательности действий в функции предусмотрена проверка событий (ожидание по времени, наполнение буфера данными(например uart,i2c), состояние пина, другие логические условия - функция выходит из выполнения до следующего входа.
В итоге диспетчером управление передается следующей плате.
3.В основе конечно лежат именованные задачи (все кроме свободных).
Они обеспечивают гарантированный вызов платы с установленным усредненным периодом. Это если требуется задаче.
У этих задач есть еще одно достоинство: разгружают процессор он излишне частого обращение к функции. Например вывод на консоль - этот блок всегда проверяет условия вывода(для строк это требует ощутимого времени) - лучше вызвать его в медленной задаче (при их кол-ве по умолчанию=4 плата будет вызываться 1 раз в сек, вместо например 1 раз в 10мкс).
4.Но хорошо спроектированные именованные задачи отнимают не много процессорного времени и в промежутках между их вызовами управление передается свободным задачам. Они делаются на неблокирующих библиотеках, рекомендуется чтобы их длительность не превышала 10мс(не обязательное требование).
Здесь хорошо ложатся работа с пинами, блоками сенсоров, расширителей, дисплеи.
При кол-ве свободных задач по умолчанию=50, цикл конкретной свободной задачи (например 32) условно составит 150мкс.
5.Оценить достигнутую производительность можно через системный параметр быстродействие, который можно выводить на консоль, web, modbus, новый LCD.
6.В действительности механизм диспетчерирования задач сложнее, чем здесь описаны - многие процессы реализуется в более приоритетном режиме (TCP,Modbus,новый LCD, запись в EEPROM и др.).
---------------------
Все это может показаться сложно, но для простоты просто используйте свободные задачи "как на ум придет" и уже получите ощутимый эффект за которым можно наблюдать через системный параметр "Быстродействие".
---------------------
Надо ли погружаться в эту тему глубоко. Не обязательно. Вы же не вникаете как планируются процессы и задачи в Windows.
Но там проще - немного подвис, затормозил и прочее, пользователь на это и внимание не обратит.
В системах автоматизации, особенно в промышленных, такое не допустимо.
Система диспетчерирования задач FLPRog в этом смысле и существенно строже и сложнее чем операционные системы ПК и гаджетов.
И здесь как в современном автомобиле - понимаешь что лучше, чем на старом, но похоже не стоит вникать почему. Просто доверься... Или пересядь на вполне приличный автомобиль Москвис-2141.
Одна беда - новые не делаются, а старые почти все сгнили...
------------------------
С уважением, ecoins.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2666
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 34 раза
Поблагодарили: 284 раза

Re: Диспетчер задач. Инь и Ян.

Сообщение Dryundel »

dstrufanov писал(а): 01 авг 2025, 21:15
Dryundel писал(а): 01 авг 2025, 20:50 Каждая плата должна быть логически завершённым куском, чем меньше тем лучше.
А почему это не касается блоков математики? :smile38:
В смысле? Почему не касается? И в чём Вы увидели незавершенность?
dstrufanov
Сержант
Сообщения: 205
Зарегистрирован: 07 янв 2024, 12:43
Имя: Дмитрий
Благодарил (а): 23 раза
Поблагодарили: 36 раз

Re: Диспетчер задач. Инь и Ян.

Сообщение dstrufanov »

Dryundel писал(а): 01 авг 2025, 21:39 В смысле? Почему не касается? И в чём Вы увидели незавершенность?
Ну как же... Логически завершенный кусок (чем меньше, тем лучше) любой формулы - это одна математическая операция
Аватара пользователя
Dryundel
Полковник
Сообщения: 2666
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 34 раза
Поблагодарили: 284 раза

Re: Диспетчер задач. Инь и Ян.

Сообщение Dryundel »

dstrufanov писал(а): 01 авг 2025, 22:16 Ну как же... Логически завершенный кусок (чем меньше, тем лучше) любой формулы - это одна математическая операция
А вот тут Вы меня подловили! Пять баллов! :smile9: :D
Надеюсь все поняли, что товарищ шутит? Или действительно остались те, кому надо это пояснять?
Fm-Nafing
Рядовой
Сообщения: 85
Зарегистрирован: 13 июл 2016, 13:24
Откуда: Санкт-Петербург
Имя: Владислав
Благодарил (а): 1 раз
Поблагодарили: 4 раза

Re: Диспетчер задач. Инь и Ян.

Сообщение Fm-Nafing »

А теперь давайте вспомним как и для кого создавался FL Prog. Напомню "для НЕ программистов".
И ведь так и было. Я раньше, за 10 минут мог научить коллег которые ваще не бум бум, блинькать, получать данные с температурметра, вывести эти данные на 1602.
И самое главное, что это зарождало у них интерес к созданию новых идей и новых плюшек.
Что сейчас? Чёрт ногу сломит. Мне ито не всё понятно.
Я конечно понимаю от куда ноги растут. И кто это двигает.
Для кого теперь этот продукт? Для начинающих?
Давайте сами, от третьего лица, вкурите что вы тут настрочили.
Я конечно могу ошибаться, но думаю что пора делить FL-ку на две части FL-Prog_start и FL-Prog_PRO.
Я изменил бы мир. Но Бог не дал исходников.
ecoins
Полковник
Сообщения: 4144
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 161 раз
Поблагодарили: 205 раз

Re: Диспетчер задач. Инь и Ян.

Сообщение ecoins »

Fm-Nafing писал(а): 02 авг 2025, 08:49 А теперь давайте вспомним как и для кого создавался FL Prog. Напомню "для НЕ программистов".
И ведь так и было. Я раньше, за 10 минут мог научить коллег которые ваще не бум бум, блинькать, получать данные с температурметра, вывести эти данные на 1602.
И самое главное, что это зарождало у них интерес к созданию новых идей и новых плюшек.
Что сейчас? Чёрт ногу сломит. Мне ито не всё понятно.
Я конечно понимаю от куда ноги растут. И кто это двигает.
Для кого теперь этот продукт? Для начинающих?
Давайте сами, от третьего лица, вкурите что вы тут настрочили.
Я конечно могу ошибаться, но думаю что пора делить FL-ку на две части FL-Prog_start и FL-Prog_PRO.
Хороший и зрелый путь.
Вы для кого написали эти указания?
Возможно для себя. Вот и начинайте делить FLProg на две части, возьмитесь за одну. Желаю успехов.
Ответить

Вернуться в «Обучающие примеры работы в FLProg»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя