Перегружен процессор

Простейшие вопросы в области инженерной разработки

Перегружен процессор

Postby AlexOskar on 18 Jun 2017, 10:20

Здравствуйте форумчане!
Создал VI с несколькими режимами работы, но столкнулся с проблемой - один из режимов очень сильно загружает процессор (колеблется от 88 до 100%). Перепробовал и перечитал много всего, но ничего не помогает (увеличение задержек в цикле только замедляет скорость колебания загрузки процессора). Да и сложного, на мой взгляд, ничего в цикле не вычисляется.
Проблемным является цикл CONTROL LOOP. Если запустить VI в режиме "Автоматическое управление", то начнет работать цикл внутри кейса "Automatic control". С этого момента и начинается сильная загрузка ЦП. При переходе в режим "Ручное управление" (кейс "Manual control") - все становится отлично (загрузка ЦП не более 15%).
Подскажите, пожалуйста, что так сильно грузит ЦП и как это можно поправить?
Last edited by AlexOskar on 21 Jun 2017, 16:06, edited 1 time in total.
AlexOskar
user
user
 
Posts: 86
Joined: 05 Jul 2016, 21:02
LabVIEW Version: 12
Karma: 6

Re: Перегружен процессор

Postby alex3f on 19 Jun 2017, 08:12

Попробуйте убрать узлы свойств "Галка РУЧ" и "Галка АВТ" из цикла.
alex3f
beginner
beginner
 
Posts: 13
Joined: 23 Aug 2016, 09:16
LabVIEW Version: 2016
Karma: 5

Re: Перегружен процессор

Postby Shurik_85 on 19 Jun 2017, 15:39

Может стоит как-то синхронизировать между собой значения входных параметров TimeUot функции "Wait on Notification Function", "Wait" во внутреннем и во внешнем цикле. А то они все по 250 мс, и в случае если "Wait on Notification Function" получает уведомление на 250-ой мс (например), то на выполнение остальной части кода внутреннего цикла времени уже нет (т.к. "Wait" уже отмерила свои 250 мс, поскольку запустилась она одновременно с "Wait on Notification Function"), то же касается и "Wait" во внешнем цикле, которая запустилась одновременно с "Case" вашего автомата состояний (здесь состояние только усугубляется, если внутренний цикл прокрутился не один раз). Соответственно, раз время "Wait" истекло, то проц будет пытаться выполнить все (хоть и не сложные) оставшиеся операции за максимально короткое время, и нагружаться на все 100 % как во внутреннем, так и во внешнем цикле.
Кстати, изменение свойств видимости элементов фронтальной панели через узлы свойств тоже нормально добавляет работы процу, особенно если по времени "завал".

Так что как-то нужно как-то ручками синхронизировать работу перечисленных функций:
- может быть явно заставить их работать последовательно;
- может быть подобрать правильные задержки;
- может менять входной параметр функций "Wait" в зависимости от того выполнилось ли условие TimeOut у "Wait on Notification Function", или смотреть выполнять/не выполнять её вообще;
- может гарантировать генерацию уведомлений чаще (не реже), чем раз в 200 мс (меньше 250);
- ...

А вообще если, то как-то не очень запускать "цикл в цикле" при использовании автомата состояний. Не дождался уведомления на текущей итерации - не делай ничего, выйди из кейса и зайди в него же на следующей итерации внешнего цикла. Как-то так.
Shurik_85
beginner
beginner
 
Posts: 43
Joined: 13 Apr 2014, 18:53
LabVIEW Version: 14
Karma: 6

Re: Перегружен процессор

Postby Artem.spb on 20 Jun 2017, 11:59

AlexOskar, чем-то системе не нравится ваш кластер Power. Если его спрятать, то загрузка процессора падает.
Может, там есть какая-то скрытая анимация или что-то вроде того. У меня не 100%, но при отображении этого контрола прибавляется процентов 20.

