사용자가 프로젝트 또는 유저 라이브러리에서 만든 펑션블럭의 경우, 하위 프로그램은 컴파일된 프로그램에서 생성됩니다. 로드할 때마다 클래스 VAR_INPUT 및 VAR_IN_OUT의 입력 파라미터가 우선적으로 전송됩니다. 그런 다음 해당 하위 프로그램으로 이동합니다. 마지막으로 클래스 VAR_OUTPUT 및 VAR_IN_OUT의 출력 파라미터가 다시 읽힙니다. 하위 프로그램 또는 펑션블럭 번호를 컨트롤러 형식에 따라 정의될 수 있습니다.
펑션블럭에는 "메모리"가 있습니다. 즉, 로드 시 이 펑션블럭의 엔트리마다 데이터 영역과 하위 프로그램이 할당됩니다. 그러면 펑션블럭의 모든 엔트리가 하위 프로그램을 사용합니다. 인덱스 레지스터를 통해 각 엔트리에 유효한 데이터 영역이 액세스됩니다.
이 구현을 통해 특히 같은 사용자 정의 펑션블럭을 자주 사용하는 경우에 프로그램 메모리의 사용 가능한 공간을 상당수 절약할 수 있습니다. 하지만 인덱스 레지스터를 통해 데이터 영역에 액세스하면 스캔 타임이 늘어날 수 있습니다.
일부 컨트롤러를 통해 [펑션블럭을 인덱스 수식합니다] 옵션을 활성화할 수 있습니다.
아래에 있는FB 인덱싱을 통해 일부 기본 펑션이 같은 주기 내에 여러 번 호출되면 올바르게 작동하지 않습니다. 다음 코멘트가 있는 에러 메시지가 표시됩니다.
카운터: F118_UDC, F166_HighSpeedCounter_Set, F167_HighSpeedCounter_Reset, F168_PulseOutput_Home
시프트 명령: F119_LRSR