Содержание

task

Управляет организацией процесса выполнения модулей. Задача - это отдельный поток (thread), у которого есть список модулей, которые требуется выполнять с заданной периодичностью.

module.taskMain:
  enable:   on
  period:   1000
  modules:
       _set(taskB,1)
       _set(taskA,1)
       _wait(taskA,2)
       _wait(taskB,2)
       SHDSH
       _sleep(100)
       _set(taskA,3)
       _wait(taskA,4)
 
       
module.taskA:
  enable:   on
  period:   0
  modules:
       _wait(1)
       plci1
       prks1
       pdat1
       _set(2)
       _wait(3)
       plco1
       _sleep(100)
       _set(4)
  
module.taskB:
  enable:   on
  period:   0
  modules:
       _wait(1)
       icp1
       icp2
       _set(2)
Параметр Умолчание Описание
delayStart - задержка начала выполнения задачи при старте приложения, мс
period - период выполнения одного цикла, мс
modules - список имен модулей, команды синхронизации и задержки

При подаче команды start все модули плагина task инициализируются и создают отдельные потоки, в который с заданной периодичность вызываются модули в указанной последовательности. После подачи команды stop потоки уничтожаются.

Синхронизация

Модули задач (или потоки) могут работать как независимо друг от друга, так и синхронно. Для этого каждая задача имеет внутреннюю переменную, доступную для чтения и записи другими задачами. Команды работы с данной переменной помещаются в список modules:

_set(value) установить значение собственной переменной
_set(task, value) установить значение переменной другой задачи

Команды установки могут принимать только положительные значения (от 0 включительно и выше). Изначально переменные инициализируются в 0.

_wait(value) ожидание заданного значения собственной переменной
_wait(task, value) ожидание заданного значения переменной другой задачи

Ожидание чужой переменной длится не более заданного времени period, если собственный period больше 0. При превышении времени ожидания (тайм-ауте), в переменную записывается значение -1, ожидание прекращается, задача переходит к выполнению следующей позиции в списке modules. Если же period равен 0, ожидание длится неопределенно долго.

Ожидание собственной переменной всегда длится неопределенно долго. Если в процессе ожидания в собственной переменной появляется не желаемое значение, а -1, то ожидание прекращается, и задача продолжает свое выполнение.

Значение -1 устанавливается и сбрасывается автоматически, исключая взаимоблокировки задач. Его нельзя использовать при конфигурировании с командами _set и _wait.

Другие команды

_sleep(ms) задержка выполнения задачи в мс

Теги

running состояние
statebaton синхронизационный тег (используется только для отладки)
timecounter кол-во отработанных циклов
timecycle время рабты последнего цикла, мс
timetotal общее время работы, мс