CANOpen의 PDO Mapping 설정 및 최적화
PDO (Process Data Object) 개요
PDO(Process Data Object)는 CANOpen 네트워크에서 실시간 데이터를 빠르게 전송하기 위한 메시지입니다. CANOpen에서 사용되는 주요 통신 방식 중 하나이며, 데이터를 효율적으로 전송할 수 있도록 설계되었습니다.
PDO는 크게 두 가지 유형이 있습니다.
- TPDO (Transmit PDO): 데이터를 송신하는 PDO
- RPDO (Receive PDO): 데이터를 수신하는 PDO
각 PDO는 미리 정의된 데이터 매핑을 통해 특정 Object Dictionary(OD) 항목과 연결됩니다.
PDO Mapping 개념
PDO Mapping은 특정 OD 항목을 TPDO 또는 RPDO에 할당하는 과정입니다. 이를 통해 장치는 미리 설정된 데이터 구조를 기반으로 신속하게 데이터를 송수신할 수 있습니다.
PDO Mapping에는 정적(Static)과 동적(Dynamic) 방식이 있습니다.
- 정적 매핑(Static Mapping): 미리 정의된 PDO Mapping으로, 변경이 불가능한 방식입니다.
- 동적 매핑(Dynamic Mapping): 네트워크 실행 중에 PDO의 데이터를 재구성할 수 있는 방식입니다.
PDO Mapping을 구성하려면 Object Dictionary의 다음 항목을 활용해야 합니다.
- 0x1A00 ~ 0x1A7F: TPDO Mapping 항목
- 0x1600 ~ 0x167F: RPDO Mapping 항목
각 Mapping 항목에는 특정 OD 엔트리를 추가하여 PDO 데이터를 구성할 수 있습니다.
PDO Mapping 설정 방법
PDO Mapping 설정을 위해 Object Dictionary에 다음과 같은 항목을 추가합니다.
PDO 매핑 활성화 비활성화
- PDO 매핑을 변경하기 전에 해당 PDO를 비활성화해야 합니다.
- TPDO 및 RPDO의 sub-index 0을
0x00
으로 설정하여 매핑을 변경할 준비를 합니다.
uint8_t disable_pdo_mapping = 0x00; CO_SDO_write(0x1A00, 0x00, &disable_pdo_mapping, sizeof(disable_pdo_mapping));
매핑할 OD 항목 추가
- 예를 들어, TPDO에 0x6000 (디지털 입력)과 0x6200 (아날로그 입력) 항목을 매핑하려면 다음과 같이 설정합니다.
uint32_t mapping_entry1 = 0x60000108; // Index 0x6000, Sub-index 0x01, 8bit 데이터 uint32_t mapping_entry2 = 0x62000110; // Index 0x6200, Sub-index 0x01, 16bit 데이터 CO_SDO_write(0x1A00, 0x01, &mapping_entry1, sizeof(mapping_entry1)); CO_SDO_write(0x1A00, 0x02, &mapping_entry2, sizeof(mapping_entry2));
매핑 활성화
- 설정이 완료되면, TPDO 또는 RPDO 매핑을 다시 활성화합니다.
uint8_t enable_pdo_mapping = 0x02; // 매핑된 엔트리 개수 CO_SDO_write(0x1A00, 0x00, &enable_pdo_mapping, sizeof(enable_pdo_mapping));
PDO 최적화 기법
효율적인 PDO 통신을 위해 몇 가지 최적화 기법을 적용할 수 있습니다.
데이터 패킹 최적화
- PDO 데이터는 최대 8바이트까지 포함할 수 있으므로, 불필요한 패딩을 줄이고 데이터를 최적화하여 매핑하는 것이 중요합니다.
- 1비트 또는 8비트 단위 데이터를 적절히 배치하여 데이터 공간을 효율적으로 활용합니다.
통신 주기 및 이벤트 트리거 조정
- 필요하지 않은 주기적 PDO 전송을 줄이고, 이벤트 기반 전송을 활성화하여 네트워크 부하를 줄입니다.
- 예를 들어, 디지털 입력 값이 변경될 때만 TPDO를 전송하도록 설정할 수 있습니다.
uint8_t event_triggered_mode = 0xFE; // 변경 시 전송 모드 CO_SDO_write(0x1800, 0x02, &event_triggered_mode, sizeof(event_triggered_mode));
비사용 PDO 비활성화
- 필요하지 않은 PDO는 비활성화하여 불필요한 CAN 메시지 트래픽을 줄입니다.
- 사용되지 않는 RPDO 또는 TPDO 항목을 삭제하여 효율성을 높입니다.
PDO 전송 속도 조정
- 높은 주파수로 송신되는 TPDO는 적절한 주기로 설정하여 네트워크 대역폭을 절약합니다.
- 주기적 송신이 필요한 경우 최소한의 주기를 설정하여 CPU 및 버스 로드를 줄입니다.
결론
PDO Mapping은 CANOpen 네트워크에서 빠르고 효율적인 데이터 전송을 위해 필수적인 요소입니다. 적절한 매핑 설정과 최적화 기법을 적용하면 네트워크 성능을 극대화하고 불필요한 부하를 줄일 수 있습니다. 특히, 이벤트 기반 전송과 데이터 패킹을 활용하면 더욱 효율적인 PDO 통신을 구현할 수 있습니다.
'CAN > CAN 기초' 카테고리의 다른 글
CAN 데이터를 활용한 머신러닝 기반 예측 시스템(실전 프로젝트) (0) | 2025.03.13 |
---|---|
자동차 ECU와 CAN 통신(실전 프로젝트) (0) | 2025.03.13 |
CAN 기반 센서 네트워크 구축 (실전 프로젝트) (0) | 2025.03.13 |
CAN FD 및 최신 CAN XL 기술 심화 분석 (0) | 2025.03.12 |
Linux에서 SocketCAN을 활용한 CAN 네트워크 제어 (0) | 2025.03.11 |