Seules les parties du programme avec l’expression booléenne constante définie sur TRUE sont contrôlées et compilées.
#IF ConstantBooleanExpression1 #THEN
(* Program part 1 executed if ConstantBooleanExpression1 = TRUE *)
#ELSIF ConstantBooleanExpression2 #THEN
(* Program part 2 executed if ConstantBooleanExpression2 = TRUE *)
#ELSE
(* Program part 3 executed if ConstantBooleanExpression1 and
ConstantBooleanExpression2 = FALSE *)
#END_IF;
Objectif :
Différentes versions de codes, par ex. pour les diverses recettes, routines d’initialisation, etc.
Générer différents codes programmes pour divers types d’automates à partir d’un programme
L’optimisation de codes
Les expressions constantes des compilations conditionnelles peuvent également se composer de la combinaison des types suivants.
Variables externes constantes
Variables locales constantes
Littéraux
Constantes de type d’API
Instructions d’informations de l’automate
GVL
En-tête du POU
Corps en ST
#if(SUN_POS_ALGORITHM=1) #then
(* PSA Algorithm: 0.06° accuracy, 1950 steps, 3.6 ms cycle time on a FP-X *)
SunPosition_PSA(dtDateAndTime := dtDateAndTime,
rTimezone := rTimezone,
rLatitude := rLatitude,
rLongitude := rLongitude,
bError => bError,
rZenith => rZenith,
rAzimuth => rAzimuth);
#elsif (SUN_POS_ALGORITHM=2) #then
(* SolPos Algorithm: 0.00257° accuracy, 3700 steps, 6.3 ms cycle time on a FP-X *)
SunPosition_SolPos(dtDateAndTime := dtDateAndTime,
rTimezone := rTimezone,
rLatitude := rLatitude,
rLongitude := rLongitude,
rPressure := 1013.0,
rTemperature := 20.0,
bError => bError,
rZenith => rZenith,
rAzimuth => rAzimuth);
#else
(* SolPos Algorithm All: 0.00257° accuracy, 7300 steps, 10.3 ms cycle time on a FP-X *)
SunPosition_SolPos_All(dtDateAndTime := dtDateAndTime,
rTimezone := rTimezone,
rLatitude := rLatitude,
rLongitude := rLongitude,
rPressure := 1013.0,
rTemperature := 20.0,
dutAdditionalInputs := dutAdditionalInputs,
bError => bError,
rZenith => rZenith,
rAzimuth => rAzimuth,
dutAdditionalOutputs => dutAdditionaOutputs);
#end_if;
Les constantes de type d’API (noms en lettres capitales) permettent à des programmes d’être compilés en fonction de l’automate connecté. Vous pouvez choisir entre :
Type d’API en cours
Groupes de types d’API pris en charge par Control FPWIN Pro7
Types d’API explicites pris en charge par Control FPWIN Pro7
#if((SYS_CURRENT_PLC AND (SYS_FP0 OR SYS_FP_e))<>0) #then (* FP0, FPe *)
SunPosition_PSA(dtDateAndTime := dtDateAndTime,
rTimezone := rTimezone,
rLatitude := rLatitude,
rLongitude := rLongitude,
bError => bError,
rZenith => rZenith,
rAzimuth => rAzimuth);
#elsif ((SYS_CURRENT_PLC AND (SYS_FP2 OR SYS_FP2SH OR SYS_FP10SH))<>0) #then
(* FP2,FP2SH,FP10SH *)
SunPosition_SolPos_All(dtDateAndTime := dtDateAndTime,
rTimezone := rTimezone,
rLatitude := rLatitude,
rLongitude := rLongitude,
rPressure := 1013.0,
rTemperature := 20.0,
dutAdditionalInputs := dutAdditionalInputs,
bError => bError,
rZenith => rZenith,
rAzimuth => rAzimuth,
dutAdditionalOutputs => dutAdditionaOutputs);
#else (* FP-Sigma, FP-X, FP0R... *)
SunPosition_SolPos(dtDateAndTime := dtDateAndTime,
rTimezone := rTimezone,
rLatitude := rLatitude,
rLongitude := rLongitude,
rPressure := 1013.0,
rTemperature := 20.0,
bError => bError,
rZenith => rZenith,
rAzimuth => rAzimuth);
#end_if;
Instructions d’informations de l’automate renvoyant une valeur booléenne constante :
dutDTBCD := GET_RTC_DTBCD();
#if(IsInstructionSupported('F230_DTBCD_TO_SEC'))#then
(* FP0R, FP-Sigma, FP-X, FP2, FP2SH *)
F230_DTBCD_TO_SEC(dut_DTBCD, diSeconds);
#else
(* FP0, FPe *)
iSecond := WORD_BCD_TO_INT(dutDTBCD.MinSec and16#00FF);
iMinute := WORD_BCD_TO_INT(SHR(dutDTBCD.MinSec, 8));
iHour := WORD_BCD_TO_INT(dutDTBCD.DayHour and16#00FF);
iDay := WORD_BCD_TO_INT(SHR(dutDTBCD.DayHour, 8));
iMonth := WORD_BCD_TO_INT(dutDTBCD.YearMonth and16#00FF);
iYear := WORD_BCD_TO_INT(SHR(dutDTBCD.YearMonth, 8));
GET_RTC_DT := CONCAT_DT_INT(iYear+2000, iMonth, iDay, iHour, iMinute, iSecond, 0, ERROR);
#end_if;