Beckhoff TwinCAT/ADS
ADS (Automation Device Specification) 는 독일 Beckhoff 의 TwinCAT 런타임이 사용하는 통신 규약입니다. TwinCAT 2 / 3 가 동작하는 산업용 PC (IPC) 와 EtherCAT 마스터 환경에서 주로 쓰입니다.
자동차 라인 / 반도체 / 풍력 / 모션 컨트롤 등 PC-기반 제어 환경이라면 십중팔구 ADS 입니다.
등록 폼 입력값
| 입력 칸 | 무엇을 적나요 | 예시 |
|---|---|---|
| IP 주소 | TwinCAT 가 동작하는 IPC 의 IP | 192.168.0.80 |
| 포트 | ADS TCP 포트 | 48898 (표준 / 변경 비추천) |
| Target AMS NetId (target-netid) | 대상 IPC 의 AMS NetId — 비우면 IP주소.1.1 자동 | 192.168.0.80.1.1 |
| Target AMS 포트 (target-port) | TwinCAT 런타임 포트 | 851 (TwinCAT 3 PLC) / 801 (TwinCAT 2 PLC1) |
그 외 옵션: source-netid / source-port (게이트웨이 측 AMS 식별자 — 기본 32905),
connect-timeout / read-timeout (ms, 기본 3000). 옛 옵션 키 표기
(ams-net-id / ams-port / target-ams-net-id / timeout-request) 는 폐기되었습니다.
AmsNetId 형식
a.b.c.d.1.1 형태로 6 옥텟. 보통 IPC 의 IP 주소 뒤에 .1.1 을 붙인 값이지만 TwinCAT System Manager 에 표시된 NetId 가 정답 입니다. 위치는 시스템 트레이의 TwinCAT 아이콘 → Properties → AMS NetId.
Route 등록 (필수)
ADS 는 양쪽이 서로의 NetId 를 알고 있어야 통신합니다. 게이트웨이가 PLC 를 처음 호출하면 PLC 측에서 Add Route Dialog 가 뜨거나 자동으로 거부됩니다. TwinCAT System Manager → Routes → Add 에서 게이트웨이 IP / NetId 를 추가하고 TwinCAT 라이센스가 valid 한지 확인하세요.
TwinCAT 3 의 경우 30 일 평가판이 만료되면 ADS 응답이 끊깁니다. License Manager 에서 라이센스 상태를 먼저 점검하세요.
태그의 PLC 주소 표기
ADS 는 두 가지 접근 방식을 지원합니다.
1. 메모리 영역 직접 (Indexed)
| 표기 | 의미 |
|---|---|
M0:4 | 메모리 영역 (M%) offset 0, 4 byte |
I0:2 | 입력 영역 offset 0, 2 byte |
Q0:2 | 출력 영역 offset 0, 2 byte |
<영역>:<offset>:<size> 형식. size 는 byte 단위.
2. 심볼릭 (Symbolic)
| 표기 | 의미 |
|---|---|
MAIN.fCounter | MAIN 프로그램의 fCounter 변수 |
MAIN.fCounter:REAL | 자료형 명시 (32-bit 실수) |
GVL.bRunning:BOOL | Global Variable List 의 bRunning |
심볼릭 표기는 PLC 측에 TPY (TwinCAT 2) 또는 심볼 다운로드 (TwinCAT 3 → Build → Activate Configuration) 가 되어 있어야 합니다.
데이터 형식 매칭
| PLC 의 값 | 데이터 형식 | 형식 보조 | PLC 주소 예 |
|---|---|---|---|
| BOOL | Boolean | (비움) | GVL.bRunning:BOOL |
| BYTE / SINT | Integer | B | MAIN.bByte:BYTE |
| INT (16-bit) | Integer | (비움) | MAIN.nCount:INT |
| DINT (32-bit) | Integer | DW | MAIN.nTotal:DINT |
| REAL (32-bit 실수) | Float | REAL | MAIN.fTemp:REAL |
| LREAL (64-bit 실수) | Double | LREAL | MAIN.fPos:LREAL |
| STRING(80) | String | STR[80] | MAIN.sName:STRING |
흔한 문제와 해결
| 증상 / 메시지 | 가능한 원인 | 해결 |
|---|---|---|
| “No route to host” | Route 미등록 | TwinCAT System Manager → Routes 에서 게이트웨이 추가 |
| “Target port not found” | AmsPort 가 시리즈와 불일치 | TC2 = 801, TC3 = 851 재확인 |
| “Symbol not found” | 심볼 다운로드 미실행 | TwinCAT 3 에서 Activate Configuration 후 재시도 |
| 모든 값 0 | TwinCAT 가 RUN 이 아닌 STOP / CONFIG 모드 | System Manager 에서 RUN 으로 전환 |
| 라이센스 오류 | 평가판 만료 | License Manager 에서 라이센스 갱신 |
자주 쓰는 예시
| 태그 이름 | PLC 주소 | 데이터 형식 | 형식 보조 |
|---|---|---|---|
| 운전중 플래그 | GVL.bRunning:BOOL | Boolean | (비움) |
| 카운터 | MAIN.nCount:DINT | Integer | DW |
| 온도 | MAIN.fTemp:REAL | Float | REAL |
| 배치 이름 | MAIN.sBatch:STRING | String | STR[80] |
더 자세한 예제 / 자동화 등록
고급 — REST API 의 ADS 예제를 참고하세요.