FP_AVERAGE_BUFFER_DEFINE

이동 평균값과 총 값에 대한 버퍼 영역 정의

이 FP 명령은 포함된 모든 값들의 평균값과 합계를 계산하기 위한 특수 버퍼를 지정합니다. 시작 어드레스는 d_Start로 설정되고 크기는 n_Words로 설정됩니다. 이 버퍼는 프로그래밍 예에 나와 있는 것처럼 특별한 구조를 갖습니다. 여기서 마지막 요소 iArrData의 배열 요소의 개수가 n_words에서 정의한 크기에 해당합니다. 버퍼에 쓰기 위해 명령 FP_AVERAGE_BUFFER_WRITE를 사용합니다.

파라미터

입력

n_Words (WORD, INT, UINT)

버퍼의 메모리 크기 지정

값: 1–30000

출력

d_Start (WORD, INT, UINT)

버퍼의 시작 데이터 영역

프로그래밍 예에서와 같이 사용자 정의 DUT를 사용하는 것이 좋습니다.

에러 플래그

sys_bIsOperationErrorHold(TRUE로 전환되어 TRUE로 유지됨)
  • 파라미터에 지정된 값이 허용 범위를 벗어난 경우.

sys_bIsOperationErrorNonHold(스캔 1회에 대해 TRUE로 전환)
  • 파라미터에 지정된 값이 허용 범위를 벗어난 경우.

DUT

DUT의 요소(식별자):

uiBufferSize

버퍼 크기

uiNumberOfStoredData

저장된 데이터의 수

diTotalValueOfStoredData

저장된 데이터의 총 합계

rMovingAverage

이동 평균

uiWritePointer

쓰기 포인터의 위치

iArrData

버퍼의 값들을 포함합니다. 정수 값들의 개수(이 예에서는 10)는 iNumberOfIntegerValues로 정의된 버퍼의 크기와 같아야 합니다.

POU 헤더

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

	VAR
		bDefine: BOOL:=FALSE;
		bWrite: BOOL:=FALSE;
		iCounter: INT:=0;
	END_VAR
	VAR CONSTANT
		iNumberOfIntegerValues: INT:=10;
			(*number of integers values must be equal to average buffer size*)
	END_VAR
	VAR
		dutAverageBufferInt10: DUT_FP_AVERAGE_BUFFER_INT_10;
			(*Average Buffer for integer numbers of size 10*)
	END_VAR

POU 본문

변수 bDefineTRUE로 설정되면 함수가 실행됩니다.

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_F,FP_AVERAGE_BUFFER_DEFINE!,,13,2,28,6,,?DEN?Dn_Words?AENO?Cd_Start);
B(B_VARIN,,iNumberOfIntegerValues,11,4,13,6,);
B(B_VAROUT,,dutAverageBufferInt10,36,4,38,6,);
B(B_CONTACT,,bDefine,4,1,6,3,);
B(B_F,Adr_Of_Var_O!,,28,4,36,6,,?D?C);
L(1,2,4,2);
L(6,2,6,4);
L(6,4,13,4);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 8 ;
        NETWORK_BODY
B(B_CONTACT,,bWrite,2,1,4,3,);
B(B_CONTACT,,bDefine,6,1,8,3,N);
B(B_F,FP_AVERAGE_BUFFER_WRITE!,,14,2,28,6,,?DEN?D@'s'?AENO?Cd_Start);
B(B_VARIN,,sys_iRingCounter_2ms5,12,4,14,6,);
B(B_F,Adr_Of_Var_O!,,28,4,36,6,,?D?C);
B(B_VAROUT,,dutAverageBufferInt10,36,4,38,6,);
B(B_CONTACT,,sys_bPulse1s,11,1,13,3,R);
L(1,2,2,2);
L(4,2,6,2);
L(8,2,11,2);
L(13,2,13,4);
L(13,4,14,4);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST 본문

IF (bDefine) then
    FP_AVERAGE_BUFFER_DEFINE(n_Words := iNumberOfIntegerValues,
                             d_Start => Adr_Of_Var(dutAverageBufferInt10));
END_IF;

If (bWrite) AND NOT (bDefine) AND DF(sys_bPulse1s) then
    FP_AVERAGE_BUFFER_WRITE(s := sys_iRingCounter_2ms5,
                            d_Start => Adr_Of_Var(dutAverageBufferInt10));
End_if;

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