PLC 프로그램을 효율적으로 설계하기 위해 포인터 P로 지정한 서브루틴 프로그램을 콜 명령어를 이용해서 호출하는 경우가 많습니다.
보통의 경우는 같은 POU 프로그램 내부에 포인터 P를 지정하여 서브루틴을 호출할것입니다.
그럼 같은 기능의 서브루틴을 POU 프로그램 별로 복사를 해야하는가? 꼭 그렇지만은 않습니다.
다른 POU 폴더에서 정의된 서브루틴을 호출하는 두가지 방법에 대해서 알아봅니다.
< 예제 #1 ECALL 명령펑션을 이용하는 방법 >


우선 FUNC POU폴더를 하나 만들어 두개의 간단한 함수형 서브루틴을 정의합니다.
덧셈 서브루틴(P0) 과 뺄셈 서브루틴(P1) 두개를 정의합니다.
P0 을 호출하면 인수1 과 인수2를 덧셈하여 인수3 으로 리턴값을 줄것입니다.
P1 을 호출하면 인수1 과 인수2를 뺄셈하여 인수3 으로 리턴값을 줄것입니다.

ECALL 명령어를 이용하여 "FUNC" POU 프로그램 폴더에 정의된 P0을 호출하여 인수1, 인수2, 인수3 각각 상수값과 디바이스를 지정합니다.

잘 동작하네요.
< 예제 #2 공통포인터 P 를 파라미터에서 지정하는 방법 >
PLC 파라미터에서 PLC System -> Common Pointer No. 옵션을 지정하는 방법입니다.
공통 포인터로 지정한 서브루틴은 다른 POU에서도 호출할수 있게 됩니다.

예제에서는 4000번대 정도로 뒷번호지정하여 봅니다.
이제 포인터(P) 4000 ~ 4095 까지 지정한 서브루틴 프로그램은 글로벌 펑션이 되어 다른 POU 폴더에서 호출하더라도 정상적으로 동작하는 서브루틴이 됩니다.

동일한 덧셈펑션과 뺄셈펑션을 P4000, P4001 로 만들고 이번엔 CALL 로 호출해봅니다.

잘 동작하네요.
< 예제 전체 로직 >
[ MAIN POU ]

[ FUNC POU ]

'PLC 전기제어 기술자료 > 프로그램 기술자료' 카테고리의 다른 글
| [미립자팁] 원주율 파이(3.141592...) 를 구하는 방법 (0) | 2025.03.17 |
|---|---|
| [MELSEC] Q 시리즈 에서 PID 제어를 하는 두가지 예제 (2) | 2023.07.18 |
| [MELSEC] (미립자팁) 선택 영역의 접점 어드레스 일괄 변경 (0) | 2022.05.19 |
| [MELSEC] (미립자팁) CPU 용량이 부족할 때 급하게 응급조치할 만 한 방법 (4) | 2022.02.25 |
| [MELSEC] PLC에서 스톱워치를 구현하는 두가지 방법 (0) | 2022.02.24 |
| [MELSEC] (미립자팁) 랜덤값을 음수를 포함하여 얻는 방법 (-32768 ~ 32767) (0) | 2022.02.19 |
| 미쓰비시 PLC 문자열 분리: INSTR/MIDR로 콤마 데이터 파싱하기 (4) | 2022.01.22 |
| GX Works2 스테이트먼트 활용법: 래더 가독성 높이는 5가지 정리 (0) | 2022.01.22 |