-
Bug
-
Resolution: Done
-
P2: Important
-
5.6.1, 5.7.0
-
None
-
OS: Ubuntu 15.10, Windows 7.
Qt: 5.7.0, opensource.
-
1683fc48e1ee63c9e5687bcdf55d45bcafe8e6f8
Problem in file qmodbuspdu.cpp, QModbusResponse::calculateDataSize.
case QModbusResponse::ReadCoils:
case QModbusResponse::ReadDiscreteInputs:
case QModbusResponse::ReadHoldingRegisters:
case QModbusResponse::ReadInputRegisters:
case QModbusResponse::GetCommEventLog:
case QModbusResponse::ReadFileRecord:
case QModbusResponse::WriteFileRecord:
case QModbusResponse::ReadWriteMultipleRegisters:
case QModbusResponse::ReportServerId:
if (response.dataSize() >= 1)
size = 1 /*byte count*/ + response.data()[0] /*actual bytes*/;
break;
64 registers is 128 bytes, but response.data() is QByteArray. QByteArray use (signed) char. Modbus use unsigned char for data size. 128 (unsigned char) == -128 (signed char, cast to int). Size calculation is incorrect.
Solution variant:
size = 1 /*byte count*/ + static_cast<quint8>(response.data()[0]) /*actual bytes*/;