본문 바로가기
전기차 개발자/임베디드시스템

CANopen 핵심 정리 (SDO, PDO, NMT, SYNC)

by 긍정왕수전노 2023. 2. 18.
반응형

CAN 통신 표준 규격으로 J1939와 UDS에 대해서는 빠삭히 알고 있지만 CANopen은 그간 접해볼 기회가 없었는데요.

이번에 알아야 할 일이 생겨서 한번 간단한 서칭으로 알아봤습니다.

1. CANopen의 정의

CiA(CAN in Automation) 표준으로 산업용 자동화에 사용되는 CAN 통신 프로토콜 (유럽에서 많이 사용됨)

- 기계제어
- 공장자동화
- 운송수단
- 빌딩 자동화
- 의료 시스템

CANopen OSI 7 layer

 

J1939 OSI 7 Layer

CAN통신을 시작/재시작할때 아래 단계를 거치며 이 단계를 제어하는 것은 최상위 제어기의 NMT (Network Management)

  • Initialization(제어기가 켜지면 처음 진입하는 단계)
  • Pre-operational(제어기가 동작할 준비가 되었음을 표시하는 단계, SDO 통신 가능)
  • Operational(PDO 통신만 가능한 상태)
  • Stopped (NMT 수신만 가능) 

 

2. SDO, PDO, NMT, SYNC의 뜻

  • Object Dictionary: 제어기들은 이런 "객체 사전"을 갖고 있고 여기에는 데이터, 파라미터가 저장되어 있음. 다른 제어기에서 index, subindex로 액세스할 수 있게 함.

1) SDO (Service Data Object): 클라이언트 -> 서버 통신 방식으로 index+subindex를 통해 서버의 Object에 addressing 할 수 있다. 8바이트 이상을 요청하고 수신받을 수 있다.

2) PDO (Process Data Object): 데이터 길이 8바이트로 제한. 주기전송하거나 SYNC 메시지 수신될 때마다 주기전송. Broadcast라고 봐야 한다.

 

3. 표준 CANopen 데이터 규격이 있는가?

  • CANopen frame의 구성: 일반적인 CAN2.0A CAN Frame과 동일하다.

CAN ID: 상위 4bits(Function code), 하위 7bits(Node ID)

Function code 종류

  • NMT가 가장 우선순위가 높고, SDO가 제일 낮다. (LSS는 뭔지 모르겠다)

  • 공식적으로 정의된 11bit CAN ID

NMT에 대해 좀 더 자세히

장치 상태를 변경하거나 정상 동작여부 확인을 위해 사용

CAN Bus상 모든 노드는 이 메시지를 수신해서 처리해야 함.

COB-ID = 0x000, Data[0] = 변경할 상태, Data[1] = 수신대상 노드 (단, 0일 경우 모든 노드는 변경할 상태 일괄 적용)

 

SDO에 대해 좀 더 자세히

Data endianness: Little

SDO 서버 관점에서 

Upload: 서버값을 클라이언트에게 보내는 동작 (Read)

Download: 서버에 클라이언트 값을 쓰는 동작 (Write)

SDO는 Pre-perational 상태에 있을때 사용 가능. 주로 노드의 고유값 읽을때, 설정 변경을 위해 사용.

클라이언트 -> 서버로 데이터 요청시 0x600 + 서버 노드 ID

서버 -> 클라이언트로 응답시 0x580 + 클라이언트 노드 ID

Object Dictionary (OBD) 예시.. Data 8바이트 영역만 표시

 

PDO에 대해 좀 더 자세히

각 노드들은 사전 정의된 PDO를 갖고 있을 수 있기도 하고,

Pre-perational 상태에서 SDO로 설정도 가능.

2 종류의 PDO가 있다.

  • Transmit PDO: 예를 들어 0x180 + 전송하는 노드 ID로 보냄. 수신자를 지정하지 않음. 아무 노드나 받으면 됨.
  • Receive PDO: 예를 들어 0x200 + 수신할 노드 ID로 보냄. 지정한 노드만 수신함.

PDO는 동기적 / 비동기적으로 송수신할 수 있는데 

  • 동기적 PDO라 함은 최상위 노드의 SYNC 메시지(COB-ID 0x080, Data는 없다.) 수신 후 보내는 방식
  • 비동기적 PDO라 함은 각 노드가 내부 트리거에 의해 메시지를 전송하는 방식 (주로 ECU 내부 타이머), 외부에서는 다른 노드가 보낸 RTR = 1 메시지 수신시 응답하는 방식이다.
반응형