diff --git a/src/modbus.rs b/src/modbus.rs index 15fb8df..c008410 100644 --- a/src/modbus.rs +++ b/src/modbus.rs @@ -46,14 +46,14 @@ pub fn start_modbus_polling_thread( match typ { "INT16" => client.read_input_registers(addr, 1).await.ok().map(|v| { let raw = v[0] as i16; - if raw == -32768 || raw == 32767 { None } else { Some(raw as f64 * factor) } + if raw == -32768 || raw == 32767 { None } else { Some(((raw as f64 * factor) * 10.0).round() / 10.0) } }).flatten(), "UINT16" => client.read_input_registers(addr, 1).await.ok().map(|v| { - if v[0] == 0xFFFF { None } else { Some(v[0] as f64 * factor) } + if v[0] == 0xFFFF { None } else { Some(((v[0] as f64 * factor) * 10.0).round() / 10.0) } }).flatten(), "UINT32" => client.read_input_registers(addr, 2).await.ok().map(|v| { let raw = (v[0] as u32) << 16 | (v[1] as u32); - if raw == 0xFFFFFFFF { None } else { Some(raw as f64 * factor) } + if raw == 0xFFFFFFFF { None } else { Some(((raw as f64 * factor) * 10.0).round() / 10.0) } }).flatten(), _ => Some(0.0), } @@ -75,14 +75,14 @@ pub fn start_modbus_polling_thread( match typ { "INT16" => client.read_holding_registers(addr, 1).await.ok().map(|v| { let raw = v[0] as i16; - if raw == -32768 || raw == 32767 { None } else { Some(raw as f64 * factor) } + if raw == -32768 || raw == 32767 { None } else { Some(((raw as f64 * factor) * 10.0).round() / 10.0) } }).flatten(), "UINT16" => client.read_holding_registers(addr, 1).await.ok().map(|v| { - if v[0] == 0xFFFF { None } else { Some(v[0] as f64 * factor) } + if v[0] == 0xFFFF { None } else { Some(((v[0] as f64 * factor) * 10.0).round() / 10.0) } }).flatten(), "UINT32" => client.read_holding_registers(addr, 2).await.ok().map(|v| { let raw = (v[0] as u32) << 16 | (v[1] as u32); - if raw == 0xFFFFFFFF { None } else { Some(raw as f64 * factor) } + if raw == 0xFFFFFFFF { None } else { Some(((raw as f64 * factor) * 10.0).round() / 10.0) } }).flatten(), _ => Some(0.0), }