Rust EtherCAT: Wie man die DC-Anwendungszeit aus der Systemuhr setzt
Hier ist, wie du die Distributed-Clocks-(DC)-Anwendungszeit in einer Rust-EtherCAT-Anwendung unter Verwendung der ethercat-Crate setzen kannst.
ethercat_time.rs
use chrono::TimeZone;
use std::time::{SystemTime, UNIX_EPOCH, Duration};
// erfordert `chrono = "0.4"` in Cargo.toml
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;
// Für den EtherCAT-Master setzen
master.set_application_time(app_time_ns)?;Dieser Code stellt sicher, dass gemäß der EtherCAT-Spezifikation die Anwendungszeit relativ zur Epoche ab dem 2000-01-01 gesetzt wird, nicht zur Unix-Epoche am 1970-01-01.
Entsprechende Cargo.toml-Abhängigkeit:
Cargo.toml
[dependencies]
chrono = "0.4"
ethercat = "*"Wenn dieser Beitrag dir geholfen hat, erwäge, mir einen Kaffee zu spendieren oder per PayPal zu spenden, um die Recherche und Veröffentlichung neuer Beiträge auf TechOverflow zu unterstützen