Var_ToAreaOffs

변수 값을 어드레스 영역에 복사

이 함수는 Var 입력의 변수 값을 Area 메모리 영역과 Offs 어드레스 오프셋에서 정의한 어드레스 영역에 복사합니다. 따라서 Var 입력의 변수 크기는 복사된 데이터 수를 결정합니다.

파라미터

입력

Var (ANY_SIMPLE_NOT_BOOL)

값이 어드레스에 복사된 변수

출력

iArea (INT)

메모리 영역값1)

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

Offs (INT)

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

주석

iArea 또는 diOffs 변수는 GetPointer32 함수를 통해 제공될 수 있습니다. iArea 값은 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 헤더

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

	VAR
		bStart: BOOL:=FALSE;
			(*activation*)
		g_arArrayOut1: ARRAY [0..5] OF REAL:=[6(0.0)];
			(*data field with cumulative sum*)
		g_arArrayIn1: ARRAY [0..5] OF REAL:=[10.0,20.0,30.0,40.0,50.0,60.0];
			(*data field 1*)
		CalcSum_Real1: CalcSum_Real;
			(*instance of user function block*)
		@'': @'';
	END_VAR

POU 본문

변수 bStartTRUE로 설정되면 CalcSum_REAL 펑션블록이 실행됩니다. g_arArrayIn1 데이터 필드의 모든 요소 합계가 계산되고 g_arArrayOut1 데이터 필드에 결과를 씁니다. 이러한 방식으로 g_arArrayOut1의 첫 번째 요소는 g_arArrayIn1의 첫 번째 요소를 수신합니다. g_arArrayOut1의 두 번째 요소는 g_arArrayIn1의 첫 번째와 두 번째 요소의 합계를 포함합니다.g_arArrayOut1의 세 번째 요소는 g_arArrayIn1의 첫 번째, 두 번째 및 세 번째 요소 합계를 포함합니다.

CalcSum_REAL 펑션블록은 두 데이터 필드를 저장할 수 있는 메모리 영역과 데이터 필드의 요소 수와 독립적으로 함수를 계산할 수 있습니다. 데이터 필드의 어드레스를 할당하려면 전역 변수 목록에서 데이터 필드를 선언해야 합니다. 두 데이터 필드 모두 요소 수가 동일해야 합니다.

LD 본문

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_VARIN,,g_arArrayIn1,10,3,12,5,);
B(B_VARIN,,g_arArrayOut1,10,4,12,6,);
B(B_CONTACT,,bStart,5,2,7,4,);
B(B_F,GetPointer!,,12,3,19,5,,?D?C);
B(B_F,GetPointer!,,12,4,19,6,,?D?C);
B(B_FB,CalcSum_Real!,CalcSum_Real1,19,1,28,6,,?BEN?BpInputArray?BpOutputArray?AENO);
L(7,3,19,3);
L(1,3,5,3);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

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

POU 헤더

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

	VAR_INPUT
		pToDatafield: POINTER;
			(*pointer on the data field for calculation*)
	END_VAR
	VAR_OUTPUT
		rSum: REAL:=0.0;
			(*calculate sum*)
	END_VAR
	VAR
		Sum_Operand: REAL:=0.0;
			(*inernal calculation of the sum*)
		In_Offs_Intern: INT:=0;
			(*internal offset*)
		Idx: INT:=0;
			(*index*)
		@'': @'';
	END_VAR

LD 본문

  • 네트워크 1~5:

    여기서 다음을 처리하는 합계 계산이 초기화됩니다.

  • 네트워크 6:

    입력 데이터 필드의 요소 값을 복사합니다.

  • 네트워크 7:

    이 값을 현재 합계에 추가합니다.

  • 네트워크 8:

    현재 합계를 출력 데이터 필드의 요소에 복사합니다.

  • 네트워크 9:

    입력 데이터 필드와 출력 데이터 필드의 다음 데이터 필드 요소의 오프셋을 계산합니다.

  • 네트워크 10: 데이터 필드의 모든 요소가 처리될 때까지 라벨(네트워크 6)로 이동합니다.

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_F,Is_AreaDT!,,12,0,18,2,,?D?C);
B(B_VARIN,,pToDatafield.iArea,9,1,11,3,);
B(B_F,Is_AreaFL!,,12,3,18,5,,?D?C);
B(B_F,@AND-2!,,19,1,24,4,NN,?D?D?C);
B(B_F,E_MOVE!,,29,0,35,4,,?DEN?D?AENO?C);
B(B_VARIN,,FALSE,27,2,29,4,);
B(B_VAROUT,,ENO,35,2,37,4,);
B(B_RETURN,,,36,1,38,3,);
L(12,2,12,4);
L(12,1,12,2);
L(11,2,12,2);
L(18,1,18,2);
L(18,2,19,2);
L(18,3,18,4);
L(18,3,19,3);
L(35,2,36,2);
L(24,2,29,2);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 2 ;
        NETWORK_BODY
B(B_VARIN,,pToDatafield.iOffset,18,0,20,2,);
B(B_VAROUT,,In_Offs_Intern,20,0,22,2,);
L(1,0,1,2);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 2 ;
        NETWORK_BODY
B(B_VARIN,,0.0,18,0,20,2,);
B(B_VAROUT,,rSum,20,0,22,2,);
L(1,0,1,2);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 2 ;
        NETWORK_BODY
B(B_VARIN,,1,18,0,20,2,);
B(B_VAROUT,,Idx,20,0,22,2,);
L(1,0,1,2);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL := Lbl1: ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 4 ;
        NETWORK_BODY
B(B_VARIN,,pToDatafield.iArea,15,1,17,3,);
B(B_VAROUT,,Sum_Operand,27,1,29,3,);
B(B_VARIN,,In_Offs_Intern,15,2,17,4,);
B(B_F,AreaOffs_ToVar!,,17,0,26,4,,?DArea?DOffs?C@'Var');
L(26,2,27,2);
L(1,0,1,4);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 3 ;
        NETWORK_BODY
B(B_F,@ADD-2!,,17,0,22,3,,?D?D?C);
B(B_VARIN,,rSum,15,0,17,2,);
B(B_VARIN,,Sum_Operand,15,1,17,3,);
B(B_VAROUT,,rSum,22,0,24,2,);
L(1,0,1,3);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 3 ;
        NETWORK_BODY
B(B_F,Size_Of_Var!,,17,1,24,3,,?D?C);
B(B_VARIN,,Sum_Operand,15,1,17,3,);
B(B_F,@ADD-2!,,24,0,29,3,,?D?D?C);
B(B_VARIN,,In_Offs_Intern,22,0,24,2,);
B(B_VAROUT,,In_Offs_Intern,29,0,31,2,);
L(1,0,1,3);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_F,@LT-2!,,13,1,18,4,,?D?D?C);
B(B_VARIN,,pToDatafield.iSize,11,2,13,4,);
B(B_F,E_ADD-2!,,22,0,28,5,,?DEN?D?D?AENO?C);
B(B_VARIN,,1,20,3,22,5,);
B(B_VAROUT,,Idx,28,2,30,4,);
B(B_VARIN,,Idx,20,2,22,4,);
B(B_JUMP,,Lbl1,28,1,30,3,);
B(B_VARIN,,Idx,11,1,13,3,);
L(18,2,22,2);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY
관련 항목

추가 예 프로젝트(FPWIN Pro 설치의 "Samples" 디렉토리):

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