AreaOffs_ToVar

16비트 오프셋을 사용하여 어드레스 콘텐츠를 변수에 복사

이 함수는 Var 변수 크기로 정의한 워드 수를 Area 메모리 영역과 Offs 어드레스 오프셋으로 결정한 어드레스의 Var 변수에 복사합니다.

파라미터

입력

iArea (INT)

메모리 영역값1)

Area가 변수이면 DT 또는 FL 메모리 영역에 있어야 합니다. FP 도구 라이브러리의 Is_AreaDT 또는 Is_AreaFL 함수를 통합한 함수를 사용하여 이를 확인해야 합니다.

Offs (INT)

메모리 영역의 시작 16비트 어드레스 오프셋

출력

Var (ANY_SIMPLE_NOT_BOOL)

어드레스의 콘텐츠가 복사된 변수

주석

Area 또는 Offs 변수는 GetPointer 함수를 통해 제공될 수 있습니다. Area 값은 DT 또는FL 영역에 있어야 합니다.

메모리 영역값1)

플래그 메모리 영역

FP7에만 사용할 수 있습니다.

SYS_MEMORY_AREA_R

SYS_MEMORY_AREA_L

SYS_MEMORY_AREA_X

SYS_MEMORY_AREA_Y

플래그

SYS_MEMORY_AREA_WR

설정값 타이머/카운터

SYS_MEMORY_AREA_SV

경과값 타이머/카운터

SYS_MEMORY_AREA_EV

데이터 레지스터

SYS_MEMORY_AREA_DT

링크 플래그

SYS_MEMORY_AREA_WL

링크 레지스터

SYS_MEMORY_AREA_LD

파일 레지스터

SYS_MEMORY_AREA_FL

입력 레지스터

SYS_MEMORY_AREA_WX

출력 레지스터

SYS_MEMORY_AREA_WY

글로벌 변수

글로벌 변수 리스트에서 프로젝트의 모든 POU에서 액세스할 수 있는 변수를 정의합니다.

여기서 g_arArrayIn1 변수가 할당됩니다. 변수는 Program_CalcSums 프로그램의 POU 헤더에서도 선언될 수 있습니다.

POU 헤더

이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.

R_EXTERNAL
		WrongAreaArray: ARRAY [0..2] OF REAL:=[10.0,20.0,30.0];
	END_VAR
	VAR 
		start: BOOL:=FALSE;
		RealArrayIn1: ARRAY [0..5] OF REAL:=[10.0,20.0,30.0,40.0,50.0,60.0];
		RealArrayIn2: ARRAY [0..3,1..4] OF REAL:=[10.0,20.0,30.0,40.0,50.0,60.0,70.0,80.0,90.0,100.0,110.0,120.0,130.0,140.0,150.0,160.0];
		RealArrayIn3: ARRAY [0..2,1..3,2..5] OF REAL:=[10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0];
		RealSum1: REAL:=0.0;
			(*Result: 210*)
		RealSum2: REAL:=0.0;
			(*Result: 1360*)
		RealSum3: REAL:=0.0;
			(*Result: 180*)
		IsWrongArea: BOOL:=FALSE;
		WrongAreaSum: REAL:=0.0;
		CalcSum_Real1: CalcSum_REAL;
	END_VAR

POU 본문

변수 bStartTRUE로 설정되면 CalcSum_REAL 펑션블록이 실행됩니다. g_arArrayIn1 데이터 필드의 모든 요소 합계가 계산되고 rRealSum1 변수에 결과를 씁니다.

LD 본문

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 3 ;
        NETWORK_BODY
B(B_COMMENT,,This program calculates the sum of all array elements of the input array In,3,1,38,2,);
L(1,0,1,3);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 10 ;
        NETWORK_BODY
B(B_VARIN,,start,6,0,8,2,);
B(B_VAROUT,,RealSum1,36,4,38,6,);
B(B_VARIN,,RealArrayIn1,8,2,10,4,);
B(B_FB,CalcSum_REAL,CalcSum_Real1,25,2,36,8,,?BEN?BIn_Area?BIn_Offset?BNrOfIdx?AENO?ASum);
B(B_F,AreaOffs_OfVar,,10,1,22,5,,?D@'Var'?CArea?COffs);
B(B_F,Elem_OfArray1D,,10,5,22,8,,?DArray1D?CNrOfElem1);
B(B_COMMENT,,10+20+30+40+50+60,26,8,35,9,);
B(B_COMMENT,,=,36,8,38,9,);
B(B_COMMENT,,210.0,39,8,43,9,);
B(B_COMMENT,,if (Enable==TRUE):,15,8,25,9,);
L(25,1,25,4);
L(8,1,25,1);
L(24,3,24,5);
L(23,4,23,6);
L(24,5,25,5);
L(10,3,10,7);
L(22,3,24,3);
L(22,4,23,4);
L(22,7,25,7);
L(23,6,25,6);
L(1,0,1,10);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 13 ;
        NETWORK_BODY
