O documento descreve técnicas para depuração e solução de erros em PLCs, incluindo monitorar blocos e tags, exibir estados e diagnósticos, usar tabelas de vigilância e listas de referência cruzada. O objetivo é habilitar engenheiros a localizar e corrigir erros em sistemas de controle.
ConteúdoPágina
Objetivos da aprendizagem...................................................................................................................2
Informações gerais sobre o modo online.....…......…............................................................................3
Comutar o PLC para STOP e para RUN.......……................................................................................4
Exibição de estados na vista projeto......……........................................................................................5
Diagnósticos do módulo..............………................................................................................................6
Buffer de diagnóstico para o PLC..........................................................................................................7
Controle de programa: GetErrorID.......……….......................................................................................8
Vista online: Exibição de estados....…………........................................................................................9
Vista online: Deletar blocos.....……………............................................................................................10
Monitorar um bloco..............…………....................................................................................................11
Comparação de blocos............…………................................................................................................12
Comparação de blocos: Comparação detalhada........…........................................................................13
Tabelas de vigilância.......…………….....................................................................................................14
Tabela de vigilância: Seleção do ponto de gatilho…..............................................................................15
Tabela de vigilância: Modificar tags…………………..............................................................................16
Tabela de vigilância: Forçar tags......………………….............................................................................17
Lista de referência cruzada (usado por)..........……….............................................................................18
Lista de referência cruzada (utilizados)……...........................................................................................19
Vá para o ponto de uso....…………........................................................................................................20
Estrutura de chamada.................……....................................................................................................21
Estrutura de chamada: Símbolos.........…...............................................................................................22
Lista de atribuições...............…...............................................................................................................23
Recursos........…………….......................................................................................................................24
Exercício 11-1: Crie uma cópia de segurança do programa da CPU na biblioteca de projeto…...........25
Exercício 11-2: Copie o programa falho de uma biblioteca global e baixe para a CPU…….…………..26
Exercício 11-3: Erro que causa STOP: Ler o buffer de diagnóstico...................…….............................27
Exercício 11-4: Erro que causa STOP: Previna que a CPU vá para STOP com "GetErrorID".............28
Exercício 11-5: Elimine o erro que causou STOP...................………....................................................29
Exercício 11-6: Dupla atribuição: Use "Monitor block" e "Watch table"……………......………………...30
Exercício 11-7: Encontre dupla atribuição: Mostre os pontos de uso........………….............................31
Visualização onlineApós a conexão online ter sido estabelecida com sucesso, a interface do usuário muda conforme descrito:
• O cabeçalho da barra da janela ativa agora ficará com o fundo laranja.
• O cabeçalho da barra da janela inativa do dispositivo associado fica com uma linha sobre escrita na cor laranja.
• Uma barra laranja aparece na borda direita da barra de estado (status bar).
• Os objetos para o modo de operação associado ou símbolos de diagnóstico para a estação são mostrados na árvore de projeto.
• A área "Diagnostics > Device Info" área é trazida para o primeiro plano na janela inspetor.
• Símbolos e comentários são mostrados.
Descrição Com STOP, você leva a CPU para o modo STOP e consequentemente para o processamento do programa. A resposta à transição de RUN para STOP é definida na configuração da CPU.
SímbolosSignificado
A conexão está sendo estabelecida.
CPU com endereço x.x.x.x não está acessível.
CPU configurada difere da CPU disponível.
Sem falhas.
Manutenção necessária.
Manutenção solicitada.
Falha.
Desativado (aplicável aos escravos).
Módulo não acessível pela CPU.
Sem possibilidade de diagnóstico para o módulo.
Módulo configurado difere do módulo disponível.
O estado do módulo está sendo descoberto.
Exibição de estadosApós a conexão online ter sido estabelecida com sucesso, a interface do usuário muda como segue:
• O cabeçalho da barra da janela ativa agora ficará com o fundo laranja.
• O cabeçalho da barra da janela inativa do dispositivo associado fica com uma linha sobre escrita na cor laranja.
• Os objetos para o modo de operação associado ou símbolos de diagnóstico para a estação são mostrados na árvore de projeto.
• A área "Diagnostics > Device Info" área é trazida para o primeiro plano na janela inspetor.
Função O buffer de diagnóstico é parte da memória do sistema da CPU. Ela contém os erros detectados pela CPU e pelos módulos com capacidade de diagnóstico. Estes incluem os seguintes eventos:
• Cada mudança de estado de operação da CPU (p.ex. retorno da tensão de alimentação, transição para STOP, transição para RUN).
• Cada interrupção de diagnóstico.
O buffer de diagnóstico para a CPU S7-1200 tem a capacidade de 50 entradas, dos quais as últimas 10 entradas (mais recentes) são retidas durante o retorno da alimentação.
As entradas somente podem ser apagadas retornando a CPU aos ajustes de fábrica. Você pode ler o conteúdo do buffer de diagnóstico por meio da vista online e diagnósticos.
ResetPara executar o reset da CPU para os ajustes de fábrica (factory settings), proceda como segue:
• Abra a vista online e diagnósticos da CPU.
• Selecione o grupo "Reset to factory settings" da pasta "Functions".
• Selecione "Retain IP address" se você desejar manter o endereço IP ou "Delete IP address" se você não desejar.
• Clique no botão "Reset".
• Confirme com "OK".
GetErrorIDVocê pode utilizar a instrução "GetErrorID" para examinar os erros que haviam ocorrido dentro do bloco. Se os relatórios de erros do sistema durante a execução de um bloco, a identificação (ID) de erro para o primeiro erro que tenha ocorrido será salvo no tag na saída "ID". Somente tag do tipo de dado WORD pode ser especificado para a saída “ID". Quando o primeiro erro que ocorreu tiver sido retificado, a instrução fornece o ID do erro do próximo erro que ocorreu. A saída da instrução "GetErrorID" somente será executada quando a entrada tiver nível lógico "1" e informações de erro estiverem disponíveis. Se uma destas condições não for satisfeita, os próximos processamentos do programa não afetarão o "GetErrorID".
A instrução "GetErrorID" também pode ser utilizada para passar um alarme relativo ao estado de erro para o bloco chamado. Neste caso, a instrução deve ser colocada no network final do bloco chamado.
A instrução "GetErrorID“ ativa a manipulação de erro local dentro do bloco. Quando "GetErrorID" for inserido nos códigos do programa de um bloco, respostas pré-definidas do sistema para a ocorrência de erros são ignoradas.
Output IDA saída ID da instrução é do tipo de dado WORD e fornece IDs de erros cujos significados podem ser vistos na ajuda online.
SímbolosSignificado
Pasta contém objetos cujas versões online e offline apresentam diferenças.
Versões online e offline do objeto são diferentes.
Objeto existe somente offline.
Objeto existe somente online.
Sem falhas. Pasta contém objetos cujas versões online e offline diferem (somente na árvore de projeto).
O módulo ou dispositivo está inacessível da CPU (aplicável à módulos e dispositivos subordinados à CPU). Objeto existe somente offline.
RUN.
STOP.
Partida (start-up).
Parada (halt).
Defeito.
Pré-condiçãoA pasta "Program blocks" esteja aberta na árvore de projeto.
ProcedimentoPara deletar um bloco, siga os seguintes passos:
• Clique o direito sobre o bloco que você deseha deletar na pasta "Program blocks" na árvore de projeto.
• Selecione o comando "Delete" no menu atalho.
• Confirme com "Yes".
• O bloco será deletado do projeto offline.
NotaQuando deletando blocos de organização, lembre-se que eventos devem ser atribuídos a eles. Se você deletar estes blocos de organização, o programa não pode responder aos eventos parametrizados.
MonitorarPré-condição:
• Existir um bloco idêntico no dispositivo.
• O bloco estiver aberto.
Para comutar entre os estados ligado ou desligado de um programa, siga estes passos:
• Clique no botão "Monitor on/off" na barra de ferramentas.
Para começar a monitorar os estados lógicos de um programa em um ponto específico, siga estes passos:
• Clique no botão "Monitor on/off" na barra de ferramentas.
• Clique com o direito no tag do qual você deseja ativar os estados do programa.
• Selecione “Start monitoring here" no menu atalho.
NotaOs recursos de teste de estados de um programa são limitados. Se não existirem suficientes recursos para o teste atual, os testes serão encerrados prematuramente.
ResultadoQuando você habilitar a exibição dos estados do programa, uma conexão online será estabelecida e os estados do programa serão mostrados. Quando você desabilitar a exibição dos estados do programa, você será questionado se deseja interromper a conexão online.
Compare (comparação) A comparação de blocos permite a você comparar um bloco no dispositivo de programação com um bloco na CPU. Existem dois caminhos para exibir as diferenças:
• Edição de comparação
Somente os selos de tempo (time stamps) do bloco são comparados no editor de comparação. Você recebe uma visão geral das diferenças de todos os blocos. Você pode ler os respectivos estados dos símbolos.
• Comparação detalhada
As versões offline e online de um bloco são abertas ao lado de um e do outro e as diferenças são realçadas.
Você pode realizar uma comparação de blocos para os seguintes blocos:
• Blocos de códigos.
Com os blocos de códigos, você pode executar uma comparação com o editor de comparação e fazer uma comparação detalhada.
• Blocos de dados
Blocos de dados somente podem ser comparadas na base de seus selos de tempo (time stamps) no editor de comparação.
Comparação A comparação detalhada permite a você identificar os locais exatos onde as
detalhadaversões online e offline de um bloco diferem. As seguintes cores codificadas permitem a você encontrar estes locais tão rápido quanto possível:
• As linhas onde existem diferenças são destacadas em cinza.
• Operandos e operações diferentes são destacadas em verde.
• Se a quantidade de networks for diferente, pseudos networks são inseridos para assegurar que networks idênticos possam ser exibidos sincronizadamente. Estes pseudos networks são realçados em cinza e a barra de cabeçalho do network contém o texto "Corresponding network not found“ (network correspondente não encontrado). Pseudos networks não podem ser editados.
• Quando a sequência de networks tiver sido alterada, pseudos networks são inseridos nos pontos apropriados. Estes pseudos networks são destacados em cinza e a barra de cabeçalho do network contém o texto "The networks are not synchronized“ (os networks não estão sincronizados). O pseudo network também contém uma ligação "Go to network <No.>“ (ir para o network No.) através do qual você pode navegar para o network associado.
Visão geralAs seguintes funções estão disponíveis para teste com a tabela de vigilância (watch table):
• Monitorar tags (monitor tags) Estes exibem os valores atuais de tags individuais do programa do usuário ou uma CPU no dispositivo de programação ou PC.
• Modificar tags (modify tags) Esta função é usada para atribuir valores fixos para tags individuais de um programa do usuário ou de uma CPU. Modificar também é possível quando testando estados do programa.
• "Enable peripheral outputs" (habilita periféricos de saída) e
"Modify now“ (modificar agora) Estas duas funções habilitam você à atribuir valores fixos para periféricos de saídas individuais de uma CPU em STOP. Você também pode usá-los para verificar as ligações elétricas.
• Force tags (forçar tags) Esta função é utilizada para atribuir um valor fixo para tags individuais do programa do usuário ou uma CPU.
Os seguintes tags podem ser monitorados e/ou modificados:
• Entradas, saídas e memória bit.
• Conteúdos dos blocos de dados.
• I/O.
UsoA vantagem da tabela de vigilância é que uma variedade de ambientes de testes podem ser armazenadas. Isto habilita você a reproduzir testes durante a colocação em funcionamento ou para fins de manutenção e assistência técnica.
Trigger point(ponto de gatilho) Através da seleção dos modos de monitoração e modificação, você especifica o ponto de gatilho e a duração da monitoração dos tags na tabela de vigilância (utilizada para grupos de tags do programa do usuário que devem ser monitorados, modificados e/ou forçados).
Possíveis modos de monitoração e modificação (duração da monitoração ou modificação).
Os seguintes modos de monitoração e modificação estão disponíveis:
• Permanente.
Neste modo, as entradas podem ser monitoradas no início do ciclo de varredura e as saídas no fim.
• Somente uma vez, no início do ciclo de varredura.
• Somente uma vez, no fim do ciclo de varredura.
• Permanentemente, no início do ciclo de varredura.
• Permanentemente, no fim do ciclo de varredura.
• Somente uma vez, na transição de RUN para STOP.
• Permanentemente, nas transições de RUN para STOP.
Os pontos de gatilho "Beginning of scan cycle“ (no início do ciclo de varredura), "End of scan cycle“ (no fim do ciclo de varredura) e "Switch to stop" (transição para STOP) especificam quando os tags serão lidos da CPU ou atualizadas na CPU.
Trabalho realizadoUma tabela de vigilância contém os tags que você definiu e selecionados para toda a CPU. Uma pasta "Watch tables" (tabela de vigilância) será automaticamente criada para cada CPU pertencente ao projeto. Você cria uma nova tabela de vigilância nesta pasta utilizando o comando "Add watch table".
LayoutAs colunas exibidas na tabela de vigilância dependem do modo em que você esteja trabalhando: modo básico ou modo expandido.
As seguintes colunas adicionais são exibidas no modo expandido:
• Monitoração com gatilho.
• Modificação com gatilho.
Os nomes das colunas também podem ser alteradas dinamicamente baseadas na ação.
Mostrar/ocultar todas as colunas modificadas.
Mostrar/ocultar todas as colunas no modo expandido.
Modificar todos os valores ativos somente uma vez e imediatamente.
IntroduçãoVocê pode utilizar a tabela de vigilância (watch table) para atribuir valores permanentes para tags individuais do programa do usuário. Esta ação é conhecida como “force”.
Para utilizar a função forçar, você deve ter uma conexão online estabelecida com a CPU, bem como a CPU utilizada deve suportar esta funcionalidade.
AplicaçãoPara permanentemente atribuir valores definidos aos tags, você pode especificar ajustes padrões para o seu programa do usuário e deste modo testar as funções programadas. Forçamento é possível nos modo básico e modo expandido.
AtençãoAntes de forçar, você deve revisar as precauções de segurança para este procedimento.
Cross-references(referência cruzada) Existem diversos caminhos para exibir a referência cruzada dependendo de se você está na vista portal ou na vista projeto e qual objeto você selecionou na árvore de projeto.
Na vista portal, você somente pode exibir referência cruzada para toda a CPU; na vista projeto, você pode exibir referência cruzada para os seguintes objetos:
•Pasta "PLC“.
•Pasta "Blocks“.
•Blocos individuais.
•Pasta "PLC tags“.
•Pasta "Tags and connections“.
•Tags individuais.
Update Atualiza a lista da referência cruzada.
SettingsDefine os ajustes para a lista da referência cruzada.
Open detailsAbre os detalhes no ponto de uso.
Close detailsFecha os detalhes no ponto de uso.
Used by:Aqui, você pode ver onde o objeto está sendo usado.
Usage:Aqui, você pode ver os usuários do objeto.
BenefíciosA lista de referência cruzada oferece a você as seguintes vantagens:
• Você pode manter uma clara visão geral dos operandos, tags e blocos que você tenha usado enquanto você criava e alterava o programa.
• Da referência cruzada, você pode saltar diretamente para o ponto no qual o operando ou tag foi usado.
• Durante um teste de programa ou quando analisando e eliminado erros, você será informado do seguinte:
-Quais operandos são processados por quais comandos em qual bloco.
-Quais tags são usados em quais telas.
-Quais blocos são chamados por quais outros blocos.
• Como uma parte componente da documentação de projeto, a referência cruzada fornece uma clara visão geral de todos os operandos, áreas de memória, tags e telas usadas.
• Você pode ver o ponto de uso dos objetos, de forma que você pode mudá-los ou apagá-los.
• Você pode ver o ponto de uso dos objetos deletados e ajustá-los se necessário.
Call structure (estrutura de chamada) A estrutura de chamada descreve a chamada hierárquica dos blocos dentro de um programa S7. Ela fornece uma visão geral de:
• Blocos usados.
• Saltos para os pontos de uso dos blocos.
• Relações entre blocos.
• Exigências de dados locais dos blocos.
• Estados dos blocos.
Exibir a estrutura de chamada lhe proporciona uma lista dos blocos utilizados no programa de usuário. O primeiro nível da estrutura de chamada é realçado por cor e mostra os blocos que não estão sendo chamados por qualquer outro bloco no programa. Os blocos de organização são sempre mostrados no primeiro nível da estrutura de chamada. Funções, blocos de funções e blocos de dados somente são mostrados no primeiro nível se eles não estão sendo chamados por um bloco de organização. Quando um bloco chama outros blocos ou funções, eles são listados recuado abaixo do bloco de chamada. Funções do sistema e blocos são mostrados na estrutura de chamada somente se eles forem chamados por um bloco.
OpçõesAs seguintes opções de vista estão disponíveis para a estrutura de chamada:
• Display conflicts only (exibir somente conflitos): Quando esta caixa de verificação estiver ativada, somente serão mostrados conflitos dentro da estrutura de chamada .
• Group calls together (chamadas agrupadas): Quando esta caixa de verificação estiver ativada, diversas chamadas de blocos são agrupadas em conjunto. A quantidade de blocos chamados é exibida na coluna "Call freq.". As ligações com as diversas localidades de chamada são oferecidas em uma lista selecionável (drop-down list) na coluna "Details".
SímbolosA tabela acima mostra o significado dos símbolos na estrutura de chamada (a estrutura de chamada descreve a hierarquia de chamada dos blocos dentro de um programa S7. Ela fornece uma visão geral dos blocos utilizados, a dependência entre os blocos e as exigências de dados locais dos blocos).
Assignment list(lista de atribuições) A lista de atribuições mostra se um endereço está sendo alocado pelo acesso de um programa S7 ou se os endereços estão sendo atribuídos à um módulo SIMATIC S7. Ela é portanto uma base importante para localização de erros ou realização de alterações no programa do usuário.
A lista de atribuições fornece a você uma visão geral dos bits nos bytes das áreas de memória listadas abaixo:
• Entradas (I – input ).
• Saídas (Q – output).
• Memórias bit (M – bit memories).
• I/O (P).
A lista de atribuições é mostrada em diversas janelas de trabalho, separadamente para entradas, saídas e memórias bit.
Filters(filtros) Você pode filtrar a exibição dentro da lista de atribuições. Você pode usar filtros pré-definidos ou criar o seu próprio.
Cross-references(referência cruzada) Você pode exibir as informações da referência cruzada para endereços selecionados na lista de atribuições. Você exibe a referência cruzada para endereços selecionados ou para bits selecionados individuais na janela inspetor utilizando o comando "Show usage" no menu atalho. Você também pode abrir a lista de referência cruzada para objetos selecionados usando o comando "Tools > Cross-references“.
Dependency (dependência) A estrutura de dependência mostra as dependências de cada bloco com outros blocos no programa. Exibir a estrutura de dependência fornece a você uma lista de blocos utilizados no programa do usuário. Um bloco é mostrado como mais a esquerda e blocos que chamam ou usam este bloco são recuados abaixo dele. A estrutura de dependência também mostra o estado de blocos individuais usando símbolos. Objetos causadores de conflito de selo de tempo (time stamp) e talvez conduzir a uma inconsistência no programa são marcados com vários símbolos. A estrutura de dependência é uma extensão da lista de referência cruzada para objetos.
Resources (recursos) A aba recursos exibe a memória de hardware empregada na CPU configurada para:
• Atribuição das áreas de memória dentro da CPU e
• Entradas e saídas atribuídas nos módulos disponíveis de entrada/saída.
A exibição de recursos dá a você uma visão geral da memória de hardware empregada na CPU que você está usando para:
• Os objetos de programação que estão disponíveis na CPU (p.ex. OB, FC, FB, DB, tags de PLC e tipos de dados definidos pelo usuário).
• As áreas de memória disponíveis na CPU (memória de trabalho, memória de carga, memória retentiva), seus tamanhos máximos e suas atribuições aos acima mencionados objetos de programação utilizados.
• As entradas e saídas configuráveis para a CPU nos módulos disponíveis (módulos de entradas/saídas, módulos de entradas digitais, módulos de saídas digitais, módulos de entrada analógica e módulos de saída analógica) e suas entradas e saídas que já tenham sido atribuídas.
Você pode selecionar o tamanho máximo da memória de carga (load memory) em uma lista selecionável (drop-down list) na linha "Total" da coluna "Load memory".
O tamanho máximo da memória de trabalho (work memory) está mostrada na linha "Total" da coluna "Work memory".
O tamanho máximo da memória retentiva disponível está mostrada na linha "Total" da coluna "Retentive memory".
TarefaAntes de você colocar em funcionamento outro programa que contenha erros, você deve primeiro salva uma cópia de segurança (backup) do seu próprio programa. Você cria a cópia de segurança na biblioteca do projeto.
Procedimento 1.Comute para a vista projeto.
2.Selecione todos os blocos na pasta "Program blocks".
3.Marque e arraste todos os blocos para dentro da biblioteca de projeto.
4.Renomeie o recém criado elemento da biblioteca como "My_Program".
5.Também copie "PLC tags" para dentro da biblioteca de projeto e renomeie o recém criado elemento da biblioteca como "My_Variables"
TarefaVocê copiará o programa fornecido "FaultyProgram" completará com os tags do PLC associado "FaultyProgram_Variables" da biblioteca global "Micro1" para dentro de seu próprio projeto. Isto sobre escreverá os seus blocos e os seus tags do PLC.
O "FaultyProgram" executa exatamente as mesmas funções como o programa que você previamente criou.
O programa, de qualquer modo, contém um erro que leva a CPU para STOP e um erro lógico o qual não permite a operação jog para a direita da esteira. Com auxílio das ferramentas de análise e eliminação de erros, você deve eliminar estes erros.
Procedimento 1.Comute para a vista projeto.
2.Sob "Global libraries“ abra a biblioteca<Drive>:\S7-Courses\S7-1200\Micro1.
3.Utilize marcar e arrastar para copiar os objetos "FaultyProgram" e "FaultyProgram_Variables" da biblioteca global "Micro1" para dentro do recipiente "Program blocks" em seu próprio projeto. Permita que seus próprios blocos e tags sejam sobre escritos.
4.Salve seu projeto e transfira todos os blocos para dentro da CPU.
TarefaLeia o buffer de diagnóstico para encontrar o porque a CPU foi levada para STOP.
Procedimento:1. Leia o buffer de diagnóstico (ver figura).
2.Abra o bloco falho.
3.Verifique porque a CPU não pode executar a instrução identificada no bloco aberto.
Causa doA palavra do bloco de dados DBW40 transferida para o parâmetro de saída
STOP da CPU "Act_Quant" do FB não existe. A "write access DB area" especificada no buffer de diagnóstico portanto não é possível e comuta a CPU para o modo STOP.
TarefaO estado STOP da CPU será previnido (sem eliminação do erro) pela programação da instrução "GetErrorID".
Procedimento1.No network final do falho OB1, programe a instrução "GetErrorID". Transfira uma previamente não utilizada palavra de memória para o parâmetro de saída "ID".
2.Baixe o alterado OB1 para o PLC e ative a função "Monitor block".
3.Olhe "GetErrorID" na ajuda online para encontrar o significado do valor que está colocado no parâmetro de saída "ID".
TarefaElimine a falha do programa para assegurar que a CPU se mantenha em RUN sem a necessidade da instrução "GetErrorID".
Procedimento1.Elimine o erro que causa STOP no programa falho e delete a instrução "GetErrorID“ que você adicionou.
2.Transfira todos os blocos para a CPU.
TarefaCom o programa falho, a operação jog esteira para a direita não funciona corretamente. O erro reside em atribuição dupla (dual assignment) da saída "K_Conv_Right" (Q8.5).
Antes de você corrigir o erro, você deve interpretar os marcadores no dispositivo de programação pelas funções "Monitor block" e "Watch tables" (monitorar os tags). Tão logo eles estejam combinados (ver figura), ficará claro que duas funções escrevem diferentes informações:
Monitor block:Estados dos operandos no momento da execução do programa.
Watch table:Estados dos operandos no início (monitorar tags) ou fim do ciclo de varredura (dependendo do ajuste do gatilho).
Procedimento:1.Abra o bloco falho "FC_ConvMotor" (FC16) e ative "Monitor block".
2.Crie uma nova tabela de vigilância, insira os operandos mostrados na figura e clique "Monitor".
3.Arrange as janelas para duas diferentes funções como mostrado na figura.
TarefaA aplicação das funções do dispositivo de programação "Monitor block" e "Watch table" (monitoração de tags) havia indicado a dupla atribuição do "K_Conv_Right" (Q8.5).
Agora a tarefa será encontrar todas as instruções no programa do usuário que escrevem nesta saída.
Procedimento:1.Clique "K_Conv_Right" (Q8.5) com o botão direito do e então clique "Show usage" no diálogo subsequente.
2.Clicando uma lista utilizada na tabela, o bloco correspondente pode ser aberto e a correção pode ser feita imediatamente.
3.Transfira todos os blocos para dentro da CPU e verifique todas as funções do programa.