Diretivas de compilação
O HIstudio 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 HIstudio 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 HIstudio, 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
A partir da versão 1.4.03 do HIstudio é 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 HIstudio, 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;
...
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 HIstudio 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)
...
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 HIstudio 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 equipamentos associados ao programa e selecione o equipamento para carregar 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 na tela de erro 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 a tela de erro 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, a tela de console do ambiente é selecionada para indicar o resultado da compilação e é gerada uma linha informando ao usuário que existem warnings na compilação. A tela de erro neste caso não é fechada e pode ser selecionada pelo usuário para avaliar os warnings apresentados e o local no código onde os mesmos foram inseridos (através de um duplo click na linha da mensagem).
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 a tela de erro 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, a tela de console do ambiente é selecionada para indicar o resultado da compilação e todas as mensagens processadas são apresentadas no console para o usuário. A tela de erro é mantida aberta caso o usuário queira localizar as mensagens apresentadas no fonte da aplicação (através de um duplo click na linha da mensagem).
Exemplo:
{ IFDEF HIO115 }
{ WARNING 'Programa de aplicação gerado com módulo de controle de ventilador' }
{ ENDIF }