AdrDT_Of_Offs

オフセット付き入出力DTアドレス取得

入出力Offsの値から、DTエリア内の16ビットアドレスを入出力AdrDTに生成します。この入出力は、ファンクションの16ビット入出力に直接接続してください。入出力Offsの値は、DTデータエリア内のアドレスオフセットを表します。GetPointerを使用すると、このアドレスオフセットをメモリエリアの値とともに、ユーザファンクションまたはファンクションブロックに転送することができます。

パラメータ

入力

AdrDT (INT)

16ビットのDTオフセットアドレスが生成されます。

このピンは、基本ファンクションの入出力に接続してください。有効なデータ型はINT型、WORD型です。

出力

Offs (WORD, INT, UINT)

アドレスDT0からのオフセットを指定します。

解説

  • DTエリアで作成したアドレスを使用する基本ファンクションを実行するときは、EN入力の変数メモリエリアの値をファンクションIs_AreaDTに割り付けてから実行するようにしてください。

  • このファンクションは、内部でインデックスレジスタの1つにアクセスします。これは配列の計算にも使用されます。

  • このファンクションは、LDエディタとFBDエディタでのみ使用することができます。「命令」ペインで「入力命令」または「出力命令」を使って、必要な命令をプログラミングウィンドウに挿入してください。

DUT

POUヘッダ

POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。POUヘッダは全プログラム言語で使用できます。

	VAR
		start: BOOL:=FALSE;
			(*activation of the function*)
		DutNonBoolean: @'Dut_NonBoolean';
			(*structured data type*)
		ActualPosition: DINT:=0;
			(*beginning position from which the data should be read to the IC card*)
	END_VAR

このPOUヘッダで、上記DUTに登録されたデータ型の変数DutNonBooleanを宣言します。POUヘッダやボディでは、変数DutNonBooleanの要素に値は設定していません。これは、ファンクションReadFromIcCardが実行されると、変数DutNonBooleanの値が上書きされるからです。

POUボディ

変数startFALSEからTRUEになると、ファンクションReadFromIcCardが実行されます。開始アドレスActualPositionからICカードの値を読み込み、その情報を変数DutNonBooleanに書き込みます。メニューバーから、「オンライン」 > 「ICメモリカードマネージャ」を選択して適切にICカードをフォーマットし、必要に応じて、アドレスActualPositionを先頭に、ICカードに値を書き込んでください。

LDボディ

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,);
B(B_F,ReadFromIcCard!,Instance,18,1,27,8,,?DEN?DArea?DOffset?DSize?DPosition?AENO?C);
B(B_VARIN,,2,16,4,18,6,);
B(B_VARIN,,ActualPosition,16,6,18,8,);
B(B_VAROUT,,ActualPosition,27,3,29,5,);
B(B_F,GetPointer!,Instance,11,3,18,5,,?D?C);
B(B_VARIN,,Dut_NonBoolean,7,3,9,5,);
B(B_F,Size_Of_Var!,Instance,9,5,16,7,,?D?C);
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

例: ユーザ定義ファンクションReadFromIcCardのプログラム:

POUヘッダ

POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。POUヘッダは全プログラム言語で使用できます。

	VAR_INPUT
		p32Pointer: POINTER32;
			(*area, offset and size of data values*)
		diPosition: DINT:=0;
			(*beginning position from which the data should be read from the IC card*)
	END_VAR
	VAR_OUTPUT
		p32ActualPosition: POINTER32;
			(*shows the area, offset and size where the data of the IC card is stored*)
	END_VAR
	VAR
	END_VAR

POUボディ

呼び出しプログラムから転送されてきた変数AreaOffsetのメモリエリアがDTまたはFLエリアにあれば(変数p32Pointerのアドレスは、コンパイラによりDTまたはFLエリアに割り付けられているので)、ICカードの開始アドレスp32ActualPositionからデータが読み込まれます。読み込んだデータ変数のサイズがPositionに加算され、その値が呼び出しプログラムに返送されます。

LDボディ

	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_VARIN,,2,20,3,22,5,);
B(B_VARIN,,1000,20,4,22,6,);
B(B_VARIN,,awProcessDataToGet[0],10,5,12,7,);
B(B_CONTACT,,bGetData,5,2,7,4,R);
B(B_F,Size_Of_Var!,Instance,12,5,19,7,,?D?C);
B(B_F,E_ReadFromIcCard!,Instance,22,1,37,7,,?DEN?DBankNumber?DBankOffset?DDataNumberOfWords?AENO?CDataStartAddress);
B(B_F,Adr_Of_Var_O!,Instance,37,3,45,5,,?D?C);
B(B_VAROUT,,awProcessDataToGet,45,3,47,5,);
L(1,3,5,3);
L(19,6,22,6);
L(1,0,1,9);
L(7,3,22,3);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY
関連トピック

プロジェクトのサンプルは、FPWIN Pro CDに収納されています。インストール先の"Samples"フォルダから、以下のファイルを開いてください。

Read, write IC card (REAL, DUT, FP10SH, FP2SH)

Read, write shared memory (REAL, DUT, FP10SH, FP2SH, FP2)

最終修正日: 2021-11-09このページに関するフィードバックお問い合わせ窓口