Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
doc:jroboplc:modules:task [2013/05/13 19:43] jamis7005 |
doc:jroboplc:modules:task [2021/07/27 12:55] (текущий) denis [task] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== task ====== | ====== task ====== | ||
- | ==== Назначение ==== | + | Управляет организацией процесса выполнения модулей. Задача - это отдельный поток (thread), у которого есть список модулей, которые требуется выполнять с заданной периодичностью. |
- | . | + | |
- | ==== Класс модуля ==== | ||
- | promauto.jroboplc.plugin.**task.TaskModule** | ||
- | |||
- | ==== task.conf.yml ==== | ||
<code yaml> | <code yaml> | ||
- | module.task0: | + | module.taskMain: |
enable: on | enable: on | ||
- | period: 100 | + | period: 1000 |
modules: | modules: | ||
- | di1 | + | _set(taskB,1) |
- | do1 | + | _set(taskA,1) |
- | + | _wait(taskA,2) | |
- | module.task1: | + | _wait(taskB,2) |
+ | SHDSH | ||
+ | _sleep(100) | ||
+ | _set(taskA,3) | ||
+ | _wait(taskA,4) | ||
+ | |||
+ | |||
+ | module.taskA: | ||
enable: on | enable: on | ||
- | period: 1000 | + | period: 0 |
modules: | modules: | ||
- | UVKR | + | _wait(1) |
- | tagsaver | + | 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) | ||
</code> | </code> | ||
- | ==== Описание ==== | ||
- | **module.<name>** - название модуля (см. [[[[doc:jroboplc:notes:how_to_name_modules]]) | + | ^ Параметр ^ Умолчание ^ Описание ^ |
- | + | |**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 |общее время работы, мс | |