Instructions de compilation conditionnelle

Seules les parties du programme avec l’expression booléenne constante définie sur TRUE sont contrôlées et compilées.

Exemple
#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

Exemple avec des variables externes constantes

Exemple

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;

Exemple avec des constantes système pour les types d’API et groupes de types d’API

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

Exemple

#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;

Exemple avec des instructions d’informations API

Instructions d’informations de l’automate renvoyant une valeur booléenne constante :

Exemple
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;
Thèmes apparentés

Modifié le : 2024-08-19Commentaires sur cette pageAssistance téléphonique