Shurik_85 wrote:Может стоит как-то синхронизировать между собой значения входных параметров TimeUot функции "Wait on Notification Function", "Wait" во внутреннем и во внешнем цикле. А то они все по 250 мс, и в случае если "Wait on Notification Function" получает уведомление на 250-ой мс (например), то на выполнение остальной части кода внутреннего цикла времени уже нет (т.к. "Wait" уже отмерила свои 250 мс, поскольку запустилась она одновременно с "Wait on Notification Function"), то же касается и "Wait" во внешнем цикле, которая запустилась одновременно с "Case" вашего автомата состояний (здесь состояние только усугубляется, если внутренний цикл прокрутился не один раз). Соответственно, раз время "Wait" истекло, то проц будет пытаться выполнить все (хоть и не сложные) оставшиеся операции за максимально короткое время, и нагружаться на все 100 % как во внутреннем, так и во внешнем цикле..


Вот вообще не так.
"Wait" никоим образом напрямую не задаёт период исполнения цикла. Это функция ОЖИДАНИЕ. Она исполняется, как и все другие, функции параллельно с остальным кодом. И исполняется она равно заданное время (в данном случае 250мс). С той лишь разницей, что она не грузит процессор во время своей работы, в отличие от других функций.
и если что-то там не успевает исполнится в 250 мс, то система не будет пытаться успеть выполнить это в 250 мс.
Пример: пауза 10, а все функции требуют 500 (например, получение данных по сети), цикл будет работать 500мс, и не будет пытаться выкачать данные за 10мс.

Вообще, все функции исполняются максимально быстро с учётом приоритета. Есть время проца - быстро посчиталось, нет - ждёт очереди.

Единственное исключения в работе "Wait", влияющее на цикл - это пауза=0, в этом случае исполнение цикла начинается моментально с получением управления функцией "Wait". В остальных
Artem.spb
expert
expert
 
Posts: 1220
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 214
CLD hardware I/O VIP freelance

Re: Перегружен процессор

Postby AlexOskar on 21 Jun 2017, 09:46

Artem.spb wrote:AlexOskar, чем-то системе не нравится ваш кластер Power. Если его спрятать, то загрузка процессора падает.
Может, там есть какая-то скрытая анимация или что-то вроде того. У меня не 100%, но при отображении этого контрола прибавляется процентов 20.

Да да да! Вчера сам, случайно, заметил что при отображении этого кластера на дисплее загрузка 100%, а следует свернуть приложение - все отлично. В общем это был кластер из UI Control Suite - Metallic Theme и как только заменил его на обычный - все заработало отлично!
Всем спасибо за помощь!!!
AlexOskar
user
user
 
Posts: 86
Joined: 05 Jul 2016, 21:02
LabVIEW Version: 12
Karma: 6

Re: Перегружен процессор

Postby Shurik_85 on 23 Jun 2017, 15:21

"Wait" никоим образом напрямую не задаёт период исполнения цикла.

Согласен, что-то я тут совсем всё в кучу намешал (и While, и Timed Loop, и Wait, ... ) :dntknw: :crazy:

На счёт
...никоим образом ...

Можно тактировать цикл While с помощью Wait, запустив её параллельно остальному коду цикла, только ограничение на время исполнения цикла она накладывает "снизу", т.е. если остальной код цикла выполняется быстрее, чем время на входе Wait, то цикл "подождёт" до заданного времени паузы. Ну а если на выполнение кода нужно больше времени, чем на входе Wait, то всё так, как описано выше. И да, это влияние не напрямую.
Shurik_85
beginner
beginner
 
Posts: 43
Joined: 13 Apr 2014, 18:53
LabVIEW Version: 14
Karma: 6

Re: Перегружен процессор

Postby Kosist on 24 Jun 2017, 11:00

Нужно обращаться "к истокам" - вот ведь все расписано - http://digital.ni.com/public.nsf/allkb/ ... 57004DD8E2
Мы делили апельсин - много наших полегло...
User avatar
Kosist
leader
leader
 
Posts: 782
Joined: 21 Feb 2011, 23:44
Location: СумГУ
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 236
CLAD I/O VIP students


Return to Для чайников

Who is online

Users browsing this forum: No registered users and 12 guests

cron