나만의 블록 / 서브루틴¶
자주 쓰는 카드 묶음을 나만의 블록 (서브루틴) 으로 정의해두고, 다른 곳에서 호출하여 재사용할 수 있습니다. 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 조건에서 조기 종료가 필요할 때
입력 파라미터 (블록에 값 건네기)¶
같은 동작인데 값만 다른 경우가 자주 있습니다. "A 자리로 가서 집기" 와 "B 자리로 가서 집기" 처럼요. 블록을 두 개 만들 필요 없이, 파라미터로 값을 건네면 하나로 해결됩니다.
파라미터 만들기¶
- [나만의 블록 만들기] 카드의 [편집] 을 눌러 나만의 블록 편집 창을 엽니다.
- 파라미터 이름 을 정합니다 (예:
목표위치,속도). - 기본값 을 입력합니다 — 호출 카드에서 값을 비워 두면 이 값이 쓰입니다.
- 블록 안의 카드에서 그 이름을 변수처럼 고르면 됩니다.
파라미터 쓰기¶
[나만의 블록 실행] 카드에 파라미터 칸이 나타납니다. 값을 채우면 그 값이, 비우면 기본값이 쓰입니다.
나만의 블록 만들기 (pick_at) 파라미터: 목표위치 = A, 대기 = 1
├─ 로봇 이동 (목표위치)
├─ 그리퍼 닫기
└─ N초 기다리기 (대기)
나만의 블록 끝
나만의 블록 실행 (pick_at) 목표위치 = A ← 대기는 비움 → 기본값 1 사용
나만의 블록 실행 (pick_at) 목표위치 = B, 대기 = 3
파라미터는 블록 안에서만 유효합니다
파라미터는 지역 변수로 다뤄집니다. 블록이 끝나면 원래 값으로 되돌아가므로, 메인 흐름에 같은 이름의 변수가 있어도 덮어쓰지 않습니다. 중첩·반복 호출에서도 앞선 호출의 값이 새어 나오지 않습니다.
일반 변수는 다릅니다
파라미터가 아닌 일반 변수는 메인 흐름과 공유됩니다. 블록 안에서 바꾸면 밖에서도 바뀝니다. 블록 안에서만 쓸 값이라면 파라미터로 만드세요.
값을 넘기려면 변수도 됩니다
파라미터 칸에 숫자·글자뿐 아니라 변수 이름도 넣을 수 있습니다. 넘기는 시점의 값이 전달됩니다.
블록 파일로 주고받기¶
만든 블록을 .factoblock.json 파일로 내보내고, 다른 PC·다른 수업에서 가져올 수 있습니다.
- 내보내기 — 블록을 파일 하나로 저장 (메모를 함께 남길 수 있습니다)
- 가져오기 — 저장한 파일을 불러와 바로 사용
로봇 위치가 들어 있는 블록은 주의
블록 안에 로봇 좌표가 들어 있으면 가져온 PC 의 교시 위치와 다를 수 있습니다. 보정 기준이 다르면 앱이 가져올 때 경고합니다 — 경고가 뜨면 위치를 다시 확인하고 저속으로 먼저 시험해 보세요.
사용 예시¶
예시 1 — 픽 앤 플레이스 반복 사용
블록 정의:
메인 흐름:
예시 2 — 색상별 분류 동작 분리
블록 정의:
나만의 블록 만들기 (sort_red)
├─ 로봇 이동 (A)
├─ 그리퍼 닫기
├─ 로봇 홈으로
└─ 그리퍼 열기
나만의 블록 끝
나만의 블록 만들기 (sort_blue)
├─ 로봇 이동 (B)
├─ 그리퍼 닫기
├─ 로봇 홈으로
└─ 그리퍼 열기
나만의 블록 끝
메인 흐름:
분류 동작 변경 시 블록 정의만 수정하면 모든 호출에 자동 반영됩니다.
예시 3 — 시작·종료 메시지 묶기
자주 발생하는 문제¶
나만의 블록 실행이 동작 안 함
정의한 이름과 호출한 이름이 한 글자라도 다르면 아무 일도 일어나지 않습니다. 오류도 나지 않고 그냥 건너뜁니다 — 초록불인데 아무것도 안 하는 상태가 되므로 가장 먼저 확인하세요.
- 블록 이름이 정확히 일치하는지 확인 (대소문자·공백 구분)
- [나만의 블록 만들기] 와 [나만의 블록 끝] 카드가 짝으로 있는지 확인
- 블록 정의가 메인 흐름보다 나중 에 있어도 동작하지만, 같은 흐름 안에 있어야 함
블록 안에서 변수 사용 시 주의
일반 변수는 메인 흐름과 공유됩니다. 블록 안에서 바꾸면 메인 흐름의 변수도 바뀝니다.
반면 파라미터는 지역 변수라 블록이 끝나면 되돌아갑니다. 블록 안에서만 쓸 값이라면 입력 파라미터 로 만드세요.
블록 안에서 다른 블록 호출 (재귀) 가능?
가능하지만 무한 재귀 위험이 있어 권장하지 않습니다. 다른 블록 호출이 필요하면 호출 깊이를 작게 유지하세요.
강사 팁¶
코드 정리 학습 도구
학생이 같은 카드 묶음을 반복하기 시작하면 "이걸 나만의 블록으로 만들 수 있어요" 라고 안내하세요. 재사용·추상화 라는 프로그래밍 핵심 개념을 자연스럽게 학습합니다.
블록 이름은 동작 위주로
block1, routine_a 같은 이름보다 pick_place, sort_red 처럼 동작이 보이는 이름 권장. 학생이 흐름을 다시 봤을 때 이해하기 쉽습니다.
PLC 함수 블록 (FB) 학습 연결
이 카드는 IEC 61131-3 의 FUNCTION_BLOCK 과 동일한 개념입니다. 산업 PLC 학습 단계로 자연스럽게 연결됩니다.
다음 단계¶
서브루틴까지 익혔다면 AI 비전 카드 → 로 AI 모델을 활용한 자동화로 확장합니다.
이 페이지에 빠진 내용이나 잘못된 부분을 발견하시면 페이지 하단 📮 피드백 보내기 를 활용해 주세요.