diff --git a/Cargo.lock b/Cargo.lock index 67a753b..7059da2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 4 +version = 3 [[package]] name = "aho-corasick" @@ -165,9 +165,9 @@ checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "libc" -version = "0.2.169" +version = "0.2.162" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "18d287de67fe55fd7e1581fe933d965a5a9477b38e949cfa9f8574ef01506398" [[package]] name = "libudev" @@ -235,18 +235,17 @@ checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "proc-macro2" -version = "1.0.92" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" dependencies = [ "unicode-ident", ] [[package]] name = "profirust" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47e1ffcf51ad3251d763ff97e64a94ec8ccd6af5a165e1a8a962804e2d64731a" +version = "0.4.0" +source = "git+https://github.com/rahix/profirust.git?rev=1a02cb771426ffdd4d88cdbfd163a7f2148a7c83#1a02cb771426ffdd4d88cdbfd163a7f2148a7c83" dependencies = [ "bitflags 2.6.0", "bitvec", @@ -307,9 +306,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serialport" -version = "4.6.1" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "779e2977f0cc2ff39708fef48f96f3768ac8ddd8c6caaaab82e83bd240ef99b2" +checksum = "7331eefcaafaa382c0df95bcd84068f0b3e3c215c300750dde2316e9b8806ed5" dependencies = [ "bitflags 2.6.0", "cfg-if", @@ -326,9 +325,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.90" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2", "quote", @@ -372,9 +371,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.14" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "utf8parse" diff --git a/Cargo.toml b/Cargo.toml index a34d67d..5ee3427 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,6 +8,8 @@ env_logger = "0.11.5" log = "0.4.22" [dependencies.profirust] -version = "0.5.0" +version = "0.4.0" default-features = false features = ["phy-serial", "std"] +rev = "1a02cb771426ffdd4d88cdbfd163a7f2148a7c83" +git = "https://github.com/rahix/profirust.git" diff --git a/src/main.rs b/src/main.rs index 4e6276b..9473a75 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,12 +5,10 @@ use profirust::phy; mod tester_io; mod valve_terminal; -// Muss auf den passenden USB-RS485 Port abgeändert werden! -const BUS_DEVICE: &'static str = "/dev/ttyUSB0"; - // Bus Parameters -const MASTER_ADDRESS: u8 = 3; -const BAUDRATE: profirust::Baudrate = profirust::Baudrate::B500000; +const MASTER_ADDRESS: u8 = 1; +const BUS_DEVICE: &'static str = "/dev/ttyUSB0"; +const BAUDRATE: profirust::Baudrate = profirust::Baudrate::B19200; fn main() -> ! { env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")) @@ -25,18 +23,19 @@ fn main() -> ! { let mut tester_io = tester_io::TesterIo::new(&mut dp_master, BAUDRATE); let mut valve_terminal = valve_terminal::ValveTerminal::new(&mut dp_master, BAUDRATE); - // Bus-Parameter für USB-RS485 Converter sind hier beschrieben: https://docs.rs/profirust/latest/profirust/phy/struct.SerialPortPhy.html let mut fdl = fdl::FdlActiveStation::new( fdl::ParametersBuilder::new(MASTER_ADDRESS, BAUDRATE) - .slot_bits(4000) - .max_retry_limit(3) + // We use a rather large T_slot time because USB-RS485 converters + // can induce large delays at times. + .slot_bits(960) // 2 Sekunden Watchdog Timeout .watchdog_timeout(profirust::time::Duration::from_secs(2)) .build_verified(&dp_master), ); - let sleep_time = std::time::Duration::from_micros(3500); + // We must not poll() too often or to little. T_slot / 2 seems to be a good compromise. + let sleep_time: std::time::Duration = (fdl.parameters().slot_time() / 2).into(); - log::info!("Verbindung mit dem Bus {BUS_DEVICE:?} wird aufgebaut..."); + log::info!("Verbindung mit dem Bus wird aufgebaut..."); let mut phy = phy::SerialPortPhy::new(BUS_DEVICE, fdl.parameters().baudrate); fdl.set_online();