Skip to content

Commit

Permalink
Update to latest tokio_modbus + modbus_robust
Browse files Browse the repository at this point in the history
  • Loading branch information
bmerry committed Dec 6, 2024
1 parent 47dc619 commit c220b3c
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 15 deletions.
37 changes: 28 additions & 9 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -62,15 +62,15 @@ etherparse = { version = "0.16.0", optional = true }
futures = "0.3.28"
influxdb2 = { version = "0.5.2", default-features = false, features = ["rustls"], optional = true }
log = "0.4.17"
modbus-robust = { version = "0.1.0", optional = true }
modbus-robust = { version = "0.2.0", optional = true }
mqtt-async-client = { version = "0.3.1", optional = true }
pcap = { version = "2.2.0", features = ["capture-stream"], optional = true }
phf = { version = "0.11.2", default-features = false }
serde = { version = "1.0.159", features = ["derive"] }
serde_json = { version = "1.0.95", optional = true }
serde_with = { version = "3.2.0", optional = true }
tokio = { version = "1.21.2", features = ["macros", "rt"] }
tokio-modbus = { version = "0.9.0", default-features = false, features = ["rtu", "tcp"], optional = true }
tokio-modbus = { version = "0.16.0", default-features = false, features = ["rtu", "tcp"], optional = true }
tokio-serial = { version = "5.4.4", optional = true }
toml = "0.8.19"

Expand Down
10 changes: 6 additions & 4 deletions src/modbus.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,14 +53,16 @@ fn default_modbus_id() -> u8 {
1
}

async fn read_values(ctx: &mut Context) -> Result<Vec<f64>, std::io::Error> {
async fn read_values(
ctx: &mut Context,
) -> Result<Vec<f64>, Box<dyn std::error::Error + Send + Sync>> {
let mut values = Vec::with_capacity(FIELDS.len());
let mut parts = [0u16; 2];
for (field, regs) in FIELDS.iter().zip(REGISTERS.iter()) {
let value = if !regs.is_empty() {
for (i, reg) in regs.iter().enumerate() {
// TODO: better error handling
parts[i] = ctx.read_holding_registers(*reg, 1).await?[0];
parts[i] = ctx.read_holding_registers(*reg, 1).await??[0];
}
field.from_u16s(parts[..regs.len()].iter().cloned())
} else {
Expand All @@ -69,7 +71,7 @@ async fn read_values(ctx: &mut Context) -> Result<Vec<f64>, std::io::Error> {
values.push(value);
}
// Get the inverter time, since that'll determine which program is current
let time_regs = ctx.read_holding_registers(REG_CLOCK, 3).await?;
let time_regs = ctx.read_holding_registers(REG_CLOCK, 3).await??;
let hour = time_regs[1] & 0xff;
let minute = time_regs[2] >> 8;
let second = time_regs[2] & 0xff;
Expand Down Expand Up @@ -100,7 +102,7 @@ pub async fn create_stream(
Ok(socket_addr) => modbus_robust::new_tcp_slave(socket_addr, slave),
Err(_) => modbus_robust::new_rtu_slave(&config.device, config.baud, slave),
};
let serial_words = ctx.read_holding_registers(3, 5).await?;
let serial_words = ctx.read_holding_registers(3, 5).await??;
let mut serial_bytes = [0u8; 10];
for i in 0..5 {
let bytes = serial_words[i].to_be_bytes();
Expand Down

0 comments on commit c220b3c

Please sign in to comment.