プロジェクトまたはライブラリ中のユーザ定義ファンクションブロックは、コンパイルされるとサブルーチンプログラムに変換されます。これらを読み出すたびに、クラスVAR_INPUTとVAR_IN_OUTの入力パラメータが転送されます。それから対応するサブルーチンプログラムにジャンプします。最後に、クラスVAR_OUTPUTとVAR_IN_OUTの出力パラメータが読み出されます。使用できるサブルーチン数やファンクションブロック数は、PLC機種により異なります。
ファンクションブロックはメモリを持っています。したがって、ファンクションブロックが読み出すとき、データエリアとサブルーチンプログラムを割り当てます。登録されたファンクションブロックは、同じサブルーチンプログラムを使用します。インデックスレジスタの内容に従って、それぞれのファンクションブロックからアクセスされます。
この機能を使用することにより、プログラムメモリを効率的に使用することができます。特に、同じユーザー定義ファンクションブロックを頻繁に利用する場合に便利です。ただし、インデックスレジスタを使用し、データエリアにアクセスするため、相対的にスキャンタイムが長くなります。
いくつかのコントローラでは、「ファンクションブロックをインデックス修飾する」のオプションを次のようにして有効化できます。
インデックス付きFBで、1スキャンの間に何度も呼び出される場合、正常に動作しないものがあります。以下の命令の場合、エラーメッセージが表示されます。
カウンタ命令: F118_UDC、F166_HighSpeedCounter_Set、F167_HighSpeedCounter_Reset、F168_PulseOutput_Home
シフト命令: F119_LRSR