F97_DSRC

32비트 테이블 데이터 검색

이 펑션은 32비트 영역들로 구성된 블록(그 시작은 입력 s2_Start로 지정되고 끝은 s3_End로 지정됨)에서 입력 s1에 지정된 값을 검색합니다.

파라미터

입력

s1(DWORD, DINT, UDINT, DATE, TOD, DT)

검색된 값을 저장하는 32비트 영역 또는 해당 정수

s2_Start(DWORD, DINT, UDINT, DATE, TOD, DT)

블록의 32비트 영역을 시작함

s3_End(DWORD, DINT, UDINT, DATE, TOD, DT)

블록의 32비트 영역을 종료함

주석

  1.  (1) 검색된 값
  2.  (2) 32비트 테이블 데이터
  • s1과 매칭되는 데이터 항목들의 수가 특수 데이터 레지스터 DT90037(sys_iNumberOfFoundMatches)에 저장됩니다.

  • 시작하는 32비트 영역 s2_Start에서부터 계산하여 첫 번째로 매칭되는 데이터 항목의 상대 위치가 특수 데이터 레지스터 DT90038(sys_iPositionOfFirstMatch)에 저장됩니다.

  • 입력 s2_Starts3_End의 변수들의 어드레스는 어드레스 유형이 동일해야 합니다.

에러 플래그

sys_bIsOperationErrorHold(TRUE로 전환되어 TRUE로 유지됨)
  • 인덱스 한정자를 사용하여 지정한 영역이 제한을 초과하는 경우.

  • s2_Start>s3_End인 경우

sys_bIsOperationErrorNonHold(스캔 1회에 대해 TRUE로 전환)
  • 인덱스 한정자를 사용하여 지정한 영역이 제한을 초과하는 경우.

  • s2_Start>s3_End인 경우

POU 헤더

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

	VAR
		start: BOOL:=FALSE;
		data_table: ARRAY [0..3] OF DINT:=[-44,222222,-44,12345];
		number_matches: INT:=0;
		position_1match: INT:=0;
	END_VAR

POU 본문

변수 startTRUE로 설정되면 펑션이 실행됩니다.

이 예에서는 입력 변수를 사용하지 않고 정수(-44)를 입력 s1에 할당합니다. result는 특수 데이터 레지스터 DT90037 및 DT90038에 저장됩니다. 두 E_MOVE 함수를 복사하면 number_matchesposition_1match 등의 변수 두 개가 생성됩니다.

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,F97_DSRC!,Instance,8,0,15,6,,?DEN?Ds1?Ds2_Start?Ds3_End?AENO);
B(B_VARIN,,start,6,1,8,3,);
B(B_VARIN,,-44,6,2,8,4,);
B(B_VARIN,,data_table[0],6,3,8,5,);
B(B_VARIN,,data_table[3],6,4,8,6,);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_F,E_MOVE!,Instance,8,1,14,5,,?DEN?D?AENO?C);
B(B_VAROUT,,number_matches,14,3,16,5,);
B(B_VARIN,,start,6,2,8,4,);
B(B_VARIN,,DT90037,6,3,8,5,);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_F,E_MOVE!,Instance,8,1,14,5,,?DEN?D?AENO?C);
B(B_VAROUT,,position_1match,14,3,16,5,);
B(B_VARIN,,start,6,2,8,4,);
B(B_VARIN,,DT90038,6,3,8,5,);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST 본문

IF start then
    F97_DSRC( s1:= -44 ,
         s2_Start:= data_table[0] ,
         s3_End:= data_table[3] );
    number_matches:=DT90037;
    position1_match:=DT90038;
END_IF;

IL 본문

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