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

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 Setup do 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
../_images/compiler_directives.png

Tela de configuração das diretivas de compilação

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.

../_images/scond_ladder1.png

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 (Início de Sessão Condicional) foi configurado através do comando propriedades associando o bloco de código à diretiva de aplicação [TP] conforme indicado na figura a seguir.

../_images/scond_ladder2.png

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 (Início de Sessão Condicional) foi associado à diretiva de aplicação [TT].

Nota

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 Preferências.

../_images/disable_io_check.png

Desabilitando teste de I/O no editor ladder

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 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.

../_images/compiler_config.png

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 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 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 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.

../_images/compiler_config2.png

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.

../_images/scond_ladder3.png

Indicação do código que não será incluido no processo de compilação