데이터 블록 이동
이 FP 명령은 트리거 EN이 TRUE이면 데이터 블록을 s1_Start 및 s2_End에서 지정한 비트 데이터 영역에서 d_Start에서 지정한 데이터 영역에서 시작되는 블록으로 이동합니다.
입력
소스 데이터 영역의 시작 어드레스
소스 데이터 영역의 종료 어드레스
출력
대상 데이터 영역의 시작 어드레스
다음 조건이 적용됩니다.
입력 변수와 출력 변수의 데이터 형식은 동일해야 합니다.
오퍼랜드 s1_Start 및 s2_End는 동일한 메모리 영역에 있어야 합니다(예: DT, WR, FL, LD 등).
s1_Start£s2_End
s1_Start, s2_End 및 d_Start가 동일한 데이터 영역에 있을 때마다:
s1_Start=d_Start: 명령은 실행되지 않습니다.
s1_Start > s2_End인 경우
대상 범위가 사용가능 범위를 벗어난 경우
s1_Start > s2_End인 경우
대상 범위가 사용가능 범위를 벗어난 경우
해당 F 명령: 2020-02-21F10_BKMV 중복 명령
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
bStart: BOOL:=FALSE;
(*activates the function*)
aiSource_Array: ARRAY [0..4] OF INT:=[1,2,3,4,5];
aiTarget_Array: ARRAY [0..2] OF INT:=[3(0)];
(*result after a 0->1 leading edge
from start: [2,3,4]*)
END_VAR
변수 bStart가 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,,bStart,6,2,8,4,);
B(B_VARIN,,aiSource_Array[1],11,3,13,5,);
B(B_VARIN,,aiSource_Array[3],11,4,13,6,);
B(B_VAROUT,,aiTarget_Array[0],23,3,25,5,);
B(B_F,FP_MOVE_BLOCK!,,13,1,23,6,,?DEN?Ds1_Start?Ds2_End?AENO?Cd_Start);
L(1,3,6,3);
L(8,3,13,3);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
If (bStart) then
FP_MOVE_BLOCK(s1_Start := aiSource_Array[0], s2_End := aiSource_Array[3], d_Start => aiTarget_Array[0]);
End_if;