CANopen
CANopen
1. 개요
CANopen은 CAN(Controller Area Network) 데이터 링크 계층 위에 구축된 애플리케이션 계층 표준 프로토콜로, 산업 자동화, 임베디드 시스템 및 차량 제어 분야에서 장치 간의 상호 운용성을 보장하기 위해 설계된 통신 규격이다.
CANopen은 물리 계층(Physical Layer)과 데이터 링크 계층(Data Link Layer)으로 CAN 버스를 그대로 사용하며, 그 위에 애플리케이션 계층(Application Layer)을 정의하여 데이터의 의미와 전송 방식을 표준화한다. 이를 통해 서로 다른 제조사의 장치들이 동일한 규칙으로 데이터를 주고받을 수 있게 한다. 이 표준은 독일의 CiA(CAN in Automation)라는 비영리 협회에 의해 관리 및 유지보수되고 있다.
통신 계층 구조
CANopen의 계층 구조는 OSI 7계층 모델을 단순화하여 다음과 같이 구성된다.
| 계층 | 명칭 | 역할 | 비고 |
|---|---|---|---|
| Application Layer | 애플리케이션 계층 | 객체 사전, PDO, SDO, NMT 정의 | CANopen 표준 영역 |
| Data Link Layer | 데이터 링크 계층 | 메시지 프레임 생성, 오류 검출, 중재 | CAN 표준 영역 |
| Physical Layer | 물리 계층 | 전기적 신호 전송 (Differential Signal) | CAN 표준 영역 |
2. 동작 원리 및 아키텍처
COB-ID (Communication Object Identifier)
CANopen은 CAN-ID를 COB-ID라는 개념으로 확장하여 사용한다. COB-ID는 메시지의 우선순위와 기능, 그리고 대상 노드를 식별하는 식별자로, 일반적으로 [기능 코드(Function Code) + 노드 ID(Node-ID)]의 조합으로 구성된다.
- 구성 방식:
COB-ID = Function Code + Node-ID - 할당 규칙:
- 기능 코드: 메시지의 종류(NMT, SDO, PDO 등)에 따라 미리 정의된 값이다. (예: SDO 요청은
0x600, NMT 명령은0x000) - 노드 ID: 네트워크 내 각 장치에 부여된 고유 번호(1~127)이다.
- 우선순위: COB-ID 값이 낮을수록 CAN 버스 상에서 우선순위가 높다.
- 기능 코드: 메시지의 종류(NMT, SDO, PDO 등)에 따라 미리 정의된 값이다. (예: SDO 요청은
객체 사전 (Object Dictionary, OD)
객체 사전은 CANopen의 핵심 개념으로, 각 노드(Node) 내의 모든 설정 값, 상태 값, 파라미터를 인덱스(Index)와 서브-인덱스(Sub-index) 형태로 저장한 데이터베이스이다. 모든 통신은 이 객체 사전에 정의된 주소를 참조하여 이루어지며, 이는 일종의 '메모리 맵' 역할을 한다.
PDO와 SDO
CANopen은 데이터의 성격에 따라 두 가지 주요 통신 메커니즘을 사용한다.
- PDO (Process Data Object): 실시간 제어 데이터 전송을 위한 객체이다. 식별자(ID)에 데이터의 의미가 포함되어 있어, 수신 측에서 별도의 인덱스 확인 없이 즉시 처리할 수 있어 전송 속도가 매우 빠르다.
- SDO (Service Data Object): 설정 값 변경이나 상태 확인을 위한 구성(Configuration)용 객체이다. '클라이언트-서버' 모델을 따르며, 객체 사전의 특정 인덱스에 접근하여 데이터를 읽거나 쓴다. 확인 응답(Acknowledgement) 과정이 있어 신뢰성이 높지만 속도는 느리다.
[표 1] PDO와 SDO의 특성 비교
| 구분 | PDO (Process Data Object) | SDO (Service Data Object) |
|---|---|---|
| 목적 | 실시간 데이터 전송 (제어, 모니터링) | 파라미터 설정, 진단, 구성 |
| 통신 방식 | 브로드캐스트/유니캐스트 (이벤트 기반) | 클라이언트-서버 (요청-응답 기반) |
| 속도 | 매우 빠름 (오버헤드 최소화) | 상대적으로 느림 |
| 신뢰성 | 확인 응답 없음 (전송 후 종료) | 확인 응답 있음 (데이터 무결성 보장) |
| 데이터 구조 | 미리 정의된 데이터 셋 전송 | 인덱스/서브-인덱스 지정 전송 |
3. 네트워크 관리 및 통신 모델
NMT (Network Management)
NMT는 네트워크 내 모든 노드의 상태를 제어하는 마스터-슬레이브 구조의 관리 체계이다. 마스터는 특정 COB-ID(0x000)를 통해 노드에 상태 변경 명령을 내린다.
- Initialization: 노드가 부팅되어 초기화되는 단계.
- Pre-operational: SDO 통신이 가능하며, PDO 설정 및 구성이 이루어지는 단계.
- Operational: 모든 통신(PDO 포함)이 활성화되어 실제 공정 데이터가 교환되는 단계.
- Stopped: 통신이 중단된 상태.
[상태 전이(Transition) 흐름] * Pre-operational $\rightarrow$ Operational: 마스터가 'Start Remote Node' 명령을 전송하여 실제 데이터 교환을 시작함. * Operational $\rightarrow$ Pre-operational: 마스터가 'Stop Remote Node' 명령을 전송하여 설정을 변경하기 위해 PDO 통신을 중단함. * Any State $\rightarrow$ Stopped: 마스터가 'Reset Communication' 명령을 전송하여 노드를 정지시키거나 초기화함.
하트비트 (Heartbeat) 및 노드 가드 (Node Guarding)
네트워크의 생존 여부를 확인하기 위해 사용된다. * Heartbeat: 각 노드가 설정된 주기마다 자신의 상태를 네트워크에 알리는 방식이다. * Node Guarding: 마스터가 각 노드에 주기적으로 요청을 보내고 응답을 확인하는 방식이다.
4. 장치 프로파일 (Device Profiles) 및 EDS 파일
장치 프로파일 (Device Profiles)
제조사가 다르더라도 동일한 기능을 수행하는 장치라면 동일한 객체 사전 인덱스를 사용하도록 규정한 표준이다. 대표적으로 CiA 402 프로파일은 드라이브 및 모터 제어 장치를 위한 표준이다.
[표 2] CiA 402 프로파일 주요 인덱스 예시
| 인덱스 | 명칭 | 설명 | 데이터 타입 |
|---|---|---|---|
0x6040 |
Controlword | 드라이브 제어 명령 (Enable, Fault Reset 등) | UINT16 |
0x6041 |
Statusword | 드라이브 현재 상태 (Ready, Fault, Warning 등) | UINT16 |
0x6064 |
Position Actual Value | 현재 실제 위치 값 | INT32 |
0x607A |
Target Position | 목표 위치 설정 값 | INT32 |
EDS (Electronic Data Sheet) 파일
EDS 파일은 특정 장치가 가진 객체 사전의 구조와 기능을 텍스트 형태로 기술한 설정 파일이다. * 정의: 장치의 통신 사양서(Specification)를 디지털화한 파일. * 역할: 네트워크 설정 툴(Configuration Tool)에서 EDS 파일을 로드하면, 사용자는 복잡한 인덱스 번호를 외울 필요 없이 GUI를 통해 장치의 파라미터를 설정하고 PDO 매핑을 수행할 수 있다.
5. 구현 및 활용 예시
메시지 프레임 구조 분석
CANopen 메시지는 CAN 2.0B 표준의 식별자를 사용하며, COB-ID를 통해 메시지의 우선순위와 종류를 결정한다. SDO 통신 시 인덱스 값은 Little-endian(낮은 바이트가 먼저 옴) 방식으로 전송된다.
[예시] SDO 읽기 요청 및 응답 프레임 (11-bit ID 기준)
-
읽기 요청 (Request)
- CAN-ID:
0x600 + Node-ID(예: Node 1의 경우0x601) - DLC: 8 bytes
- Data Field:
- Byte 0: Command Specifier (
0x40$\rightarrow$ Read request) - Byte 1-2: Index (Little-endian, 예:
0x00 0x10$\rightarrow$ Index0x1000) - Byte 3: Sub-index (예:
0x00) - Byte 4-7: Not used (요청 시에는 사용하지 않음)
- Byte 0: Command Specifier (
- CAN-ID:
-
읽기 응답 (Response)
- CAN-ID:
0x580 + Node-ID(예: Node 1의 경우0x581) - DLC: 8 bytes
- Data Field:
- Byte 0: Command Specifier (
0x4B$\rightarrow$ Read response) - Byte 1-4: 요청한 인덱스의 실제 데이터 값 (Little-endian)
- Byte 5-7: Not used
- Byte 0: Command Specifier (
- CAN-ID:
데이터 전송 흐름 예시 (코드 구조)
다음은 가상의 C 언어 구조체로 표현한 SDO 쓰기 메시지 구성 예시이다.
typedef struct {
uint32_t cob_id; // CAN Identifier (e.g., 0x600 + NodeID)
uint8_t dlc; // Data Length (8 bytes for SDO)
uint8_t data[8]; // Payload
} CANopen_Frame;
// Index 0x1018 (Heartbeat Producer Time)에 100ms(0x64)를 쓰는 SDO 요청
CANopen_Frame sdo_write_req = {
.cob_id = 0x601,
.dlc = 8,
.data = {
0x23, // Byte 0: Write request
0x18, 0x10, // Byte 1-2: Index 0x1018 (Little-endian: 0x18 then 0x10)
0x00, // Byte 3: Sub-index 0
0x64, 0x00, // Byte 4-5: Value 100 (0x0064, Little-endian)
0x00, 0x00 // Byte 6-7: Not used
}
};
6. 장단점 및 타 프로토콜 비교
장단점
- 장점:
- 신뢰성: CAN 버스의 강력한 오류 검출 및 중재 메커니즘을 그대로 사용한다.
- 표준화: CiA 프로파일을 통해 이기종 장비 간 통합이 용이하다.
- 효율성: PDO를 통해 실시간 데이터 전송 오버헤드를 최소화한다.
- 단점:
- 대역폭 제한: CAN 2.0B 기준 최대 1Mbps로, 대용량 데이터 전송에 부적합하다.
- 설정 복잡도: 객체 사전 및 PDO 매핑 설정 과정이 까다롭다.
타 프로토콜과의 비교
| 비교 항목 | CANopen | DeviceNet | EtherCAT |
|---|---|---|---|
| 물리 계층 | CAN | CAN | Ethernet (100BASE-TX) |
| 통신 방식 | Producer/Consumer | Master/Slave | Processing-on-the-fly |
| 전송 속도 | 최대 1 Mbps | 최대 500 kbps | 100 Mbps |
| 결정론적 특성 | 높음 (우선순위 기반) | 높음 | 매우 높음 (하드웨어 동기화) |
| 주요 용도 | 의료기기, 소형 자동화 | 공장 자동화, 컨베이어 | 고속 정밀 제어, 로봇 |
| 표준 기구 | CiA | ODVA | ETG |
이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.