| 묶음 | 블록 | 하는 일 |
|---|---|---|
| 준비 | INIT · HOME · SELECT efem|vac | 로봇 초기화 · 원점 · 어느 로봇을 움직일지 |
| Load Port | DOCK · DOOR OPEN · MAP | 도킹 · 문 열기 · 매핑 |
| 이동 | MOVE foup|aligner|ll|pm1|pm2 · SLOT n | 그 스테이션으로 회전만 · 높이(Z) 선택 |
| 팔 · 웨이퍼 | EXTEND · RETRACT · PICK · PLACE · ALIGN | 수동조작 버튼과 같다 |
| 진공 | ATM VALVE · TM VALVE · PUMP · VENT | 밸브는 누를 때마다 열림/닫힘이 바뀐다(토글) |
| 흐름 | WAIT 2 · CHECK wafer|vacuum|door | 2초 대기 · 조건이 아니면 시퀀스를 멈춘다 |
| 수동조작에서 한 일 | 블록 |
|---|---|
| Rotate ◀ ▶ 로 스테이션 고르기 | MOVE aligner (몇 칸 도는지는 장비가 계산) |
| ▲ ▼ 로 칸 고르기 | SLOT 1 |
| Extend | EXTEND |
| Pick | PICK |
| Retract | RETRACT |
다음 MOVE 가 편 채 회전이 되어 ALM-201 로 멈춥니다. 블록에서도 "접고 → 돌고 → 편다"는 그대로입니다.
PICK · PLACE 가 ALM-203(팔이 전진하지 않았습니다)으로 멈춥니다.
두 번 넣어도 알람이 나지 않습니다. 밸브 블록은 다릅니다 — 토글이라 두 번 넣으면 닫힙니다.
팔 이동 · 회전 · ALIGN(정렬 완료까지) · PUMP(목표 진공까지) · VENT(대기압까지)는 끝나야 다음 블록으로 넘어갑니다. 한 블록당 최대 12초까지 기다립니다.
조건이 아니라 2초를 기다립니다. 장비가 스스로 기다리는 곳에 또 넣으면 시간만 늘어납니다.
CHECK wafer(손에 웨이퍼) · CHECK vacuum(Load Lock 1 Torr 미만) · CHECK door(문 열림). 조건이 맞으면 통과, 아니면 SEQ-002 로 시퀀스를 세웁니다.
동작 로봇 · Load Port
진공 · 확인 밸브 · PUMP · CHECK
| 블록에서 흔한 실수 | 멈추는 알람 | 고치기 |
|---|---|---|
| RETRACT 없이 MOVE | ALM-201 | MOVE 앞에 RETRACT |
| EXTEND 없이 PICK · PLACE | ALM-203 | 앞에 EXTEND |
| ATM VALVE 안 열고 Load Lock 으로 EXTEND | ALM-303 | MOVE ll 전후에 ATM VALVE |
| ATM VALVE 를 한 번만 넣고 PUMP | ALM-308 | 배기 전에 한 번 더 넣어 닫는다(토글) |
| CHECK 조건 불만족 | SEQ-002 | 앞 블록이 정말 끝났는지 — 압력 · 손 · 문 |
| 로봇이 갈 수 없는 스테이션으로 MOVE | SEQ-001 | SELECT 로 로봇을 먼저 바꾼다 (pm1 · pm2 는 진공 로봇) |
시퀀스는 처음 블록부터 다시 돕니다. 장비는 멈춘 그 상태 그대로이므로, 필요하면 챕터를 다시 눌러 초기화하거나 수동으로 되돌린 뒤 실행하세요. DOCK · DOOR OPEN 은 이미 되어 있으면 건너뛰지만, 밸브 블록은 토글이라 상태에 따라 결과가 달라집니다.
"웨이퍼 집음" → "정렬 완료" → "LL 안착"처럼, 각 블록이 상태를 한 칸 전진시킵니다.
다음 상태로 가려면 센서 조건이 충족돼야 합니다 — CHECK 블록이 그 문지기입니다.
한 손이 새 웨이퍼를 집는 사이 다른 손이 완료품을 빼내, 시간을 겹칩니다(5강 "손이 둘"의 자동화 버전).
팔이 하나라 손을 겹칠 수는 없지만, 챔버 두 개를 겹쳐 돌리는 것은 15강 과제 ③에서 프로그램으로 합니다.
name 이름 · vars 변수의 처음 값 · body 실행할 줄의 목록. 줄 하나는 {"op": "명령"} 이고, 인자가 있으면 arg 를 붙입니다.
vars 에 {"slot": 1} 로 만들어 두면 "$slot" 으로 씁니다. SET 으로 값을 바꿉니다 — {"op":"SET","var":"slot","value":"$slot + 1"}.
| 구분 | 쓰는 것 |
|---|---|
| 준비 | INIT · HOME · DOCK · DOOR OPEN|CLOSE · MAP |
| 이동 | SLOT n · MOVE foup|aligner|ll|pm1|pm2 · EXTEND · RETRACT |
| 취급 | PICK · PLACE · ALIGN |
| 진공 | VALVE ATM|TM OPEN|CLOSE · PUMP · VENT |
| 흐름 | REPEAT · WHILE · IF · SET · BREAK |
| 읽기 | slotHas(n) · pressure() · door() · wafer() · extended() … |
슬롯 1 이송 열여덟 줄 · 슬롯 2 이송 열여덟 줄 · 슬롯 3 이송 열여덟 줄. 쉰네 줄이고, 한 곳을 고치면 세 곳을 고쳐야 합니다. 스텝 수로 드러납니다.
몸통은 한 벌만 쓰고 REPEAT 으로 감쌉니다. 칸 번호는 $slot 이 들고 있다가 한 바퀴 끝에서 SET 으로 하나 올립니다.
| 줄 | 뜻 |
|---|---|
| "vars": {"slot": 1} | 슬롯 번호를 1에서 시작 |
| {"op":"REPEAT", "count":3, | 아래 몸통을 세 번 |
| "body":[ … ]} | 반복할 내용 한 벌 |
| {"op":"SLOT","arg":"$slot"} | 지금 칸을 겨냥 |
| {"op":"SET","var":"slot", | 한 바퀴 끝에 칸을 하나 올림 |
| "value":"$slot + 1"} |
동작 블록 사이에 CHECK 를 넣는 이유는?
→ 앞 동작이 정말 끝났는지(손 · 압력 · 문) 확인하고, 아니면 거기서 멈춰 더 큰 사고를 막으려고.
MOVE aligner 바로 뒤에 PLACE 를 넣었더니 멈췄습니다. 빠진 블록은?
→ EXTEND. 없으면 ALM-203.
ATM VALVE 블록을 두 번 넣는 이유는?
→ 토글이라 한 번은 열고 한 번은 닫는다. 닫지 않으면 PUMP 가 ALM-308.