1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
//! Multi-Unit Management for Modbus Simulation.
//!
//! This module provides the `MultiUnitManager` for managing multiple Modbus
//! slave units, each with its own register store and configuration.
//!
//! # Architecture
//!
//! ```text
//! ┌────────────────────────────────────────────────────────────────────────────┐
//! │ MultiUnitManager │
//! │ ┌──────────────────────────────────────────────────────────────────────┐ │
//! │ │ UnitManagerConfig │ │
//! │ │ • Default word order • Broadcast mode • Max units │ │
//! │ └──────────────────────────────────────────────────────────────────────┘ │
//! │ │
//! │ ┌──────────────────────────────────────────────────────────────────────┐ │
//! │ │ Unit Store (DashMap<u8, UnitInfo>) │ │
//! │ │ Unit 1: { registers: SparseStore, config: UnitConfig, converter } │ │
//! │ │ Unit 2: { registers: SparseStore, config: UnitConfig, converter } │ │
//! │ │ Unit N: { registers: SparseStore, config: UnitConfig, converter } │ │
//! │ └──────────────────────────────────────────────────────────────────────┘ │
//! │ │
//! │ ┌──────────────────────────────────────────────────────────────────────┐ │
//! │ │ Broadcast Handler (Unit 0) │ │
//! │ │ • Write to all units • No response expected • Configurable │ │
//! │ └──────────────────────────────────────────────────────────────────────┘ │
//! └────────────────────────────────────────────────────────────────────────────┘
//! ```
//!
//! # Example
//!
//! ```rust
//! use mabi_modbus::unit::{MultiUnitManager, UnitConfig, UnitManagerConfig};
//! use mabi_modbus::types::WordOrder;
//!
//! // Create manager with default configuration
//! let mut manager = MultiUnitManager::new(UnitManagerConfig::default());
//!
//! // Add units
//! manager.add_unit(1, UnitConfig::new("Pump Controller"));
//! manager.add_unit(2, UnitConfig::new("Temperature Sensor"));
//! manager.add_unit(3, UnitConfig::with_word_order("VFD Drive", WordOrder::BigEndianWordSwap));
//!
//! // Get unit's register store
//! if let Some(unit) = manager.get_unit(1) {
//! unit.registers().write_holding_register(0, 1000).unwrap();
//! }
//!
//! // Broadcast to all units (Unit ID 0)
//! manager.broadcast_write_holding_register(0, 0xFF00);
//! ```
pub use crateBroadcastPolicy;
pub use ;
pub use ;