블록 데이터 비교
트리거 EN이 ON 상태인 경우 s1_Control에서 지정한 콘텐츠에 따라 s2_Start에서 지정한 데이터 블록 콘텐츠와 s3_Start에서 지정한 데이터 블록 콘텐츠를 비교합니다.
입력
비교할 바이트 위치와 바이트 수를 지정하는 제어 코드
s3_Start와 비교할 시작 16비트 영역
s2_Start와 비교할 시작 16비트 영역
제어 코드 s1_Control
비교할 바이트 수
범위: 16#01~16#99(BCD)
s2_Start에서 지정한 데이터 블록의 시작 바이트 위치
1: 상위 바이트에서 시작
0: 하위 바이트에서 시작
s3_Start에서 지정한 데이터 블록의 시작 바이트 위치
1: 상위 바이트에서 시작
0: 하위 바이트에서 시작
비교 연산 결과는 특수 내부 플래그 R900B에 저장됩니다. s2_Start=s3_Start이면 특수 내부 플래그는 ON 상태가 됩니다.
비교 명령에 사용된 sys_bIsEqual 플래그는 비교 명령이 실행될 때마다 갱신됩니다. 따라서 F64_BCMP 바로 다음에 R900B를 사용하는 프로그램이 있어야 합니다 .
변수 s1와 s2의 데이터 형식은 같아야 합니다.
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
start: BOOL:=FALSE;
(*activates the function*)
ControlCode: WORD:=16#1106;
(*s2 starting from upper byte
s3 starting from upper byte
compare 6 bytes*)
DataBlock1: ARRAY [0..5] OF INT:=[6(1234)];
DataBlock2: ARRAY [0..5] OF INT:=[6(1234)];
equal_block: BOOL:=FALSE;
END_VAR
변수 start가 TRUE로 설정되면 펑션이 실행됩니다.
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_CONTACT,,start,4,1,6,3,);
B(B_F,F64_BCMP!,Instance,10,0,18,6,,?DEN?Ds1_Control?Ds2_Start?Ds3_Start?AENO);
B(B_VARIN,,ControlCode,8,2,10,4,);
B(B_VARIN,,DataBlock1[0],8,3,10,5,);
B(B_VARIN,,DataBlock2[0],8,4,10,6,);
L(1,2,4,2);
L(6,2,10,2);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
F64_BCMP( s1_Control:= ControlCode,
s2_Start:= DataBlock1[0],
s3_Start:= DataBlock2[0]);
END_IF;