← 로봇 통신 강의 목록으로
🤖
통신 기초
통신 기초 · 선수: 01강

02. I/O 통신

I/O 통신은 전선 한 가닥을 ON/OFF 시켜 로봇과 상대 장비(PLC·머신·센서)가 신호를 주고받는 가장 기본적인 통신입니다. 로봇이 출력($DO)을 켜면 상대가 입력으로 읽고, 상대가 응답을 켜면 로봇이 입력($DI)으로 읽는 핸드셰이크가 모든 자동화의 기초 패턴입니다. HIWIN 로봇 I/O 5종을 정리하고, 픽앤플레이스 한 사이클의 그립/언그립 핸드셰이크를 순수 Python 상태기계로 재현합니다.

I/O핸드셰이크$DO$DIWAIT FOR픽앤플레이스
소요 시간
약 1시간
난이도
📊 초급
선수 조건
🎯 01강
결과물
I/O 5종(DI/O·SI/O·FI/O·RI/O·MI/O)을 구분하고, $DO 출력 → 상대 응답 → WAIT FOR $DI 핸드셰이크를 상태기계로 구현할 수 있습니다.

이 강의에서 배우는 것

  • 1HIWIN 로봇의 I/O 5종을 구분하고 채널 수·변수를 안다
  • 2$DO[n]=TRUE 출력과 WAIT FOR $DI[n]==TRUE 대기로 핸드셰이크를 설계한다
  • 3FI/O 기본 매핑(Start/Hold/Stop/Enable, Run/Held/Fault/Ready)을 읽는다
  • 4픽앤플레이스 두 핸드셰이크(그립·언그립)를 Python 상태기계로 재현한다

소개

"전선 한 가닥 = 신호 1개". 로봇이 출력($DO)을 ON 하면 상대가 입력으로 읽고, 상대가 응답을 ON 하면 로봇이 입력($DI)으로 읽습니다. 이 주고받기(핸드셰이크)가 핵심입니다. 물리 배선·포트 없이 PC 한 대로 로직을 손에 익힙니다.

핵심 개념

1) I/O 5종 한눈에 보기

종류변수채널(6축)비고
DI/O 디지털$DI/$DO24I/24OPLC·머신·센서 일반 신호
SI/O 필드버스$SI/$SO128I/128OCC-Link/Profinet/EtherNet/IP 옵션 카드
FI/O 기능(고정)8I/8OStart·Hold·Stop·Enable·RSR
RI/O 로봇$RI/$RO6I/4O말단 배선. SCARA·Delta 불가
MI/O 모듈$MI/$MO32I/32O여러 I/O를 묶어 감시
⚠️

채널 수는 모델마다 다릅니다. 위 숫자는 6축 관절로봇(RA605 등) 기준이며 반드시 해당 로봇·컨트롤러 매뉴얼을 확인하세요.

2) 입출력 명령과 FI/O 매핑

출력은 `$DO[n]=TRUE/FALSE`, 입력 대기는 `WAIT FOR $DI[n]==TRUE`(조건이 참이 될 때까지 그 줄에서 멈추는 블로킹). 기능 I/O는 핀에 고정 기능이 있습니다: $SI[1]=Start·[2]=Hold·[3]=Stop·[4]=Enable·[5~8]=RSR / $SO[1]=Run·[2]=Held·[3]=Fault·[4]=Ready·[5~8]=ACK.

3) CN6 결선(NPN)

디지털 I/O는 컨트롤러 CN6 포트에서 단자대로 빠져나와 PLC·센서와 연결됩니다. 입력·출력 모두 NPN(싱크) 방식 — 신호선이 0V(GND)로 떨어질 때 ON. PNP 장비와 섞으면 동작하지 않으니 결선 방식을 맞춰야 합니다.

핵심 예제

물리 I/O는 PC로 못 만들므로, 로봇과 PLC가 신호를 주고받는 로직을 순수 Python 상태기계로 재현합니다(신호는 딕셔너리로 흉내).

python
def handshake(do_pin, do_value, di_pin):
    robot_set_do(do_pin, do_value)   # $DO[n]=TRUE/FALSE
    plc_respond(do_pin, di_pin)      # 잠시 뒤 $DI[n]=TRUE 응답
    robot_wait_for(di_pin)           # WAIT FOR $DI[n]==TRUE

handshake(do_pin=6, do_value=True,  di_pin=1)  # GRIP   → $DI[1] 그립완료
handshake(do_pin=6, do_value=False, di_pin=4)  # UNGRIP → $DI[4] 언그립완료
ℹ️

실장비(HRSS)에서 이 두 핸드셰이크는 PTP/LIN 이동 사이에 들어가는 픽앤플레이스 프로그램의 일부입니다. P1/P3은 P2/P4 위 +50mm 접근점으로 워크피스에 수직 접근해 충돌을 막습니다.

자주 하는 실수

Q. WAIT FOR 에서 멈추지 않고 바로 통과해요.

A. 입력이 항상 ON으로 고정된 경우입니다(보통 NPN/PNP 결선 반대). CN6 결선을 NPN(싱크)으로 맞추고, 코드에서는 다음 핸드셰이크 전에 해당 $DI 비트를 False 로 초기화하세요.

Q. $DO 를 ON 해도 상대가 반응이 없어요.

A. 출력 채널·번호 오타이거나 외부 24V 전원 미인가입니다. 채널 번호와 단자대 전원을 점검하세요.

Q. $RI/$RO 또는 $SI/$SO 가 없다는 오류가 나요.

A. RI/O는 SCARA·Delta 미지원이라 DI/O·MI/O로 대체합니다. SI/O는 Fieldbus 옵션 카드가 장착돼야 동작합니다.

정리

  • I/O 5종(DI/O·SI/O·FI/O·RI/O·MI/O)의 변수·채널·명령을 익혔다
  • $DO 출력 → 상대 응답 → WAIT FOR $DI 핸드셰이크가 모든 자동화의 기본 패턴
  • FI/O는 핀 고정 기능(Start/Hold/Stop/Enable, Run/Held/Fault/Ready)
  • 다음 Modbus 편부터는 이 신호를 코일·레지스터 비트로 소프트웨어끼리 교환한다

과제

  1. 픽앤플레이스 사이클을 main.py 로 실행해 GRIP/UNGRIP 두 핸드셰이크가 순서대로 도는지 확인
  2. $DI 초기화를 빼면 WAIT FOR 가 즉시 통과하는 현상을 재현하고 원인 설명
  3. FI/O 매핑표에서 Start/Enable/Ready 가 각각 몇 번인지 적기
예제 코드 / 강의 자료

전체 강의 자료와 예제 코드(시뮬레이터·과제·정답 포함)는 GitHub에서 자유롭게 받아볼 수 있습니다.

GitHub에서 보기 ↗