Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
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 |общее время работы, мс | |