PLC/프로그래밍 및 명령어 활용

복잡한 래더 로직을 깔끔하게! 서브루틴 설계와 FEND 명령어의 중요성

기계의 심장 박사 2026. 3. 20. 00:52
반응형

 

[PLC 프로그램의 효율적 설계, 점프와 서브루틴] 방대한 래더 프로그램을 체계적으로 관리하는 핵심 기법! JMP 명령어로 특정 구간을 건너뛰고, 서브루틴으로 반복되는 로직을 모듈화하는 방법을 배워보세요.

 

PLC 프로그램이 커지다 보면 모든 로직을 한 줄로 쭉 나열하는 것이 불가능해집니다. "조건이 맞을 때만 이 구간을 실행해라" 혹은 "자주 쓰는 계산식은 따로 빼두고 호출해서 쓰자"와 같은 효율적인 구조가 필요하죠. 오늘은 프로그램의 흐름을 바꾸는 **CJ(점프)**와 **CALL(서브루틴)**에 대해 깊이 있게 알아보겠습니다! 😊

 

1. JMP(Jump): 특정 구간 건너뛰기 🦘

점프 명령어는 말 그대로 프로그램의 실행 순서를 강제로 특정 위치로 이동시키는 명령어입니다. 주로 CJ(Conditional Jump) 형태로 사용됩니다.

  • 🔹 동작 원리: 조건이 ON 되면 지정된 포인터(예: P10)로 즉시 점프합니다.
  • 🔹 특징: 점프한 구간 내에 있는 출력(OUT)은 이전 상태를 그대로 유지(Hold)하거나 업데이트되지 않습니다.
  • 🔹 용도: 특정 모드(수동/자동)에서 불필요한 연산을 제외하여 스캔 타임을 단축할 때 사용합니다.

 

2. 서브루틴(Subroutine): 필요할 때만 호출하기 📞

서브루틴은 자주 사용하는 로직을 별도의 방(Routine)에 넣어두고, 필요할 때마다 CALL 명령어로 불러와 실행하는 방식입니다.

  • 🔹 구조: 메인 프로그램 끝에 FEND를 두고, 그 아래에 서브루틴을 작성합니다.
  • 🔹 명령어: CALL P1으로 호출하고, 서브루틴 끝에는 반드시 SRET(Subroutine Return)를 써서 돌아와야 합니다.
  • 🔹 장점: 프로그램이 구조화되어 가독성이 좋아지고 유지보수가 쉬워집니다.

 

3. 실습: PLC 프로그램 흐름 제어 체험기 🕹️

점프와 서브루틴이 작동할 때 PLC 내부 스캔이 어떻게 변하는지 가상 시뮬레이터로 확인해 보세요.

프로그램 스캔 시뮬레이션

프로그램 실행 경로가 여기에 표시됩니다...

 

4. 실전 활용 사례: 설비 제어의 정석 🏭

✅ 점프(CJ)의 활용

설비에 '비상정지'가 발생했을 때, 무거운 연산이나 서보 제어 로직을 CJ 명령어로 통째로 건너뛰어 CPU 부하를 줄이고 안전 관련 로직만 빠르게 스캔하도록 설계합니다.

✅ 서브루틴(CALL)의 활용

동일한 규격의 '컨베이어 5대'를 제어할 때, 공통 제어 로직을 서브루틴 하나로 만들고 각 라인의 데이터만 바꿔가며 CALL하여 프로그램 길이를 1/5로 줄입니다.

 

5. 주의사항 및 설계 팁 ⚠️

  • FEND의 위치: 서브루틴을 사용할 때 메인 로직의 끝에 FEND 명령어를 넣지 않으면, PLC가 서브루틴까지 메인으로 착각하여 에러가 발생합니다.
  • 점프 구간 내 타이머: CJ 명령어로 타이머 구간을 점프하면 타이머가 멈추거나 동작이 꼬일 수 있으므로 주의해야 합니다.
  • 무한 루프 조심: 서브루틴 내에서 다시 자신을 CALL하거나 점프 위치를 잘못 잡으면 스캔 타임 에러(Watchdog Timer)가 발생할 수 있습니다.

 

📝 오늘 내용 요약

  • CJ(Jump): 조건 만족 시 특정 포인터로 건너뜀 (스캔 단축용)
  • CALL(Subroutine): 반복 로직을 분리하여 필요할 때만 호출 (가독성 향상)
  • SRET & FEND: 프로그램의 시작과 끝을 명확히 구분하는 약속

점프와 서브루틴은 초보와 중급자를 나누는 기준이 되기도 합니다. 오늘 배운 내용을 토대로 더 깔끔하고 체계적인 래더 프로그램을 설계해 보시길 바랍니다! 궁금한 점은 댓글로 남겨주세요. 😊

반응형