diff --git a/Cargo.lock b/Cargo.lock index 1491aa11..c483d96b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -26,21 +26,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - [[package]] name = "anes" version = "0.1.6" @@ -403,12 +388,6 @@ dependencies = [ "piper", ] -[[package]] -name = "bumpalo" -version = "3.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" - [[package]] name = "byteorder" version = "1.5.0" @@ -451,20 +430,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" -[[package]] -name = "chrono" -version = "0.4.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "js-sys", - "num-traits", - "wasm-bindgen", - "windows-link", -] - [[package]] name = "ciborium" version = "0.2.2" @@ -540,7 +505,6 @@ dependencies = [ "approx", "axum", "bitvec", - "chrono", "crc", "ethercat_hal", "ethercrab", @@ -553,12 +517,6 @@ dependencies = [ "uom", ] -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - [[package]] name = "cpufeatures" version = "0.2.17" @@ -1255,30 +1213,6 @@ dependencies = [ "tower-service", ] -[[package]] -name = "iana-time-zone" -version = "0.1.63" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "wasm-bindgen", - "windows-core", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - [[package]] name = "if_chain" version = "1.0.2" @@ -1406,16 +1340,6 @@ dependencies = [ "syn 2.0.101", ] -[[package]] -name = "js-sys" -version = "0.3.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" -dependencies = [ - "once_cell", - "wasm-bindgen", -] - [[package]] name = "lazy_static" version = "1.5.0" @@ -2005,7 +1929,6 @@ dependencies = [ "approx", "axum", "bitvec", - "chrono", "control_core", "env_logger", "ethercat_hal", @@ -2532,64 +2455,6 @@ dependencies = [ "wit-bindgen-rt", ] -[[package]] -name = "wasm-bindgen" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" -dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.101", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" -dependencies = [ - "unicode-ident", -] - [[package]] name = "winapi" version = "0.3.9" @@ -2621,65 +2486,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows-core" -version = "0.61.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-link", - "windows-result", - "windows-strings", -] - -[[package]] -name = "windows-implement" -version = "0.60.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", -] - -[[package]] -name = "windows-interface" -version = "0.59.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", -] - -[[package]] -name = "windows-link" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" - -[[package]] -name = "windows-result" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-strings" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" -dependencies = [ - "windows-link", -] - [[package]] name = "windows-sys" version = "0.36.1" diff --git a/control-core/Cargo.toml b/control-core/Cargo.toml index 8d17b203..5a0266e9 100644 --- a/control-core/Cargo.toml +++ b/control-core/Cargo.toml @@ -6,7 +6,6 @@ edition = "2024" [dependencies] anyhow = "1.0.98" axum = "0.8.3" -chrono = "0.4.40" ethercat_hal = { path = "../ethercat-hal" } ethercrab = "0.6" interfaces = "0.0.9" diff --git a/control-core/src/socketio/event.rs b/control-core/src/socketio/event.rs index e6d6f14b..df223019 100644 --- a/control-core/src/socketio/event.rs +++ b/control-core/src/socketio/event.rs @@ -1,3 +1,5 @@ +use std::time::{SystemTime, UNIX_EPOCH}; + use serde::Serialize; use serde_json::Value; @@ -6,7 +8,7 @@ pub struct GenericEvent { pub name: String, pub data: Value, /// Timestamp in milliseconds - pub ts: i64, + pub ts: u64, } #[derive(Debug, Clone, Serialize)] @@ -17,7 +19,7 @@ where pub name: String, pub data: T, /// Timestamp in milliseconds - pub ts: i64, + pub ts: u64, } impl TryFrom> for GenericEvent @@ -58,7 +60,10 @@ where Self { name: event.to_string(), data, - ts: chrono::Utc::now().timestamp_millis(), + ts: SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap() + .as_millis() as u64, } } } diff --git a/control-core/src/socketio/namespace.rs b/control-core/src/socketio/namespace.rs index 91d4c461..9fc1b041 100644 --- a/control-core/src/socketio/namespace.rs +++ b/control-core/src/socketio/namespace.rs @@ -1,6 +1,10 @@ use crate::socketio::event::GenericEvent; use socketioxide::extract::SocketRef; -use std::{collections::HashMap, time::Duration}; +use std::{ + alloc::System, + collections::HashMap, + time::{Duration, Instant, SystemTime, UNIX_EPOCH}, +}; pub trait NamespaceInterface { /// Adds a socket to the namespace. @@ -171,9 +175,11 @@ pub fn cache_one_event() -> CacheFn { /// [BufferFn] that stores events for a certain duration pub fn cache_duration(duration: Duration) -> CacheFn { Box::new(move |events, event| { - let now = chrono::Utc::now(); - let cutoff_time = now - chrono::Duration::from_std(duration).unwrap_or_default(); - let cutoff_millis = cutoff_time.timestamp_millis(); + let now = SystemTime::now() + .duration_since(UNIX_EPOCH) + .expect("System time before UNIX EPOCH"); + let cutoff_time = now - duration; + let cutoff_millis = cutoff_time.as_millis() as u64; // Since events are ordered by increasing ts, we can find the first index // that should be kept and truncate everything before it diff --git a/server/Cargo.toml b/server/Cargo.toml index 6aa67684..7772d6e2 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -22,7 +22,6 @@ axum = { version = "0.8.3", features = ["macros"] } # utility uom = "0.36.0" -chrono = "0.4.39" serde = "1.0.217" anyhow = "1.0.98" serde_json = "1.0.137" diff --git a/server/src/machines/winder2/act.rs b/server/src/machines/winder2/act.rs index 0a4eee63..52cbd75b 100644 --- a/server/src/machines/winder2/act.rs +++ b/server/src/machines/winder2/act.rs @@ -1,4 +1,4 @@ -use std::time::Instant; +use std::time::{Duration, Instant}; use super::Winder2; use control_core::actors::Actor; @@ -19,8 +19,8 @@ impl Actor for Winder2 { self.sync_spool_speed(now); // if last measurement emit is older than 1 second, emit a new measurement - let now = chrono::Utc::now(); - if (now - self.last_measurement_emit).num_milliseconds() > 16 { + let now = Instant::now(); + if now.duration_since(self.last_measurement_emit) > Duration::from_millis(16) { self.emit_tension_arm_angle(); self.emit_spool_rpm(); self.last_measurement_emit = now; diff --git a/server/src/machines/winder2/mod.rs b/server/src/machines/winder2/mod.rs index beae946b..e14cb3bd 100644 --- a/server/src/machines/winder2/mod.rs +++ b/server/src/machines/winder2/mod.rs @@ -12,7 +12,6 @@ use api::{ ModeStateEvent, TensionArmAngleEvent, TensionArmStateEvent, TraverseStateEvent, Winder1Events, Winder1Namespace, }; -use chrono::DateTime; use control_core::{ actors::{ digital_output_setter::DigitalOutputSetter, stepper_driver_el70x1::StepperDriverEL70x1, @@ -36,7 +35,7 @@ pub struct Winder2 { // socketio namespace: Winder1Namespace, - last_measurement_emit: DateTime, + last_measurement_emit: Instant, // mode pub mode: Winder2Mode, diff --git a/server/src/machines/winder2/new.rs b/server/src/machines/winder2/new.rs index 1184bcdb..db3e7f80 100644 --- a/server/src/machines/winder2/new.rs +++ b/server/src/machines/winder2/new.rs @@ -1,3 +1,5 @@ +use std::time::Instant; + use super::api::Winder1Namespace; use super::linear_spool_speed_controller::LinearSpoolSpeedController; use super::tension_arm::TensionArm; @@ -296,7 +298,7 @@ impl MachineNewTrait for Winder2 { mode: Winder2Mode::Standby, spool_step_converter: StepConverter::new(200), spool_speed_controller: Box::new(LinearSpoolSpeedController::new(200.0, 1250.0)), - last_measurement_emit: chrono::Utc::now(), + last_measurement_emit: Instant::now(), }; // Role 5