-
Notifications
You must be signed in to change notification settings - Fork 22
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
Sorry, English is not my main language. The following content will be translated and modified by AI
Excuse me, is this issue a feature or a bug:
I passed in a 200-byte buff, but the function returned the len of the buff
let mut ret = Vec::new();
let (event, pack) = self.extract_pack();
+ let mut wirte_buff: [u8; 200] = [0; 200];
let handler_ret = match event {
CmdTableWidgetEvent::Read => self.modbus_encoder(
modbus_client,
modbus_addr,
RequestPdu(modbus_core::Request::ReadHoldingRegisters(
pack[0].addr,
pack.len() as u16,
)),
),
CmdTableWidgetEvent::Write => self.modbus_encoder(
modbus_client,
modbus_addr,
RequestPdu(if pack.len() > 1 {
let addr = pack[0].addr;
let words: Vec<u16> = pack.into_iter().map(|it| it.value).collect();
// TODO: unwrap() Risk
modbus_core::Request::WriteMultipleRegisters(
addr,
+ Data::from_words(words.as_slice(), &mut wirte_buff).unwrap(),
)
} else {
modbus_core::Request::WriteSingleRegister(pack[0].addr, pack[0].value)
}),
),
};
The problem lies here
# src/frame/mod.rs : 378
impl Request<'_> {
/// Number of bytes required for a serialized PDU frame.
#[must_use]
pub const fn pdu_len(&self) -> usize {
match *self {
Self::ReadCoils(_, _)
| Self::ReadDiscreteInputs(_, _)
| Self::ReadInputRegisters(_, _)
| Self::ReadHoldingRegisters(_, _)
| Self::WriteSingleRegister(_, _)
| Self::WriteSingleCoil(_, _) => 5,
Self::WriteMultipleCoils(_, coils) => 6 + coils.packed_len(),
- Self::WriteMultipleRegisters(_, words) => 6 + words.data.len(),
+ Self::WriteMultipleRegisters(_, words) => 6 + words.len(),
- Self::ReadWriteMultipleRegisters(_, _, _, words) => 10 + words.data.len(),
+ Self::ReadWriteMultipleRegisters(_, _, _, words) => 10 + words.len(),
Self::Custom(_, data) => 1 + data.len(),
#[cfg(feature = "rtu")]
_ => todo!(), // TODO
}
}
}Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working