左右シフトレジスタ
16ビットデータレンジの1ビットを、左または右にシフトします。
入力
左/右トリガ: シフトする方向を指定します。
シフト入力するデータを指定します。
シフトインデータ = TRUE = 1: データ入力がTRUEのとき
シフトを実行します。
トリガ立ち上がり検出時(FALSE®TRUE)のとき、1ビット左または右へシフトします。
実行条件がTRUEのとき、d1_Startとd2_Endで指定されたデータレンジのすべてのビットを"0"にします。
d1_Start、d2_Endで指定されたエリアのデータを0にリセットします。
シフトする16ビットエリアの終端アドレス
シフトする16ビットエリアの先頭アドレス
出力
シフトにより押し出されるビット
変数d1_Startとd2_Endは同じデータ型を使用してください。
このファンクションの出力Carryに変数を設定する必要はありません。
左(上位ビット方向)か右(下位ビット方向)に、1ビットシフト(移動)する方向を切り替えられるシフトレジスタです。
POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 POUヘッダは全プログラム言語で使用できます。
VAR
data_array: ARRAY [0..2] OF INT:=[2#0000000000000001,2#0011111111111111,2#0011111111111110];
enable_leftShift: BOOL:=FALSE;
(*function shifts left if TRUE,
else it shifts right*)
reset: BOOL:=FALSE;
(*if TRUE, the whole array
will be set to zero*)
input: BOOL:=TRUE;
(*specifies the new shift-in data*)
shift_trigger: BOOL:=FALSE;
(*activates the function at a 0->1
leading edge*)
carry_out_value: BOOL:=FALSE;
(*result after a 0->1 leading edge
from shift_trigger: 1.
After the next cycle the value will be
set back to zero.*)
END_VAR
変数enable_leftShiftがTRUEのとき、左シフトします。それ以外の場合は右シフトします。
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 9 ;
NETWORK_BODY
B(B_F,F119_LRSR!,Instanz,12,1,22,9,,?DLeftDirection?DDataInput?DShiftTrigger?DReset?Dd1_Start?Dd2_End?ACarry);
B(B_CONTACT,,enable_leftShift,7,2,9,4,);
B(B_VARIN,,input,9,3,11,5,);
B(B_VARIN,,shift_trigger,9,4,11,6,);
B(B_VARIN,,reset,9,5,11,7,);
B(B_VARIN,,data_array[0],9,6,11,8,);
B(B_VARIN,,data_array[2],9,7,11,9,);
B(B_VAROUT,,carry_out_value,22,2,24,4,);
L(1,3,7,3);
L(9,3,12,3);
L(11,4,12,4);
L(11,5,12,5);
L(11,6,12,6);
L(11,7,12,7);
L(11,8,12,8);
L(1,0,1,9);
END_NETWORK_BODY
END_NET_WORK
END_BODY
carry_out_value:=F119_LRSR( LeftDirection:= enable_leftShift,
DataInput:= input,
ShiftTrigger:= shift_trigger,
Reset:= reset,
d1_Start:= data_array[0],
d1_End:= data_array[2]);