プロジェクトまたはライブラリ中のユーザー定義ファンクションは、コンパイルされるとサブルーチンプログラムに変換されます。これらを読み出すたびに、クラス"VAR_INPUT"と"VAR_IN_OUT"の入力パラメータが転送されます。それから対応するサブルーチンプログラムにジャンプします。最後に、クラス"VAR_OUTPUT"と"VAR_IN_OUT"の出力パラメータが読み出されます。使用できるサブルーチン数やファンクション数は、PLC機種により異なります。
ユーザー定義ファンクションは、ひとつのサブルーチンとして生成されます。ユーザー定義ファンクションは、プログラムのどの位置からも呼び出すことができます。
以下の例では、変換後のプログラムコードを分かりやすく表示するために、FPアドレスで表示しています。実際のプログラムでは、プログラムを簡素化するため、任意の変数名を使用することをお奨めします。
ラダーダイヤグラム中でユーザー定義のファンクション"User_ADD"を呼び出す場合:
ユーザー定義ファンクションの内容:
下記のプログラムコードが生成されます。
ST |
R9010 |
入力パラメータの転送 |
|
F0 |
(*MV*) |
R9010 常時 = TRUE |
|
DT0 |
DT0 -> User_ADD.In1 |
||
DT550 |
|||
F0 |
(*MV*) |
||
DT1 |
DT1 -> User_ADD.In2 |
||
DT551 |
|||
CALL |
0 |
User_ADDサブルーチンの読み出し |
|
ST |
R9010 |
出力パラメータの再読み出し |
|
F0 |
(*MV*) |
||
DT552 |
|||
DT2 |
User_ADD -> DT2 |
||
... |
|||
ED |
主プログラムのEnd |
||
SUB |
0 |
User_ADDサブルーチン |
|
ST |
R9010 |
||
F22 |
(*PLUS_S*) |
||
DT550 |
|||
DT551 |
|||
DT552 |
if (TRUE) |
||
UserAdd=UserAdd.In1 + UserAdd.In2 |
|||
RET |
主プログラムへの復帰 |