사용자가 프로젝트 또는 유저 라이브러리에서 만든 펑션의 경우, 하위 프로그램은 컴파일된 프로그램에서 생성됩니다. 로드할 때마다 클래스 VAR_INPUT 및 VAR_IN_OUT의 입력 파라미터가 우선적으로 전송됩니다. 그런 다음 해당 하위 프로그램으로 이동합니다. 마지막으로 클래스 VAR_OUTPUT 및 VAR_IN_OUT의 출력 파라미터가 다시 읽힙니다. 하위 프로그램 또는 펑션 번호를 컨트롤러 형식에 따라 정의될 수 있습니다.
사용자 정의 펑션의 경우, 하위 프로그램만 생성되며, 다양한 지점에서 로드될 수 있습니다.
다음 예에서는 프로그램에서 생성된 어셈블러 코드 확인을 용이하게 하기 위해 FP 어드레스를 사용합니다. FP 어드레스를 사용하면 프로그램이 더욱 복잡해지므로, 일반 사용에 대한 의미 있는 이름을 가진 변수를 사용하는 것이 좋습니다.
사용자 정의 펑션 User_ADD는 사다리 다이어그램에서 로드됩니다.
다음 콘텐츠가 있습니다.
PLC의 경우, 다음 어셈블러 코드가 생성됩니다.
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 |
주 프로그램 끝 |
||
SUB |
0 |
User_ADD 하위 프로그램 |
|
ST |
R9010 |
||
F22 |
(*PLUS_S*) |
||
DT550 |
|||
DT551 |
|||
DT552 |
(TRUE)인 경우 |
||
UserAdd=UserAdd.In1 + UserAdd.In2 |
|||
RET |
주 프로그램으로 뒤로 이동 |