Различия
Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
doc:jroboplc:modules:task [2015/11/15 13:24] denis [Описание] |
doc:jroboplc:modules:task [2021/07/27 12:55] (текущий) denis [task] |
||
|---|---|---|---|
| Строка 3: | Строка 3: | ||
| Управляет организацией процесса выполнения модулей. Задача - это отдельный поток (thread), у которого есть список модулей, которые требуется выполнять с заданной периодичностью. | Управляет организацией процесса выполнения модулей. Задача - это отдельный поток (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** | - |период выполнения одного цикла, мс | | |
| - | **enable** - on/off - разрешение работы модуля | + | |**modules** | - |список имен модулей, команды синхронизации и задержки | |
| - | + | ||
| - | **period** - период выполнения одного цикла, мс | + | |
| - | + | ||
| - | **modules** - список имен модулей, команды синхронизации и задержки. | + | |
| При подаче команды start все модули плагина task инициализируются и создают отдельные потоки, в который с заданной периодичность вызываются модули в указанной последовательности. После подачи команды stop потоки уничтожаются. | При подаче команды start все модули плагина task инициализируются и создают отдельные потоки, в который с заданной периодичность вызываются модули в указанной последовательности. После подачи команды stop потоки уничтожаются. | ||
| - | ==== Синхронизация ==== | + | ===== Синхронизация ===== |
| Модули задач (или потоки) могут работать как независимо друг от друга, так и синхронно. Для этого каждая задача имеет внутреннюю переменную, доступную для чтения и записи другими задачами. Команды работы с данной переменной помещаются в список ''modules'': | Модули задач (или потоки) могут работать как независимо друг от друга, так и синхронно. Для этого каждая задача имеет внутреннюю переменную, доступную для чтения и записи другими задачами. Команды работы с данной переменной помещаются в список ''modules'': | ||
| - | **set(value)** - установить значение собственной переменной | + | |**_set(value)** |установить значение собственной переменной | |
| - | + | |**_set(task, value)** |установить значение переменной другой задачи | | |
| - | **set(task, value)** - установить значение переменной другой задачи | + | |
| Команды установки могут принимать только положительные значения (от 0 включительно и выше). Изначально переменные инициализируются в 0. | Команды установки могут принимать только положительные значения (от 0 включительно и выше). Изначально переменные инициализируются в 0. | ||
| - | **wait(value)** - ожидание заданного значения собственной переменной | + | |**_wait(value)** |ожидание заданного значения собственной переменной | |
| + | |**_wait(task, value)** |ожидание заданного значения переменной другой задачи | | ||
| - | **wait(task, value)** - ожидание заданного значения переменной другой задачи | + | Ожидание чужой переменной длится не более заданного времени period, если собственный period больше 0. При превышении времени ожидания (тайм-ауте), в переменную записывается значение -1, ожидание прекращается, задача переходит к выполнению следующей позиции в списке modules. Если же period равен 0, ожидание длится неопределенно долго. |
| - | Ожидание чужой переменной длится не более заданного времени period, если period > 0. При превышении времени ожидания (тайм-ауте), в переменную записывается значение -1, ожидание прекращается, задача переходит к выполнению следующей позиции в списке modules. Если же period равен 0, ожидание длится неопределенно долго. | + | Ожидание собственной переменной всегда длится неопределенно долго. Если в процессе ожидания в собственной переменной появляется не желаемое значение, а -1, то ожидание прекращается, и задача продолжает свое выполнение. |
| - | Ожидание собственной переменной всегда длится неопределенно долго. В случае об | + | Значение -1 устанавливается и сбрасывается автоматически, исключая взаимоблокировки задач. Его нельзя использовать при конфигурировании с командами _set и _wait. |
| + | ===== Другие команды ===== | ||
| + | |**_sleep(ms)** |задержка выполнения задачи в мс | | ||
| + | ===== Теги ===== | ||
| + | |running |состояние | | ||
| + | |statebaton |синхронизационный тег (используется только для отладки) | | ||
| + | |timecounter |кол-во отработанных циклов | | ||
| + | |timecycle |время рабты последнего цикла, мс | | ||
| + | |timetotal |общее время работы, мс | | ||