|
|
|
@ -5,10 +5,12 @@ use profirust::phy;
|
|
|
|
mod tester_io;
|
|
|
|
mod tester_io;
|
|
|
|
mod valve_terminal;
|
|
|
|
mod valve_terminal;
|
|
|
|
|
|
|
|
|
|
|
|
// Bus Parameters
|
|
|
|
// Muss auf den passenden USB-RS485 Port abgeändert werden!
|
|
|
|
const MASTER_ADDRESS: u8 = 1;
|
|
|
|
|
|
|
|
const BUS_DEVICE: &'static str = "/dev/ttyUSB0";
|
|
|
|
const BUS_DEVICE: &'static str = "/dev/ttyUSB0";
|
|
|
|
const BAUDRATE: profirust::Baudrate = profirust::Baudrate::B19200;
|
|
|
|
|
|
|
|
|
|
|
|
// Bus Parameters
|
|
|
|
|
|
|
|
const MASTER_ADDRESS: u8 = 3;
|
|
|
|
|
|
|
|
const BAUDRATE: profirust::Baudrate = profirust::Baudrate::B500000;
|
|
|
|
|
|
|
|
|
|
|
|
fn main() -> ! {
|
|
|
|
fn main() -> ! {
|
|
|
|
env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info"))
|
|
|
|
env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info"))
|
|
|
|
@ -23,19 +25,18 @@ fn main() -> ! {
|
|
|
|
let mut tester_io = tester_io::TesterIo::new(&mut dp_master, BAUDRATE);
|
|
|
|
let mut tester_io = tester_io::TesterIo::new(&mut dp_master, BAUDRATE);
|
|
|
|
let mut valve_terminal = valve_terminal::ValveTerminal::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(
|
|
|
|
let mut fdl = fdl::FdlActiveStation::new(
|
|
|
|
fdl::ParametersBuilder::new(MASTER_ADDRESS, BAUDRATE)
|
|
|
|
fdl::ParametersBuilder::new(MASTER_ADDRESS, BAUDRATE)
|
|
|
|
// We use a rather large T_slot time because USB-RS485 converters
|
|
|
|
.slot_bits(4000)
|
|
|
|
// can induce large delays at times.
|
|
|
|
.max_retry_limit(3)
|
|
|
|
.slot_bits(960)
|
|
|
|
|
|
|
|
// 2 Sekunden Watchdog Timeout
|
|
|
|
// 2 Sekunden Watchdog Timeout
|
|
|
|
.watchdog_timeout(profirust::time::Duration::from_secs(2))
|
|
|
|
.watchdog_timeout(profirust::time::Duration::from_secs(2))
|
|
|
|
.build_verified(&dp_master),
|
|
|
|
.build_verified(&dp_master),
|
|
|
|
);
|
|
|
|
);
|
|
|
|
// We must not poll() too often or to little. T_slot / 2 seems to be a good compromise.
|
|
|
|
let sleep_time = std::time::Duration::from_micros(3500);
|
|
|
|
let sleep_time: std::time::Duration = (fdl.parameters().slot_time() / 2).into();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log::info!("Verbindung mit dem Bus wird aufgebaut...");
|
|
|
|
log::info!("Verbindung mit dem Bus {BUS_DEVICE:?} wird aufgebaut...");
|
|
|
|
let mut phy = phy::SerialPortPhy::new(BUS_DEVICE, fdl.parameters().baudrate);
|
|
|
|
let mut phy = phy::SerialPortPhy::new(BUS_DEVICE, fdl.parameters().baudrate);
|
|
|
|
|
|
|
|
|
|
|
|
fdl.set_online();
|
|
|
|
fdl.set_online();
|
|
|
|
|