Выполнение фоновых задач

Фоновые задачи реализуют математический сценарий и сценарий расписания. Также фоновые задачи выполняют команды Рецепт и Отчёт при вызове функций Recipe() или Report() соответственно.


Не смотря на то, что задачи алармов, математики, расписания и трендов не являются потоками, они обладают параметром Period, которые можно изменить в Settings.ini файле.


По умолчанию в этом файле располагаются следующие значения:


[Period]

Math=100

Sched=50

Alarm=100

Trend=1000,


что означает, что сообщение Period для задачи математики формируется каждые 100мс, для задачи расписание каждые 50 мс, и т.д.


ВНИМАНИЕ:

Не рекомендуется изменять установленные по умолчанию значения этих параметров без особой необходимости. Необдуманные значения параметров могут вызвать неисправность системы и/или затормаживать выполнение некоторых задач.

Перед тем как изменять значения этих параметров, запомните те, которые были установлены по умолчанию. Это позволит исправить ситуацию в случае возникновения неправильной работы системы.


Важно помнить, что поток фоновых задач обладает тем же приоритетом, что и другие потоки среды, а это означает, что операционная система будет выполнять его не дольше 20 мс.


Фоновые задачи приступают к выполнению команд Рецепт и Отчёт при вызове функций Recipe() и Report() соответственно. Поскольку эти функции относятся к разряду синхронных функций, то переключение на выполнение другой задачи (аларма, математики, расписания или тренда) не произойдёт до полного выполнения этих команд. Выполнение функций Recipe() или Report() занимает несколько миллисекунд.


Поток фоновых задач должен обладать инструментом переключения между задачами. Если, к примеру, поток принялся за выполнение задачи расписания, он не переключится на выполнение другой задачи до тех пор, пока не будут выполнены все имеющиеся редакторы расписания. Следующий момент обращения внимания потока на задачу расписания (по окончанию её выполнения) произойдёт по формированию сообщения Period для этой задачи.


Такое поведение потока фоновых задач характерно и при выполнении задач алармов и трендов: если поток переключился на выполнение задачи алармов или трендов, он не прекратит выполнение этой задачи, пока присутствуют сообщения обращения к ней. И точно так же следующий момент обращения потока к задаче алармов или трендов (по окончанию их выполнения) произойдёт по формированию сообщения Period для этих задач.


Задачи алармов, расписания и трендов обычно выполняются в течение нескольких миллисекунд. Однако задача математики может занять несколько больший период времени, поскольку она обычно содержит циклы и сложный сценарий. Поэтому механизм выполнения задачи математики не совпадает с механизмами выполнения остальных задач.


Поток фоновых задач выполняет математический сценарий не дольше 10 мс, после чего переключается на другую задачу. Очередное обращение к выполнению задачи математики произойдёт не быстрее 50 мс. В этот таймаут математики разрешается выполнение остальных задач. После того, как был выполнен весь скрипт математики, очередная итерация его выполнения начнётся при формировании сообщения Period этой задачи.


Ещё раз напомним, что совокупность этих механизмов создана для предотвращения постоянной стопроцентной загрузки CPU.


ВНИМАНИЕ:

Рекомендуется использовать функцию Math() с особой осторожностью в редакторах задачи расписания и в объектах экрана.

Когда в редакторе расписания вызывается функция Math(), то поток фоновых задач занимается выполнением всего математического сценария до конца без прерывания, а это означает блокирование всех остальных задач. Полное выполнение математического сценария может занимать десятки миллисекунд или даже секунды.

Если функция Math() вызывается внутри динамического свойства некоторого объекта экрана, то происходит прерывание обновления экранов окном выполнения приложения до тех пор, пока не выполниться весь сценарий математики.

Если существует необходимость вызова функции Math()  в расписании или в свойстве объекта, во избежание задержек вычисления рекомендуется следующее:

  1. Создать вспомогательный тег, значение которого должно обновляться расписанием или окном выполнения.
  2. Занести этот вспомогательный тег в поле «Выполнение» (Execution) редактора задачи математики.
  3. В последней строке задачи присваивать нулевое значение этому тегу.

В результате, поток фоновых задач не будет приступать к выполнению задачи математики, пока окно выполнения или задача расписания не установит значение вспомогательного тега в единицу.



Created with the Freeware Edition of HelpNDoc: Free Web Help generator