.. include:: glb_defs.txt .. |ico| image:: ../shared_img/_cmd/p12.png .. _`compilação condicional`: Compilação condicional ########################### Existe situações durante o desenvolvimento de uma aplicação onde é necessário que partes do programa ladder sejam utilizadas ou não, dependendo de determinadas condições definidas pela aplicação. Considere o seguinte exemplo: Uma aplicação necessita de gerar um alarme de temperatura alta em um dado processo. Existem 2 cenários possíveis onde este programa deve operar. 1. O sinal de temperatura será obtido do processo por uma entrada analógica utilizando-se de um transmissor analógico de temperatura (4-20 mA). 2. O sinal de temperatura será obtido do processo através de uma entrada digital utilizando-se um termostato pré-calibrado para a temperatura de alarme desejada. Naturalmente, para solução deste problema, podem ser criados 2 programas ladder distintos e carregados nos respectivos equipamentos. Existe entretanto a opção de implementarmos um único programa ladder e, utilizando o recurso de compilação condicional, compilarmos o programa para operação com o transmissor de temperatura ou para operação com o termostato. Em termos gerais, mantendo o código ladder em um único projeto, simplifica o controle de alterações, facilitando a manutenção do programa, diminuindo o tempo de desenvolvimento e a probabilidade de falhas no processo, além de manter os dois equipamentos atualizados com todas as funcionalidades desenvolvidas. .. _`diretivas de compilação`: Diretivas de compilação ======================== A primeira etapa no processo de elaboração de um programa com compilação condicional é a criação de um conjunto de diretivas de compilação. Para tanto, utilizando a opção de Diretivas disponível no menu de :ref:`Setup de Programa`. Esta tela permite que o usuário defina diretivas de compilação. Uma diretiva de compilação na essência é um flag que identifica uma funcionalidade do programa que pode ou não existir na aplicação. Por exemplo, na aplicação proposta anteriormente a leitura do limite de temperatura via um transmissor ou via um termostato são funcionalidades que serão incluídas ou não dependendo do programa a ser gerado. Na figura a seguir é apresentada a tela de diretivas onde foram criadas duas diretivas: * TT - APLICACAO COM TRANSMISSOR DE TEMPERATURA * TP - APLICACAO COM TERMOSTATO .. figure:: _img/compiler_directives.png :width: 50% :align: center Tela de configuração das diretivas de compilação .. _`sessão condicional`: Sessão condicional ============================= .. |bcs| replace:: BCS (Início de Sessão Condicional) Uma vez definidas as diretivas condicionais, é possivel incluir no programa ladder código condicional às diretivas definidas. A figura a seguir apresenta um trecho do um possivel código para o exemplo citado. .. figure:: _img/scond_ladder1.png :width: 70% :align: center Sessões condicionais Neste código pode-se observar duas sessões condicionais (destacadas em azul). A sessão superior, inclui o código a ser utilizado quando a aplicação for gerada para operar com o termostato. Para tanto, o elemento |bcs| foi configurado através do comando **propriedades** associando o bloco de código à diretiva de aplicação [TP] conforme indicado na figura a seguir. .. figure:: _img/scond_ladder2.png :width: 50% :align: center Associando diretivas a uma sessão condicional Analogamente, o segundo bloco condicional inclui o código a ser utilizado quando a aplicação for gerada para operar com o transmissor de temperatura. Neste caso o elemento |bcs| foi associado à diretiva de aplicação [TT]. .. note:: Na utilização deste recurso as vezes a configuração de hardware do controlador associado ao projeto não possui todos os recursos de hardware utilizados no programa. Quando não disponível um I/O no controlador associado ao projeto o editor ladder por default não permite a sua utilização. Para solucionar este problema, desabilite o teste de consistencia de I/O na tela de :ref:`Preferências`. .. figure:: _img/disable_io_check.png :width: 50% :align: center Desabilitando teste de I/O no editor ladder .. _`configuração de compilação`: Configuração de compilação ============================= Implementado o código ladder com as sessões condicionais, basta definir as configurações de compilação a serem utilizadas pelo programa. Para tanto, no menu de programa acesse a opção :ref:`Configuração de compilação`. A tela apresentada permitirá ao usuário criar configurações que definem um conjunto de diretivas que caracterizam uma dada utilização do programa. .. figure:: _img/compiler_config.png :width: 50% :align: center Definindo as configurações de compilação No nosso exemplo, foram criadas 3 **configurações de compilaçao**: * APP_TP - esta configuração de compilação habilita a :ref:`diretiva ` TP para ser utilizada na geração de código e, com isto, o programa gerado será adequado para utilização com um termostato. * APP_TT - esta configuração de compilação habilita a :ref:`diretiva ` TT para ser utilizada na geração de código e, com isto, o programa gerado será adequado para utilização com um transmissor de temperatura. * APP_FULL - esta configuração de compilação habilita as duas :ref:`diretivas ` para serem utilizadas na geração de código e, com isto, o programa gerado será adequado para utilização com um transmissor de temperatura ou com o termostato. Para cada **configuração de compilação** criada, uma aba com o nome da configuração é apresentada listando todas as `Diretivas de compilação`_ disponiveis na aplicação. Selecione as diretivas que devem ser processadas para a configuração e compilação corrente, conforme apresentado no exemplo a seguir. .. figure:: _img/compiler_config2.png :width: 50% :align: center Associando as diretivas à configuração de compilação Finalmente, para compilar a aplicação, na tela de **configuração de compilação**, selecione uma opção da lista criada e carregue a aplicação no controlador. O código gerado será irá incorporar ou não sa sessões condicionais em função das diretivas que estiverem habilitadas na **configuração de compilação** selecionada. No editor ladder é possível visualizar o código de forma a idenditicar quais sessões serão incluidas no código gerado. Para uma data **configuração de compilação** as sessões que não forem incluidas serão apresentadas com a cor de fundo diferente indicando a parte do programa que não será incluída na compilação corrente. Por exemplo, na figura seguinte a configuração de compilação selecionada no projeto foi APP_TP (operação com o termostato). Pode-se observar que a sessão de código relativa a operação com o transmissor de temperatura esta destacada indicando que não será incluida no processo de compilação. .. figure:: _img/scond_ladder3.png :width: 70% :align: center Indicação do código que não será incluido no processo de compilação .. raw:: pdf PageBreak