Diretivas de compilação
O OnStudio implementa suporte para compilação condicional através de diretivas de compilação. Este recurso atualmente está disponível apenas para POU´s implementadas em linguagem ST (Texto estruturado).
Através das diretivas de compilação o usuário do OnStudio pode devenvolver aplicações que serão compiladas de forma diferente, baseado nas diretivas utilizadas e nas Variáveis de ambiente.
Uma diretiva de compilação é especificada no fonte ST utilizando a seguinte sintaxe:
{ NOME [EXPRESSAO] }
NOME: Nome da diretiva de compilação
EXPRESSAO: expressão com variáveis de ambiente ou texto dependendo da diretiva utilizada.
Nota
O NOME da diretiva é “case insensitive” ou seja, caracteres maiúsculos e minúsculos são tratados indiferentemente.
No campo EXPRESSAO, quando se referir a um texto, deve ser especificado com aspas simples ‘ no início e no fim do mesmo.
A diretiva deve iniciar em uma nova linha e possuir apenas espaços antes do início.
Tipos de diretivas de compilação
Existem 2 grupos de diretivas de compilação suportadas pela versão corrente do OnStudio, são eles:
Dica
Para conhecer melhor o recurso e suas funcionalidades acesse o vídeo tutorial: Recurso de Diretiva de Compilação
Diretivas condicionais
As diretivas condicionais permitem especificar blocos de código que podem ser incluídos ou não no processo de compilação da aplicação.
Por exemplo, no trecho de código abaixo, a função DoSomething( ) e todo o código existente entre as diretivas IFDEF e ENDIF, serão incorporados no código da aplicação apenas se uma variável de ambiente com o nome USE_FAN for definida no projeto.
{ IFDEF USE_FAN }
:
DoSomething();
:
{ ENDIF }
Caso a variável de ambiente não seja definida, as linhas do programa entre diretivas IFDEF e ENDIF (inclusive) serão removidas da POU associada antes do processo de compilação da aplicação e não estarão portanto no código carregado posteriormente no equipamento.
Expressão em diretivas condicionais
É possível especificar uma expressão com o operador OR para a condição a ser avaliada pela diretiva. Por exemplo:
{ IFDEF USE_FAN OR USE_BUZZER }
:
DoSomething();
:
{ ENDIF }
O código anterior será incluído no processo de compilação da aplicação se qualquer uma das variáveis de ambiente USE_FAN ou USE_BUZZER for definida no projeto.
Aninhamento em diretivas condicionais
O ambiente suporta aninhamento das diretivas condicionais em múltiplos níveis, conforme exemplificado a seguir:
{ IFDEF USE_FAN }
:
DoSomething();
{ IFNDEF HIO115 }
:
DoSpecialThing();
:
{ ENDIF }
:
{ ENDIF }
As diretivas condicionais disponíveis são:
IFDEF
Notação:
{ IFDEF EXPRESSION }
IFDEF: Diretiva de compilação.
EXPRESSION: Variável de ambiente a ser avaliada ou expressão com múltiplas variáveis com o operador OR.
Inclui o bloco de código existente entre a linha IFDEF e a linha com a diretiva ENDIF associada, caso qualquer das variáveis de ambiente estejam definidas no projeto.
Exemplo:
{ IFDEF HIO115 OR HIO140 } // Trata equipamento com modulo HIO115 ou HIO140
PRESSURE := AI01; // mapeia o sinal de pressão quando utilizado do módulo HIO115
FLOW := AI02; // mapeia o sinal de vazão quando utilizado do módulo HIO115
{ ENDIF }
Exemplo + cenário de utilização:
Em um determinado aquário era preciso controlar uma bomba de oxigênio, para isso se desenvolveu um projeto utilizando um PLC da HI Tecnologia com suporte para entradas e saídas digitais, além do seguinte programa de aplicação, desenvolvido no OnStudio, que foi carregado no PLC:
(* **********************************************************
Projeto 1 - Aquário
=====================
* Definição dos botões de liga e desliga para uma bomba
de aquário.
********************************************************** *)
LIGA_BOMBA := DI04; // mapeia o botão LIGA na DI04
DESLIGA_BOMBA := DI05; // mapeia o botão DESLIGA na DI05
DO04 := LIGA_BOMBA;
DO05 := DESLIGA_BOMBA;
...
Hardware do projeto: um equipamento RION com módulo DIO605 (entradas e saídas digitais).
Um tempo depois surgiu-se a necessidade de monitorar a temperatura deste aquário, para isso se desenvolveu outro projeto utilizando um PLC da HI Tecnologia com suporte para sensor de temperatura, além do seguinte programa de aplicação desenvolvido no OnStudio que foi carregado no PLC:
(* **********************************************************
Projeto 2 - Aquário
=====================
* Controle da temperatura medida pelo PT100 do módulo
HIO160.
********************************************************** *)
TEMPERATURA := TP00; // mapeia a variável de temperatura na
// entrada para PT100 (TP00)
...
Hardware do projeto: um equipamento NEON com módulo HIO160 (entrada para sensor PT100).
Com os dois projetos desenvolvidos foi possível controlar e monitorar a aplicação, porém é possível desenvolver apenas um projeto que pode ser carregado em ambos os PLC´s utilizados. Para isso utilizamos o recurso de códigos condicionais do OnStudio e adicionamos os dois equipamentos neste projeto da seguinte forma:
(* **********************************************************
Projeto final - uso das diretivas de compilação
=================================================
* Definição dos botões de liga e desliga para uma bomba
de aquário.
* Controle da temperatura medida pelo PT100 do módulo HIO160.
********************************************************** *)
{ IFDEF RION_DIO605 }
LIGA_BOMBA := DI04;
DESLIGA_BOMBA := DI05;
{ ENDIF }
{ IFDEF NEON_HIO160 }
TEMPERATURA := TP00;
{ ENDIF }
...
Adicione os dois equipamentos ao item Hardware do recurso, definindo nos Parâmetros de ambiente de cada um a variável correspondente (RION_DIO605 e NEON_HIO160), e selecione o equipamento atual antes de compilar e implantar o programa de aplicação.
IFNDEF
{ IFNDEF VAR }
IFNDEF: Diretiva de compilação.
EXPRESSION: Variável de ambiente a ser avaliada ou expressão com múltiplas variáveis com o operador OR.
Inclui o bloco de código existente entre a linha IFDEF e a linha com a diretiva ENDIF associada, caso qualquer das variáveis de ambiente não estejam definidas no projeto.
Exemplo:
{ IFNDEF USE_FAN OR HIO115 } // Trata equipamento sem suporte para controle de ventilador ou sem módulo HIO115
PRESSURE := 0; // ignora o sinal de pressão quando não utilizado ventilador
FLOW := 0; // ignora o sinal de vazão quando não utilizado ventilador
{ ENDIF }
Diretivas de marcação
As diretivas de marcação permitem gerar mensagens ao usuário durante o processo de compilação do programa de aplicação. Existem 3 tipos de diretivas de marcação:
ERROR
{ ERROR 'MSG' }
ERROR: Diretiva de compilação.
MSG: Mensagem a ser apresentada. Deve ser delimitada por aspas simples.
Se esta diretiva for tratada pelo processo de compilação, o mesmo é imediatamente cancelado e a mensagem associada é apresentada no painel SAÍDA do ambiente.
Exemplo:
{ IFNDEF HIO115 }
{ ERROR 'Aplicação corrente não suporta operação sem o módulo HIO115' }
{ ENDIF }
WARNING
{ WARNING 'MSG' }
WARNING: Diretiva de compilação.
MSG: Mensagem a ser apresentada. Deve ser delimitada por aspas simples.
Se esta diretiva for tratada pelo processo de compilação, a mensagem associada é enviada para o painel SAÍDA do ambiente com atributo de advertência. Nesta situação o processo de compilação contínua normalmente e o código é gerado caso não existam erros no mesmo. No final do processo, o painel SAÍDA indica o resultado da compilação e informa ao usuário que existem warnings na compilação, com a POU e a linha onde os mesmos foram inseridos.
Exemplo:
{ IFDEF USE_FAN }
{ IFNDEF HIO115 }
{ WARNING 'Programa de controle não totaliza vazão sem o módulo HIO115' }
{ ENDIF }
{ ENDIF }
MESSAGE
{ MESSAGE 'MSG' }
MESSAGE: Diretiva de compilação.
MSG: Mensagem a ser apresentada. Deve ser delimitada por aspas simples.
Se esta diretiva for tratada pelo processo de compilação, a mensagem associada é enviada para o painel SAÍDA do ambiente com atributo de informação. Nesta situação o processo de compilação contínua normalmente e o código é gerado caso não existam erros no mesmo. No final do processo, o painel SAÍDA indica o resultado da compilação e todas as mensagens processadas são apresentadas para o usuário, com a POU e a linha de origem.
Exemplo:
{ IFDEF HIO115 }
{ WARNING 'Programa de aplicação gerado com módulo de controle de ventilador' }
{ ENDIF }