CANopen (기계장비 / 모션)
CANopen 은 CAN 버스 위에 올린 상위 프로토콜 (CiA 301) 로, 모션 컨트롤러·서보·로봇 관절·계측기·차량 보조 시스템 등 정밀 / 결정론적 통신이 필요한 분야에서 흔히 쓰입니다.
이 게이트웨이는 공통 통합 엔진을 통해 CANopen 읽기를 지원합니다.
PlantPulse 가 CAN 버스를 직접 못 잡습니다
PlantPulse Edge 의 H/W 에는 CAN 컨트롤러가 없습니다. CANopen 슬레이브와 통신하려면 반드시 CAN ↔ Ethernet 게이트웨이 가 필요합니다.
| 추천 H/W | 비고 |
|---|---|
| Anybus Communicator CAN | EtherNet/IP, Modbus TCP, PROFINET 등으로 변환 |
| Ixxat CAN@net NT | TCP socket 기반 raw / CANopen 라우팅 |
| HMS Networks Ewon Cosy / Flexy + CAN extension | 원격지 통합 |
| Kvaser Ethercan | 개발 / 디버깅용 |
상당수 통합 사이트는 CAN → Modbus TCP / EtherNet/IP 매핑 으로 변환하고 PlantPulse 에는 Modbus TCP / EtherNet/IP 로 등록하는 것이 더 단순합니다. 이 페이지는 게이트웨이가 CANopen 그대로 노출해 주는 경우의 가이드입니다.
등록 폼 입력값
| 입력 칸 | 무엇을 적나요 | 예시 |
|---|---|---|
| IP 주소 | CAN ↔ Ethernet 게이트웨이의 IP | 192.168.30.40 |
| 포트 | 게이트웨이가 노출하는 TCP 포트 | (벤더별, 예 19227) |
| Node ID (node-id) | CANopen 노드 번호 (1~127) | 5 |
| 응답 타임아웃 | 응답 대기 (ms) | 2000 |
Node ID 가 핵심
CANopen 은 같은 버스에 여러 슬레이브가 묶이고 각각 Node ID 로 구분됩니다. 슬레이브당 별도 연결로 등록하세요.
CANopen 기본 개념 (간단 정리)
| 용어 | 의미 |
|---|---|
| Object Dictionary (OD) | 디바이스의 모든 데이터 항목을 트리 형태로 정리한 표. 인덱스 (16-bit) + 서브인덱스 (8-bit) 로 접근 |
| SDO (Service Data Object) | 점대점 읽기/쓰기. PlantPulse 가 사용하는 모드. 느리지만 임의 항목 가능 |
| PDO (Process Data Object) | 사이클릭 / 이벤트 기반 push. 게이트웨이가 받아서 캐싱하는 경우가 많음 |
| NMT (Network Management) | 노드 상태 머신 (Boot-up → Pre-operational → Operational → Stopped) |
| EDS / DCF | OD 를 정의한 텍스트 파일. 벤더가 제공 |
OD 인덱스는 표준 영역 (0x1000~0x1FFF) 과 제조사 영역 (0x2000~), 표준 디바이스 프로파일 (0x6000~) 으로 나뉩니다.
태그의 PLC 주소 표기
OD 좌표를 <index>:<subindex> 형식으로 입력합니다. 16진 또는 10진 모두 가능.
| 표기 | 의미 |
|---|---|
0x1000:0 | Device Type |
0x1018:1 | Identity → Vendor ID |
0x1018:2 | Identity → Product Code |
0x6000:01 | (DS-401 디지털 입력 프로파일) Digital Input 1 |
0x6041:0 | (DS-402 모션 프로파일) Statusword |
0x6064:0 | (DS-402) Position Actual Value |
0x6077:0 | (DS-402) Torque Actual Value |
좌표는 디바이스의 EDS 파일 또는 매뉴얼의 OD 표에서 확인합니다. 무료 툴 CANopen Magic / CANeds / CANopenNode 로 슬레이브를 직접 스캔할 수도 있습니다.
데이터 형식 매칭
| OD 의 값 | 데이터 형식 | 형식 보조 |
|---|---|---|
| BOOLEAN | Boolean | (비움) |
| INTEGER8 / UNSIGNED8 | Integer | B |
| INTEGER16 / UNSIGNED16 | Integer | (비움) |
| INTEGER32 / UNSIGNED32 | Integer | DW |
| REAL32 | Float | REAL |
| VISIBLE_STRING | String | STR[N] |
EDS 파일의 DataType 열을 그대로 보고 매칭하면 됩니다.
흔한 문제와 해결
| 증상 | 가능한 원인 | 해결 |
|---|---|---|
| “No reply / SDO timeout” | 노드가 Pre-operational 또는 Stopped | NMT 에서 Operational 로 전환 (게이트웨이 / 마스터 설정) |
| 일부 노드만 응답 없음 | Node ID 충돌, 종단 저항 누락 | CAN 라인 양 끝 120Ω 종단, ID 중복 점검 |
| 값이 들쭉날쭉 | bit-rate 불일치 | 슬레이브와 게이트웨이의 보드레이트 일치 (125k / 250k / 500k / 1M) |
| 통신은 되는데 의미가 모호 | 벤더별 OD 영역 (0x2000~) 사용 중 | 벤더 매뉴얼 / EDS 의 항목 설명 확인 |
| “Heartbeat lost” | 마스터 미설정 | 게이트웨이를 마스터로 설정하거나 sync producer 활성 |
다음 단계
- 고급 — REST API 의 CANopen 예제
- 사이트가 큰 경우 PROFINET / EtherCAT 으로 마이그레이션 된 사례가 많습니다 — 신규 구축이라면 검토할 가치가 있습니다.