F115_FIFT

FIFO 버퍼 영역 정의

F115 FIFO(선입 선출) 버퍼의 시작 영역 d1_Start와 메모리 크기 n_Number지정합니다.

파라미터

입력

n_Number (INT)

FIFO 버퍼 메모리 크기 지정

범위: 1-256

d1_Start (WORD, INT, UINT)

FIFO 버퍼의 시작 16비트 영역

주석

  • F 명령을 사용하는 대신 해당 FP7 명령을 사용하는 것이 좋습니다.FP_FIFO_DEFINE, FP_LIFO_DEFINE

  • FIFO 버퍼에 쓰거나 FIFO 버퍼에서 읽기 전에 FIFT 명령을 사용한 영역 정의를 한 번만 실행해야 합니다. FIFT 명령을 실행하면 FIFO 버퍼 영역은 다음과 같이 정의됩니다.

    1.  (1) FIFO 버퍼 메모리 크기(n)
    2.  (2) 작성됐지만 읽지 않은 저장된 데이터 항목 수(워드)
    3.  (3) FIFO 포인터
    4.  (4) 데이터 저장 영역(워드 n개)
    5.  (5) 쓰기 포인터 (0~255/16#00~16#FF)
    6.  (6) 기 포인터 (0~255/16#00~16#FF)
  • FIFT 명령을 실행하면 다음이 초기값으로 저장됩니다. d1_Start = n_Number (FIFT 명령으로 지정한 값), d1_Start + 1 = 0 및 d1_Start + 2 = 16#0000.

에러 플래그

sys_bIsOperationErrorHold(TRUE로 전환되어 TRUE로 유지됨)
  • n_Number = 0인 경우

  • n_Number > 256인 경우

  • n_Number에서 지정한 영역이 제한을 초과하는 경우

sys_bIsOperationErrorNonHold(스캔 1회에 대해 TRUE로 전환)
  • n_Number = 0인 경우

  • n_Number > 256인 경우

  • n_Number에서 지정한 영역이 제한을 초과하는 경우

DUT

이 예에서는 함수 F115_FIFT, F116_FIFRF117_FIFW을 통합하여 FIFO 버퍼를 보여줍니다.

POU 헤더

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

VAR
		FIFO: FIFO_n_WORD;
		iRead_Data: INT:=0;
		iWrite_Data: INT:=1;
		bFIFO_Initialize: BOOL:=FALSE;
		bFIFO_Write: BOOL:=FALSE;
		bFIFO_Read: BOOL:=FALSE;
		bChange_Value: BOOL:=FALSE;
	END_VAR

POU 본문

다음 예에서는 bFIFO_Write가 두 번, bFIFO_Read가 한 번 활성화된 후의 버퍼 상태를 보여줍니다. bFIFO_Write가 처음 활성화되었으면 값 1은 FIFO.awData[0]에 작성되었습니다. bFIFO_Read가 활성화되었으면 iRead_Data는 이 값을 읽습니다. 다음으로 bFIFO_Write가 활성화되었으면 쓰기 포인터는 1씩 증가하고 값 2는 FIFO.awData[1]에 작성됩니다. 입력 데이터 모니터 1을 참조하십시오.

LD 본문

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 7 ;
        NETWORK_BODY
B(B_CONTACT,,bFIFO_Initialize,6,1,8,3,R);
B(B_F,F115_FIFT,,24,0,33,5,,?DEN?Dn?Dd1?AENO);
B(B_VARIN,,FIFO.awData,11,3,13,5,);
B(B_F,Size_Of_Var,,13,2,23,5,,?D@'Var'?CSize);
B(B_VARIN,,FIFO.iSize,11,5,13,7,);
L(1,0,1,7);
L(1,2,6,2);
L(8,2,24,2);
L(23,3,24,3);
L(23,3,23,4);
L(24,4,24,6);
L(13,6,24,6);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 9 ;
        NETWORK_BODY
B(B_COMMENT,,The LT (Lower Than) operator prevents a writing error from occurring.,3,1,33,2,);
B(B_VARIN,,FIFO.iNumber,8,4,10,6,);
B(B_F,@LT-2,,10,3,15,7,,?D?D?C);
B(B_CONTACT,,bFIFO_Write,17,4,19,6,R);
B(B_VARIN,,FIFO.iSize,8,5,10,7,);
B(B_F,F117_FIFW,,24,4,33,8,,?DEN?D@'s'?AENO?Cd1);
B(B_VARIN,,iWrite_Data,22,6,24,8,);
B(B_VAROUT,,FIFO.iSize,33,6,35,8,);
L(1,0,1,9);
L(15,5,17,5);
L(19,5,19,6);
L(19,6,24,6);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 9 ;
        NETWORK_BODY
B(B_COMMENT,,The GT (Greater Than) operator prevents a reading error from occurring.,3,1,34,2,);
B(B_VARIN,,FIFO.iNumber,7,4,9,6,);
B(B_F,@GT-2,,9,3,14,7,,?D?D?C);
B(B_CONTACT,,bFIFO_Read,16,4,18,6,R);
B(B_VARIN,,0,7,5,9,7,);
B(B_F,F116_FIFR,,24,4,33,8,,?DEN?Dd1?AENO?Cd2);
B(B_VARIN,,FIFO.iSize,22,6,24,8,);
B(B_VAROUT,,iRead_Data,33,6,35,8,);
L(1,0,1,9);
L(14,5,16,5);
L(18,5,18,6);
L(18,6,24,6);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 9 ;
        NETWORK_BODY
B(B_COMMENT,,The E_ADD function is for cosmetic purposes only. It increments the value for the variable iWrite_Data~ which you can more easily differentiate when it is written into the Array of the FIFO buffer.,3,1,34,4,);
B(B_CONTACT,,bChange_Value,9,5,11,7,R);
B(B_F,E_ADD-2,,22,4,28,9,,?DEN?Da_NumN?Da_NumN?AENO?C);
B(B_VARIN,,iWrite_Data,20,6,22,8,);
B(B_VAROUT,,iWrite_Data,28,6,30,8,);
B(B_VARIN,,1,20,7,22,9,);
L(1,0,1,9);
L(1,6,9,6);
L(11,6,22,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST 본문

IF DF(bFIFO_Initialize) THEN
	(* Create the FIFO buffer *)
	F115_FIFT(n_Number := Size_Of_Var(FIFO.awData), d1_Start :=  FIFO.iSize);
	REPEAT
		(* Initialize FIFO buffer with values *)
		iWrite_Data:=iWrite_Data+1;
		F117_FIFW(s := iWrite_Data, d1_Start => FIFO.iSize);
	UNTIL(FIFO.iNumber>=FIFO.iSize)
	END_REPEAT;
END_IF;

IF DF( bFIFO_Write) THEN
	(* Write value of Write_Data to FIFO buffer *)
	(* at leading edge of FIFO_Write *)
	F117_FIFW(s := iWrite_Data, d1_Start => FIFO.iSize);
END_IF;

IF DF(bFIFO_Read) THEN
	(* Read value from FIFO buffer *)
	(* at leading edge of FIFO_Read *)
	F116_FIFR(d1_Start := FIFO.iSize, d2 => iRead_Data);
END_IF;

최종 수정일: 2023-07-10이 페이지에 대한 피드백Panasonic 직통 전화