16비트 데이터 범위의 복수 비트 왼쪽으로 시프트
이 펑션은 출력 d1과 d2에서 시작과 끝을 지정하는 지정된 데이터 범위의 비트를 왼쪽으로 시프트합니다. 데이터 범위가 왼쪽으로 시프트되는 비트 수는 입력 n에서 할당된 값으로 지정됩니다. 값의 범위는 0과 16 사이입니다. 시프트로 인해 삭제된 비트는 0이 됩니다.
입력 n = 0인 경우에는 시프트가 발생하지 않습니다.
입력 n = 16인 경우에는 1워드 시프트가 발생합니다. 즉 펑션 F111_WSHL와 같은 프로세스가 진행됩니다.
입력
시프트할 비트 수
출력
16비트 영역 시작
16비트 영역 끝
F 명령을 사용하는 대신 해당 FP7 명령을 사용하는 것이 좋습니다.
입력 d1과 d2의 변수 어드레스 유형은 동일해야 합니다.
출력 d1_Start > d2_End의 변수 어드레스 또는 입력의 값이 n³ 16인 경우.
출력 d1_Start > d2_End의 변수 어드레스 또는 입력의 값이 n³ 16인 경우.
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
start: BOOL:=FALSE;
(*activates the function*)
data_array: ARRAY [0..2] OF WORD:=[16#1234,16#5678,16#9012];
(*result after a 0->1 leading edge
from start:
[16#2340,16#6781,16#9012]*)
END_VAR
변수 start가 FALSE에서 TRUE로 변경되면 펑션이 실행됩니다.
4비트(16진수 표시의 한 위치에 해당)를 왼쪽으로 시프트아웃합니다. 시프트에 따른 data_field[0]의 4비트는 0으로 채워집니다. 입력 n에서는 정수 4가 직접 펑션에 할당됩니다. 하지만 POU 헤더에서 입력 변수를 선언할 수도 있습니다.BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_VARIN,,4,7,2,9,4,);
B(B_VAROUT,,data_field[0],16,2,18,4,);
B(B_VAROUT,,data_field[2],16,3,18,5,);
B(B_CONTACT,,start,3,1,5,3,R);
B(B_F,F109_BITL!,Instance,9,0,16,5,,?DEN?Dn?AENO?Cd1_Start?Cd2_End);
L(1,0,1,5);
L(1,2,3,2);
L(5,2,9,2);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(start) then
F109_BITL( n:=4,
d1_Start=> data_field[0],
d2_End=> data_field[2]);
END_IF;