デジットデータ転送
sで指定された16ビットデータを、nで指定された転送方法に従って、dで指定された16ビットエリアに転送します。
入力
16ビットエリア(転送元)
転送方法を指定するエリア
出力
16ビットエリア(転送先)
F命令を使用する代わりに、対応するFP7命令を使用することをおすすめします。FP_MOVE_DIGITS デジットデータ転送
デジットとは、データを扱う際の 4ビット単位のデータを指します。この命令では、16ビットデータを4つに分割して扱います。下位4ビットから順に、第0デジット、第1デジット、第2デジット、第3デジットと呼びます。
16ビットデータ
ビット
デジット
nは、データを(1)転送先のどのデジットへ、(2)何デジット分、(3)転送元のどのデジットから転送するかを、以下のように指定します。
0: 第0デジット
1: 第1デジット
2: 第2デジット
3: 第3デジット
0: 1デジット分(4ビット)
1: 2デジット分(8ビット)
2: 3デジット分(12ビット)
3: 4デジット分(16ビット)
0: 第0デジット
1: 第1デジット
2: 第2デジット
3: 第3デジット
下記の例は、nの指定によって変わるデジットデータ転送のパターンを示します。
転送元の第1デジットを、転送先の第1デジットに転送するとき、n: 16#101を指定。
転送元の第3デジットを、転送先の第0デジットに転送するとき、n: 16#003 (短縮形:16#3)を指定。
転送元の複数のデジット(第2、第3デジット)を、転送先の複数のデジット(第2、第3デジット)に転送するとき、n: 16#212を指定。
転送元の複数のデジット(第0、第1デジット)を、転送先の複数のデジット(第2、第3デジット)に転送するとき、n: 16#210を指定。
転送元の4つのデジット(第0~第3デジット)が、転送先の4つののデジット(第0~第3デジット)へ、1デジット分ずらして転送されるとき、n: 16#130を指定。
POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 POUヘッダは全プログラム言語で使用できます。
VAR
start: BOOL:=FALSE;
source: INT:=329;
(*decimal 329 = 16#149*)
specify_n: WORD:=16#111;
(*Beginning from the end:
1: first hex. digit is digit 1, i.e. 4
1: copies 2 hex. digits, i.e. 14
1: destination is hex. digit 1*)
output: INT:=0;
(*16#140 = decimal 320*)
END_VAR
変数startがON (TRUE)のとき、このファンクションが実行されます。この例では、ラダーダイアグラムボディの「ヘッダモニタ」ウィンドウで、変数のsource、outputを16進表示でモニタしています。表示形式は、ツールバーのボタンにより変更することができます。
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_F,F6_DGT!,Instance,12,0,18,5,,?DEN?D@'s'?Dn?AENO?Cd);
B(B_VARIN,,source,8,2,10,4,);
B(B_VARIN,,specify_n,8,3,10,5,);
B(B_VAROUT,,output,18,2,20,4,);
B(B_CONTACT,,start,6,1,8,3,);
L(10,3,12,3);
L(10,4,12,4);
L(8,2,12,2);
L(1,2,6,2);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
F6_DGT( s:= source,
n:= specify_n,
d=> output);
END_IF;