forked from ROMEO/nexosim
Initial (g)RPC implementation
This commit is contained in:
@ -26,7 +26,8 @@
|
||||
//! │ ├───────────────────────────────▶ Total power
|
||||
//! └──────────┘
|
||||
//! ```
|
||||
use asynchronix::model::{Model, Output, Requestor};
|
||||
use asynchronix::model::Model;
|
||||
use asynchronix::ports::{EventSlot, Output, Requestor};
|
||||
use asynchronix::simulation::{Mailbox, SimInit};
|
||||
use asynchronix::time::MonotonicTime;
|
||||
|
||||
@ -124,10 +125,14 @@ fn main() {
|
||||
psu.pwr_out.connect(Load::pwr_in, &load3_mbox);
|
||||
|
||||
// Model handles for simulation.
|
||||
let mut psu_power = psu.power.connect_slot().0;
|
||||
let mut load1_power = load1.power.connect_slot().0;
|
||||
let mut load2_power = load2.power.connect_slot().0;
|
||||
let mut load3_power = load3.power.connect_slot().0;
|
||||
let mut psu_power = EventSlot::new();
|
||||
let mut load1_power = EventSlot::new();
|
||||
let mut load2_power = EventSlot::new();
|
||||
let mut load3_power = EventSlot::new();
|
||||
psu.power.connect_sink(&psu_power);
|
||||
load1.power.connect_sink(&load1_power);
|
||||
load2.power.connect_sink(&load2_power);
|
||||
load3.power.connect_sink(&load3_power);
|
||||
let psu_addr = psu_mbox.address();
|
||||
|
||||
// Start time (arbitrary since models do not depend on absolute time).
|
||||
@ -153,14 +158,14 @@ fn main() {
|
||||
|
||||
// Vary the supply voltage, check the load and power supply consumptions.
|
||||
for voltage in [10.0, 15.0, 20.0] {
|
||||
simu.send_event(PowerSupply::voltage_setting, voltage, &psu_addr);
|
||||
simu.process_event(PowerSupply::voltage_setting, voltage, &psu_addr);
|
||||
|
||||
let v_square = voltage * voltage;
|
||||
assert!(same_power(load1_power.take().unwrap(), v_square / r1));
|
||||
assert!(same_power(load2_power.take().unwrap(), v_square / r2));
|
||||
assert!(same_power(load3_power.take().unwrap(), v_square / r3));
|
||||
assert!(same_power(load1_power.next().unwrap(), v_square / r1));
|
||||
assert!(same_power(load2_power.next().unwrap(), v_square / r2));
|
||||
assert!(same_power(load3_power.next().unwrap(), v_square / r3));
|
||||
assert!(same_power(
|
||||
psu_power.take().unwrap(),
|
||||
psu_power.next().unwrap(),
|
||||
v_square * (1.0 / r1 + 1.0 / r2 + 1.0 / r3)
|
||||
));
|
||||
}
|
||||
|
Reference in New Issue
Block a user