32ビットオフセット付き入出力FLアドレス取得
入出力Offsの値から、FLエリア内の32ビットアドレスを入出力AdrFLに生成します。この入出力は、基本ファンクションの16ビット入出力に直接的に接続してください。入出力Offsの値は、FLデータエリア内のアドレスオフセットを表します。GetPointer32を使用すると、このアドレスオフセットをメモリエリアの値とともに、ユーザファンクションまたはファンクションブロックに転送することができます。
入力
16ビットのFLオフセットアドレスが生成されます。
このピンは、基本ファンクションの入出力に接続してください。有効なデータ型はINT型、WORD型です。
出力
アドレスFL0に対する32ビットオフセット
FLエリアで作成したアドレスを使用する基本ファンクションを実行するときは、EN入力の変数メモリエリアの値をファンクションIs_AreaFLに割り付けてから実行するようにしてください。
このファンクションは、内部でインデックスレジスタの1つにアクセスします。これは配列の計算にも使用されます。FLエリアが、機種により利用できない場合、FLアドレスの代わりにアドレスDT0が自動的に生成されます。
ファンクションIs_AreaFLは常にFALSEを返し、無効なアドレスにコマンドを実行しないようにします。従って、このファンクションで記述したユーザ定義ファンクションやファンクションブロックは、FLエリアをサポートしていないコントローラでも実行できます。
このファンクションは、LDエディタとFBDエディタでのみ使用することができます。「命令」ペインで「入力命令」または「出力命令」を使って、必要な命令をプログラミングウィンドウに挿入してください。
POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 POUヘッダは全プログラム言語で使用できます。
VAR
bStart: BOOL:=FALSE;
(*Activation of the function*)
DutNonBoolean: DUT_NonBoolean;
(*structured data type*)
diActualPosition: DINT:=0;
(*Beginning position from which data should be read from the IC card*)
END_VAR
このPOUヘッダで、上記DUTに登録されたデータ型の変数DutNonBooleanを宣言します。POUヘッダやボディでは、変数DutNonBooleanの要素に値は設定していません。これは、ファンクションReadFromIcCardが実行されると、変数DutNonBooleanの値が上書きされるからです。変数bStartがFALSEからTRUEになると、ファンクションReadFromIcCardが実行されます。開始アドレスdiActualPositionからICカードの値を読み込み、その情報を変数DutNonBooleanに書き込みます。メニューバーから、 を選択して適切にICカードをフォーマットし、必要に応じて、アドレスdiActualPositionを先頭に、ICカードに値を書き込んでください。
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 8 ;
NETWORK_BODY
B(B_CONTACT,,start,6,1,8,3,R);
B(B_F,ReadFromIcCard!,,18,1,27,8,,?DEN?DArea?DOffset?DSize?DPosition?AENO?C);
B(B_VARIN,,ActualPosition,16,6,18,8,);
B(B_VAROUT,,ActualPosition,27,3,29,5,);
B(B_VARIN,,Dut_NonBoolean,7,3,9,5,);
B(B_F,Size_Of_Var!,,9,5,16,7,,?D?C);
B(B_F,GetPointer!,,11,3,18,5,,?D?C);
B(B_VARIN,,2,16,4,18,6,);
L(18,2,18,3);
L(8,2,18,2);
L(1,2,6,2);
L(9,4,11,4);
L(9,4,9,6);
L(16,6,18,6);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
END_BODY