Rust EtherCAT:如何从系统时钟设置 DC 应用时间

下面介绍如何在 Rust EtherCAT 应用中使用 ethercat crate 设置分布式时钟(DC)应用时间。

ethercat_time.rs
use chrono::TimeZone;
use std::time::{SystemTime, UNIX_EPOCH, Duration};

// 需要在 Cargo.toml 中添加 `chrono = "0.4"`
let epoch_2000_secs = chrono::Utc.with_ymd_and_hms(2000, 1, 1, 0, 0, 0).unwrap().timestamp() as u64;
let epoch_2000 = UNIX_EPOCH + Duration::from_secs(epoch_2000_secs);
let app_time_ns = SystemTime::now()
    .duration_since(epoch_2000)? // Result<Duration, _>
    .as_nanos() as u64;
// 为 EtherCAT master 设置应用时间
master.set_application_time(app_time_ns)?;

此代码确保按照 EtherCAT 规范,应用时间相对于 2000-01-01 起始的纪元设置,而非 1970-01-01 起始的 Unix 纪元。

对应的 Cargo.toml 依赖:

Cargo.toml
[dependencies]
chrono = "0.4"
ethercat = "*"

Check out similar posts by category: Rust, EtherCAT