B(B_VARIN,,start,6,0,8,2,);
B(B_VAROUT,,RealSum2,36,4,38,6,);
B(B_VARIN,,RealArrayIn2,8,2,10,4,);
B(B_FB,CalcSum_REAL,CalcSum_Real1,25,2,36,8,,?BEN?BIn_Area?BIn_Offset?BNrOfIdx?AENO?ASum);
B(B_F,Elem_OfArray1D,,10,5,22,8,,?DArray1D?CNrOfElem1);
B(B_COMMENT,,10+20+30+40+ø^50+60+70+80+ø^90+100+110+120+ø^130+140+150+160,26,8,35,12,);
B(B_COMMENT,,=,36,8,38,9,);
B(B_COMMENT,,1360.0,39,8,43,9,);
B(B_COMMENT,,if (Enable==TRUE):,15,8,25,9,);
L(25,1,25,4);
L(8,1,25,1);
L(24,3,24,5);
L(23,4,23,6);
L(24,5,25,5);
L(10,3,10,7);
L(22,7,25,7);
L(23,6,25,6);
L(1,0,1,13);
L(10,3,24,3);
L(10,4,23,4);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

예: CalcSum_REAL 사용자 정의 펑션블록 프로그래밍

POU 헤더

이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.

R_EXTERNAL
		WrongAreaArray: ARRAY [0..2] OF REAL:=[10.0,20.0,30.0];
	END_VAR
	VAR 
		start: BOOL:=FALSE;
		RealArrayIn1: ARRAY [0..5] OF REAL:=[10.0,20.0,30.0,40.0,50.0,60.0];
		RealArrayIn2: ARRAY [0..3,1..4] OF REAL:=[10.0,20.0,30.0,40.0,50.0,60.0,70.0,80.0,90.0,100.0,110.0,120.0,130.0,140.0,150.0,160.0];
		RealArrayIn3: ARRAY [0..2,1..3,2..5] OF REAL:=[10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0];
		RealSum1: REAL:=0.0;
			(*Result: 210*)
		RealSum2: REAL:=0.0;
			(*Result: 1360*)
		RealSum3: REAL:=0.0;
			(*Result: 180*)
		IsWrongArea: BOOL:=FALSE;
		WrongAreaSum: REAL:=0.0;
		CalcSum_Real1: CalcSum_REAL;
	END_VAR

LD 본문

  • 네트워크 1:

    전달된 데이터 필드가 DT 또는 FL 영역에 없으면 펑션블록의 ENO가 FALSE로 설정되고 처리가 종료됩니다.

  • 네트워크 2: 4:

    여기서 다음을 처리하는 합계 계산이 초기화됩니다. VAR_INPUT 등급 변수를 직접 변경할 수 없으므로, In_Offset 입력 변수를 In_Offs_intern 내부 변수에 복사해야 합니다.

    다음 참조: Var_ToAreaOffs

  • 네트워크 5: 8:

    합계 계산 루프입니다.

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 3 ;
        NETWORK_BODY
B(B_COMMENT,,This program calculates the sum of all array elements of the input array In,3,1,38,2,);
L(1,0,1,3);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 10 ;
        NETWORK_BODY
B(B_VARIN,,start,6,0,8,2,);
B(B_VAROUT,,RealSum1,36,4,38,6,);
B(B_VARIN,,RealArrayIn1,8,2,10,4,);
B(B_FB,CalcSum_REAL,CalcSum_Real1,25,2,36,8,,?BEN?BIn_Area?BIn_Offset?BNrOfIdx?AENO?ASum);
B(B_F,AreaOffs_OfVar,,10,1,22,5,,?D@'Var'?CArea?COffs);
B(B_F,Elem_OfArray1D,,10,5,22,8,,?DArray1D?CNrOfElem1);
B(B_COMMENT,,10+20+30+40+50+60,26,8,35,9,);
B(B_COMMENT,,=,36,8,38,9,);
B(B_COMMENT,,210.0,39,8,43,9,);
B(B_COMMENT,,if (Enable==TRUE):,15,8,25,9,);
L(25,1,25,4);
L(8,1,25,1);
L(24,3,24,5);
L(23,4,23,6);
L(24,5,25,5);
L(10,3,10,7);
L(22,3,24,3);
L(22,4,23,4);
L(22,7,25,7);
L(23,6,25,6);
L(1,0,1,10);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 13 ;
        NETWORK_BODY
B(B_VARIN,,start,6,0,8,2,);
B(B_VAROUT,,RealSum2,36,4,38,6,);
B(B_VARIN,,RealArrayIn2,8,2,10,4,);
B(B_FB,CalcSum_REAL,CalcSum_Real1,25,2,36,8,,?BEN?BIn_Area?BIn_Offset?BNrOfIdx?AENO?ASum);
B(B_F,Elem_OfArray1D,,10,5,22,8,,?DArray1D?CNrOfElem1);
B(B_COMMENT,,10+20+30+40+ø^50+60+70+80+ø^90+100+110+120+ø^130+140+150+160,26,8,35,12,);
B(B_COMMENT,,=,36,8,38,9,);
B(B_COMMENT,,1360.0,39,8,43,9,);
B(B_COMMENT,,if (Enable==TRUE):,15,8,25,9,);
L(25,1,25,4);
L(8,1,25,1);
L(24,3,24,5);
L(23,4,23,6);
L(24,5,25,5);
L(10,3,10,7);
L(22,7,25,7);
L(23,6,25,6);
L(1,0,1,13);
L(10,3,24,3);
L(10,4,23,4);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

최종 수정일: 2020-11-05이 페이지에 대한 피드백Panasonic 직통 전화