Это старая версия документа.
Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /home/users/p/prom-auto/domains/prom-auto.ru/wiki/inc/parser/handler.php on line 1458
Warning: Declaration of syntax_plugin_tablecalc::handle($match, $state, $pos, &$handler) should be compatible with DokuWiki_Syntax_Plugin::handle($match, $state, $pos, Doku_Handler $handler) in /home/users/p/prom-auto/domains/prom-auto.ru/wiki/lib/plugins/tablecalc/syntax.php on line 41
Warning: Declaration of syntax_plugin_tablecalc::render($mode, &$renderer, $data) should be compatible with DokuWiki_Syntax_Plugin::render($format, Doku_Renderer $renderer, $data) in /home/users/p/prom-auto/domains/prom-auto.ru/wiki/lib/plugins/tablecalc/syntax.php on line 72
Warning: Declaration of syntax_plugin_offline::handle($match, $state, $pos, &$handler) should be compatible with DokuWiki_Syntax_Plugin::handle($match, $state, $pos, Doku_Handler $handler) in /home/users/p/prom-auto/domains/prom-auto.ru/wiki/lib/plugins/offline/syntax.php on line 60
Warning: Declaration of syntax_plugin_offline::render($format, &$renderer, $data) should be compatible with DokuWiki_Syntax_Plugin::render($format, Doku_Renderer $renderer, $data) in /home/users/p/prom-auto/domains/prom-auto.ru/wiki/lib/plugins/offline/syntax.php on line 67
Warning: preg_match(): Compilation failed: invalid range in character class at offset 3416 in /home/users/p/prom-auto/domains/prom-auto.ru/wiki/inc/parser/lexer.php on line 118
====== task ====== Управляет организацией процесса выполнения модулей. Задача - это отдельный поток (thread), у которого есть список модулей, которые требуется выполнять с заданной периодичностью. ==== Класс модуля ==== promauto.jroboplc.plugin.**task.TaskModule** ==== task.conf.yml ==== <code yaml> 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) </code> ==== Описание ==== **module.<name>** - название модуля (см. [[[[doc:jroboplc:notes:how_to_name_modules]]) **enable** - on/off - разрешение работы модуля **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)** - задержка выполнения задачи в мс.