CAN/CAN Open

CANOpen SYNC & TIME 메시지의 활용

임베디드 친구 2025. 7. 24. 19:25
728x90
반응형

CANOpen SYNC & TIME 메시지의 활용

CANOpen 네트워크에서는 다양한 메시지를 활용하여 실시간 통신을 수행합니다. 이 중에서도 SYNC 메시지와 TIME 메시지는 네트워크 내 장치 간의 동기화 및 시간 관리를 위한 중요한 역할을 합니다. 본 장에서는 SYNC 및 TIME 메시지의 구조와 활용 방법에 대해 설명합니다.

SYNC 메시지의 개요

SYNC 메시지는 네트워크 내의 모든 노드가 일정한 주기로 동기화할 수 있도록 지원하는 메시지입니다. 일반적으로 마스터 노드에서 주기적으로 전송되며, 슬레이브 노드는 이를 수신하여 내부 프로세스를 동기화합니다.

SYNC 메시지는 고정된 COB-ID(0x080)를 사용하며, 데이터 필드는 필요에 따라 0~1바이트를 포함할 수 있습니다. 주로 분산된 장치들이 동일한 기준 시점을 공유할 수 있도록 하는 역할을 합니다.

SYNC 메시지의 활용

SYNC 메시지는 다음과 같은 경우에 활용됩니다:

  1. 주기적인 데이터 수집
    • ADC(Analog-to-Digital Converter) 또는 센서 데이터를 동기화된 주기로 샘플링할 때 사용됩니다.
  2. 제어 시스템에서의 동기화
    • 모터 제어와 같은 실시간 제어 시스템에서 주기적인 동기 신호로 활용됩니다.
  3. PDO(프로세스 데이터 객체) 전송 동기화
    • SYNC 신호에 따라 PDO가 전송되도록 설정하면, 모든 노드가 동일한 타이밍에 데이터를 교환할 수 있습니다.

TIME 메시지의 개요

TIME 메시지는 네트워크 내의 노드들이 공통된 시간 정보를 공유할 수 있도록 하는 메시지입니다. 이를 통해 CANOpen 네트워크에서 시간 기반의 이벤트를 보다 정밀하게 동기화할 수 있습니다.

TIME 메시지는 COB-ID 0x100을 사용하며, 6바이트 데이터 필드를 포함합니다. 이 필드는 다음과 같은 정보를 포함합니다:

  • 32비트 시간 값 (밀리초 단위, UTC 기준)
  • 16비트 일자 값 (일 단위, 1984년 1월 1일부터 카운트)

TIME 메시지의 활용

TIME 메시지는 다음과 같은 경우에 활용됩니다:

  1. 로그 및 이벤트 타임스탬프
    • 이벤트 발생 시점을 정확하게 기록하는 용도로 사용됩니다.
  2. 네트워크 시간 동기화
    • 네트워크 내의 모든 노드가 동일한 시간 기준을 유지할 수 있도록 합니다.
  3. 주기적인 시간 기반 작업 수행
    • 특정 주기로 이벤트를 실행해야 하는 애플리케이션에서 활용됩니다.

SYNC 및 TIME 메시지 구현 예제

아래는 STM32F429에서 CANOpen SYNC 및 TIME 메시지를 활용하는 코드 예제입니다.

#include "stm32f4xx_hal.h"

#define SYNC_COB_ID  0x080
#define TIME_COB_ID  0x100

CAN_HandleTypeDef hcan;

void Send_SYNC_Message(void) {
    CAN_TxHeaderTypeDef TxHeader;
    uint8_t TxData[1] = {0};
    uint32_t TxMailbox;

    TxHeader.StdId = SYNC_COB_ID;
    TxHeader.DLC = 0;
    TxHeader.IDE = CAN_ID_STD;
    TxHeader.RTR = CAN_RTR_DATA;

    HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData, &TxMailbox);
}

void Send_TIME_Message(uint32_t timestamp, uint16_t date) {
    CAN_TxHeaderTypeDef TxHeader;
    uint8_t TxData[6];
    uint32_t TxMailbox;

    TxData[0] = (timestamp >> 24) & 0xFF;
    TxData[1] = (timestamp >> 16) & 0xFF;
    TxData[2] = (timestamp >> 8) & 0xFF;
    TxData[3] = timestamp & 0xFF;
    TxData[4] = (date >> 8) & 0xFF;
    TxData[5] = date & 0xFF;

    TxHeader.StdId = TIME_COB_ID;
    TxHeader.DLC = 6;
    TxHeader.IDE = CAN_ID_STD;
    TxHeader.RTR = CAN_RTR_DATA;

    HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData, &TxMailbox);
}

결론

SYNC 및 TIME 메시지는 CANOpen 네트워크에서 장치 간의 시간 동기화 및 정밀한 데이터 교환을 가능하게 하는 중요한 기능을 수행합니다. SYNC 메시지는 주기적인 프로세스 제어와 데이터 샘플링에 유용하며, TIME 메시지는 네트워크 전체의 시간 기준을 제공하는 역할을 합니다. 이러한 메시지를 적절히 활용하면 더욱 정밀하고 신뢰성 높은 CANOpen 시스템을 구현할 수 있습니다.

728x90
반응형