Tarefas no ambiente do HIstudio
A norma IEC 61131-3 define a funcionalidade de Tarefas que podem ser associadas a POU´s de programa. Este recurso permite que partes da aplicação possam ser executadas em intervalos de tempo diferentes e com prioridades distintas, permitindo que processos que exijam um tratamento mais rápido em resposta a algum evento sejam executados com prioridade em relação a outros menos críticos.
O HIstudio até a versão 2.2.17 não possuia recursos para criar uma aplicação com mais de uma tarefa real. A partir da versão 2.2.18 este recurso foi habilitado e, quando o firmware do equipamento permitir é possível criar mais de uma tarefa real para a aplicação corrente.
No HIstudio uma tarefa está associada a uma ou mais POU´s de programa que são executadas em função de critérios como:
Intervalo de execução;
Prioridade;
Ativação por evento;
Tipos de tarefas
Ao criar uma nova tarefa no HIstudio o usuário pode selecionar entre:
Tarefa real
Tarefa emulada
A tarefa real roda em um processo separado e independente e sua execução é controlada pela sua prioridade e o tipo de execução definido. Apenas no ambiente mutitarefa é possível criar mais de 1 tarefa real.
A tarefa emulada está associada a uma tarefa real e roda no mesmo processo da tarefa associada estando portanto submetida a mesma prioridade.
Tipos de execução das tarefas
Existem os seguintes tipos de execução para as tarefas:
Contínua
Periódica
Ciclo único
Evento
Tarefas com execução contínua não possuem prioridade configurada pelo usuário e rodam com a com a prioridade mais baixa se existirem mais de uma tarefa na aplicação.
Tarefas periódicas rodam em intervalos de tempo configurados na tarefa. Neste caso o firmware controla o tempo a ser aguardado para ativar a tarefa periodicamente.
Tarefas de ciclo único são chamadas apenas uma vez no processo de inicialização da aplicação. Estas tarefas não possuem prioridade e apenas existem para o tipo de tarefa emulada, visto que, por serem executadas apenas na inicialização não necessitam de um processo separado.
Tarefas do tipo Evento são criadas pelo firmware e ativadas pelo programa de aplicação ou algum evento de hardware. Este tipo de execução esta disponível apenas para os firmware com suporte mutitask.
Prioridade das tarefas
Cada tarefa criada no equipamento possui uma prioridade. Esta prioridade é identificada por um valor numérico de 0 a 31 onde, zero (0) significa a mais alta prioridade e 31 a mais baixa.
Suporte multitarefa nos equipamentos
A capacidade de executar múltiplas tarefas depende da disponibilidade de recursos de hardware do equipamento e do firmware associado.
Equipamentos sem suporte multitarefa
Quando o equipamento ou o firmware associado não possui recursos para utilização de tarefas distintas para executar o programa de aplicação o firmware G5 permite que o usuário crie uma Tarefa Emulada. Neste caso, o programa de aplicação é executado em uma única tarefa do processador do equipamento, entretanto esta tarefa possui recursos para executar uma ou mais POU´s de forma Contínua, Periódica ou Ciclo único.
Neste contexto, o usuário deve criar uma Tarefa Real normalmente com tipo Continua. As demais tarefas deverão ser do tipo Tarefa emulada que podem operar de forma Contínua, Periódica ou Ciclo único. Não existe restrição do número de tarefas emuladas que podem ser criadas.
A figura a seguir apresenta de forma resumida a operação do equipamento operando sem suporte mutitarefa para a aplicação criada. Círculos representam tarefas reais que são executadas no equipamento. Os retângulos representam funções chamadas pelas tarefas.
Execução da POU em um ambiente sem suporte multitarefa
![digraph fluxograma {
rankdir=TB;
node [fontname="Helvetica" style=filled]; // Configura fonte para os nós
edge [fontname="Helvetica"]; // Configura fonte para as setas
INI [label="" shape=point];
CTRL [label="CTRL" shape=circle fillcolor=gray29 fontcolor=white];
COMM [label="COMM" shape=circle fillcolor=gray29 fontcolor=white];
FSYS [label="FSYS" shape=circle fillcolor=gray29 fontcolor=white];
TASK1 [label="TASK1" shape=box fillcolor=gray29 fontcolor=white];
TASK2 [label="eTASK2" shape=box fillcolor=gray29 fontcolor=white];
TASK3 [label="eTASK3" shape=box fillcolor=gray29 fontcolor=white];
POU1 [label="POU:PRG1" shape=box fillcolor=gray51 fontcolor=white];
POU2 [label="POU:PRG2" shape=box fillcolor=gray51 fontcolor=white];
POU3 [label="POU:PRG3" shape=box fillcolor=gray51 fontcolor=white];
INI -> CTRL [label=" Start "];
CTRL -> COMM [label="" style="dotted"];
CTRL -> FSYS [label="" style="dotted"];
CTRL -> CTRL [label="" style="dotted"];
CTRL -> TASK1;
TASK1 -> TASK2;
TASK1 -> TASK3;
TASK1 -> POU1 [label=" Contínua "];
TASK2 -> POU2 [label=" Periódica=100ms "];
TASK3 -> POU3 [label=" Ciclo único "];
}](../_images/graphviz-d5a9969b4ce22fc094a6ce39fd3072f714164cea.png)
Neste cenário, a tarefa TASK1 definida com Tarefa real é executada diretamente na Tarefa CTRL que é a tarefa principal do equipamento. A tarefa COMM é responsavel pela gerência de comunicação enquanto que a tarefa FSYS implementa uma camada de acesso ao sistema de arquivos do equipamento.
Note que as tarefas eTASK2 e eTASK3 são tarefas emuladas associadas a TASK1 e portanto são executadas na mesma tarefa CTRL.
Nota
Tarefas do tipo Evento não estão disponíveis nos equipamentos sem suporte multitarefa.
Este tipo de evento foi disponibilizado quando foi incorporado o suporte para multitarefa no HIstudio.
Equipamentos com suporte multitarefa
A partir da versão 2.3.00 o HIstudio suporta geração de código para operação com multiplas tarefas no programa de aplicação.
Execução da POU em um ambiente multitarefa
A figura a seguir apresenta de forma resumida a operação do equipamento operando em uma ambiente mutitarefa para a aplicação criada. Círculos representam tarefas reais que são executadas no equipamento. Os retângulos representam funções chamadas pelas tarefas.
![digraph fluxograma {
rankdir=TB;
node [fontname="Helvetica" style=filled]; // Configura fonte para os nós
edge [fontname="Helvetica"]; // Configura fonte para as setas
INI [label="" shape=point];
CTRL [label="CTRL" shape=circle fillcolor=gray29 fontcolor=white];
COMM [label="COMM" shape=circle fillcolor=gray29 fontcolor=white];
FSYS [label="FSYS" shape=circle fillcolor=gray29 fontcolor=white];
TASK1 [label="TASK1" shape=circle fillcolor=gray29 fontcolor=white];
TASK2 [label="TASK2" shape=circle fillcolor=gray29 fontcolor=white];
TASK3 [label="eTASK3" shape=box fillcolor=gray29 fontcolor=white];
TASK4 [label="eTASK4" shape=box fillcolor=gray29 fontcolor=white];
TASK5 [label="TASK5" shape=circle fillcolor=gray29 fontcolor=white];
POU1 [label="POU:PRG1" shape=box fillcolor=gray51 fontcolor=white];
POU2 [label="POU:PRG2" shape=box fillcolor=gray51 fontcolor=white];
POU3 [label="POU:PRG3" shape=box fillcolor=gray51 fontcolor=white];
POU4 [label="POU:PRG4" shape=box fillcolor=gray51 fontcolor=white];
POU5 [label="POU:PRG5" shape=box fillcolor=gray51 fontcolor=white];
// Setas de fluxo:
INI -> CTRL [label=" Start "];
CTRL -> COMM [label="" style="dotted"];
CTRL -> FSYS [label="" style="dotted"];
CTRL -> CTRL [label="" style="dotted"];
CTRL -> TASK1 [label="" style="dotted"];
CTRL -> TASK2 [label="" style="dotted"];
CTRL -> TASK5 [label="" style="dotted"];
TASK1 -> POU1 [label=" Contínua "];
TASK1 -> TASK3 [label=""];
TASK1 -> TASK4 [label=""];
TASK2 -> POU2 [label=" Periódica=20ms "];
TASK3 -> POU3 [label=" Ciclo único "];
TASK4 -> POU4 [label=" Periódica=100ms "];
TASK5 -> POU5 [label=" Evento "];
}](../_images/graphviz-6fa32f8e61d344ddfa33235e601a98bf1f891ccf.png)
Como pode ser observado na figura anterior, as tarefas TASK1, TASK2 e TASK5 foram configuradas como tarefas reais e portanto são executadas de forma independente de acordo com a sua configuração (contínua, periódica ou evento). Já as tarefas eTASK3 e eTASK4 foram criadas como Tarefas emuladas associadas a TASK1. Estas tarefas portanto são implementadas como funções e são chamadas durante o processo de execução da TASK1.
Nota
Tarefas do tipo Cíclo único podem ser configuradas apenas no modo de Tarefas emuladas
Estas tarefas são chamadas uma única vez no processo de inicialização da aplicação e portanto não necessitam de rodar em uma tarefa real, alocando recursos desnecessariamente.
O HIstudio a partir da versão 2.3.00 é capaz de identificar automaticamente se o equipamento e o firmware suportam operação com múltiplas tarefas reais. Caso o modelo do equipamento utilizado suporte este recurso o HIstudio gera o código da aplicação habilitando esta funcionalidade do firmware. Caso a aplicação tenha sido desenvolvida para utilizar este recurso e seja compilada para um modelo sem suporte para o mesmo, o HIstudio irá apresentar mensagens de erro indicando esta condição.