콘텐츠로 이동

나만의 블록 / 서브루틴

자주 쓰는 카드 묶음을 나만의 블록 (서브루틴) 으로 정의해두고, 다른 곳에서 호출하여 재사용할 수 있습니다. PLC 의 함수 블록 (FB) 개념과 동일합니다.

무엇을 하는 단계인가요?

같은 카드 묶음을 흐름의 여러 곳에서 반복 사용해야 할 때, 한 번 정의해두고 카드 1개로 호출합니다. 흐름이 짧아지고 변경 시 한 곳만 수정하면 됩니다.

언제 사용하나요?

  • 픽 앤 플레이스 동작 (이동 → 그리퍼 → 이동) 을 여러 번 반복할 때
  • 같은 안내 메시지를 여러 단계에서 표시할 때
  • 색상별 분류 동작을 묶어 한 번에 호출할 때
  • 학생 코드를 깔끔하게 정리하고 싶을 때

카드 종류

  • 블록 정의


    나만의 블록 만들기 (열기) · 나만의 블록 끝 (닫기)

    재사용할 카드 묶음 정의

  • 블록 호출


    나만의 블록 실행

    정의해둔 블록을 실행

  • 조기 반환


    값 돌려주기

    블록 실행을 중간에 종료

블록 구조

[블록 정의 영역]
나만의 블록 만들기 (이름: my_pick_place)
  ├─ 로봇 이동 (A)
  ├─ 그리퍼 닫기
  ├─ 1초 기다리기
  ├─ 로봇 이동 (B)
  └─ 그리퍼 열기
나만의 블록 끝

[메인 흐름]
시작
나만의 블록 실행 (my_pick_place)   ← 1번째 호출
3초 기다리기
나만의 블록 실행 (my_pick_place)   ← 2번째 호출 (같은 동작 반복)
종료

카드 사용법

나만의 블록 만들기 (블록 열기)

블록 이름을 정하고, 안에 재사용할 카드들을 둡니다.

  • 파라미터: 블록 이름 (기본 myRoutine) — 예: pick_place, red_route, start_message
  • 위치: 흐름 어디에 두든 OK (실행 시점에 자동 등록됨)

블록 이름 규칙

영문·숫자·밑줄 사용 권장. 블록 호출 시 정확히 같은 이름을 입력해야 합니다.

나만의 블록 끝 (블록 닫기)

  • 파라미터: 없음
  • 사용: 나만의 블록 만들기 의 짝

나만의 블록 실행 (호출)

정의해둔 블록을 실행합니다.

  • 파라미터: 블록 이름 (정의한 이름과 정확히 일치)
  • 동작: 카드 1개로 정의된 블록 전체 실행 → 완료 후 다음 카드 진행

값 돌려주기 (조기 반환, 선택)

블록 실행을 중간에 종료합니다.

  • 파라미터: 반환 값 (기본 0)
  • 사용: 블록 안의 IF 조건에서 조기 종료가 필요할 때

사용 예시

예시 1 — 픽 앤 플레이스 반복 사용

블록 정의:

나만의 블록 만들기 (pick_place)
  ├─ 로봇 이동 (A)
  ├─ 그리퍼 닫기
  ├─ 1초 기다리기
  ├─ 로봇 이동 (B)
  └─ 그리퍼 열기
나만의 블록 끝

메인 흐름:

시작
LOOP 5회
  ├─ 컨베이어 켜기
  ├─ 센서 감지 대기 (IR1)
  ├─ 컨베이어 끄기
  └─ 나만의 블록 실행 (pick_place)   ← 5번 반복하지만 카드는 1개
LOOP 끝
종료

예시 2 — 색상별 분류 동작 분리

블록 정의:

나만의 블록 만들기 (sort_red)
  ├─ 로봇 이동 (A)
  ├─ 그리퍼 닫기
  ├─ 로봇 홈으로
  └─ 그리퍼 열기
나만의 블록 끝

나만의 블록 만들기 (sort_blue)
  ├─ 로봇 이동 (B)
  ├─ 그리퍼 닫기
  ├─ 로봇 홈으로
  └─ 그리퍼 열기
나만의 블록 끝

메인 흐름:

색깔 확인
만약 빨간색이면
  └─ 나만의 블록 실행 (sort_red)
아니면 파란색이면
  └─ 나만의 블록 실행 (sort_blue)
만약 끝

분류 동작 변경 시 블록 정의만 수정하면 모든 호출에 자동 반영됩니다.

예시 3 — 시작·종료 메시지 묶기

나만의 블록 만들기 (greet_start)
  ├─ 효과음 (성공)
  ├─ 메시지 보내기 ("자동화 시작")
  └─ 말하기 ("작업을 시작합니다")
나만의 블록 끝

나만의 블록 만들기 (greet_end)
  ├─ 효과음 (완료)
  ├─ 메시지 보내기 ("작업 완료")
  └─ 말하기 ("작업이 끝났습니다")
나만의 블록 끝

시작 → 나만의 블록 실행 (greet_start)
[작업 카드들]
나만의 블록 실행 (greet_end) → 종료

자주 발생하는 문제

나만의 블록 실행이 동작 안 함
  1. 블록 이름이 정확히 일치하는지 확인 (대소문자·공백 구분)
  2. [나만의 블록 만들기] 와 [나만의 블록 끝] 카드가 짝으로 있는지 확인
  3. 블록 정의가 메인 흐름보다 나중 에 있어도 동작하지만, 같은 흐름 안에 있어야 함
블록 안에서 변수 사용 시 주의

블록 안의 변수는 메인 흐름과 공유 됩니다. 블록 안에서 변수 변경하면 메인 흐름의 변수도 바뀝니다. 충돌 주의.

블록 안에서 다른 블록 호출 (재귀) 가능?

가능하지만 무한 재귀 위험이 있어 권장하지 않습니다. 다른 블록 호출이 필요하면 호출 깊이를 작게 유지하세요.

강사 팁

코드 정리 학습 도구

학생이 같은 카드 묶음을 반복하기 시작하면 "이걸 나만의 블록으로 만들 수 있어요" 라고 안내하세요. 재사용·추상화 라는 프로그래밍 핵심 개념을 자연스럽게 학습합니다.

블록 이름은 동작 위주로

block1, routine_a 같은 이름보다 pick_place, sort_red 처럼 동작이 보이는 이름 권장. 학생이 흐름을 다시 봤을 때 이해하기 쉽습니다.

PLC 함수 블록 (FB) 학습 연결

이 카드는 IEC 61131-3 의 FUNCTION_BLOCK 과 동일한 개념입니다. 산업 PLC 학습 단계로 자연스럽게 연결됩니다.

다음 단계

서브루틴까지 익혔다면 AI 비전 카드 → 로 AI 모델을 활용한 자동화로 확장합니다.


이 페이지에 빠진 내용이나 잘못된 부분을 발견하시면 페이지 하단 📮 피드백 보내기 를 활용해 주세요.