조건부 컴파일 문

정수 부울 식으로 TRUE로 설정된 프로그램 부분만 확인하고 컴파일합니다.

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

용도:

  • 서로 다른 코드 버전(예: 다양한 레시피, 초기화 루틴 등)

  • 프로그램 하나에서 PLC 기종마다 다른 프로그램 코드를 생성하는 데 사용

  • 코드 최적화에 사용

조건부 컴파일의 정수 식은 다음 형식의 결합으로 구성될 수 있습니다.

  • 외부 정수 변수

  • 정수 로컬 변수

  • 리터럴

  • PLC 기종 정수

  • PLC 정보 명령

외부 정수 변수의 예

글로벌 변수

POU 헤더

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;

PLC 기종과 PLC 기종 그룹의 시스템 정수 예

PLC 기종 정수(대문자 이름)를 사용하면 연결된 PLC에 따라 프로그램을 컴파일할 수 있습니다. 다음 중에서 선택할 수 있습니다.

  • 현재 PLC 기종

  • Control FPWIN Pro7에서 지원하는 PLC 기종 그룹

  • Control FPWIN Pro7에서 지원하는 명시적 PLC 기종

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

PLC 정보 명령 예

정수 부울값을 반환하는 PLC 정보 명령:

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;
관련 항목

최종 수정일: 2024-08-19이 페이지에 대한 피드백Panasonic 직통 전화