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 전기제어 기술자료 > 샘플 프로그램 & TIP' 카테고리의 다른 글
[PROFACE] 스크립트를 활용한 I/O 모니터링 화면 샘플 (1) | 2024.01.26 |
---|---|
[MELSEC] Q 시리즈 에서 PID 제어를 하는 두가지 예제 (0) | 2023.07.18 |
[MELSEC] (미립자팁) 선택 영역의 접점 어드레스 일괄 변경 (0) | 2022.05.19 |
[MELSEC] (미립자팁) CC-LINK IE CONTROL 통신으로 인해 스캔타임이 느릴때 조치할만한 방법 (고정주기스캔설정) (0) | 2022.05.14 |
[MELSEC] (미립자팁) CPU 용량이 부족할 때 급하게 응급조치할 만 한 방법 (4) | 2022.02.25 |