QModbusRequest Class

QModbusRequest is a container class containing the function code and payload that is stored inside a Modbus ADU. More...

Header: #include <QModbusRequest>
qmake: QT += serialbus
Since: Qt 5.6
Inherits: QModbusPdu

Public Functions

QModbusRequest(const QModbusPdu &pdu)
QModbusRequest(FunctionCode code, const QByteArray &data = QByteArray())

Static Public Members

int calculateDataSize(const QModbusPdu &pdu, const QByteArray &data)
int minimumDataSize(const QModbusPdu &pdu)
  • 1 static public member inherited from QModbusPdu
QDataStream &operator>>(QDataStream &stream, QModbusRequest &pdu)

Detailed Description

QModbusRequest is a container class containing the function code and payload that is stored inside a Modbus ADU.

A Modbus request usually consists of a single byte describing the FunctionCode and N bytes of payload

A typical Modbus request can looks like this:


  QModbusRequest request(QModbusRequest::WriteMultipleCoils,
      QByteArray::fromHex("0013000a02cd01"));

Note: When using the constructor taking the QByteArray, please make sure to convert the containing data to big-endian byte order before creating the request.

The same request can be created like this, if the values are know at compile time:


  quint16 startAddress = 19, numberOfCoils = 10;
  quint8 payloadInBytes = 2, outputHigh = 0xcd, outputLow = 0x01;
  QModbusRequest request(QModbusRequest::WriteMultipleCoils, startAddress, numberOfCoils,
      payloadInBytes, outputHigh, outputLow);

Member Function Documentation

QModbusRequest::QModbusRequest(const QModbusPdu &pdu)

Constructs a copy of pdu.

QModbusRequest::QModbusRequest(FunctionCode code, const QByteArray &data = QByteArray())

Constructs a QModbusResponse with function code set to code and payload set to data. The data is expected to be stored in big-endian byte order already.

[static] int QModbusRequest::calculateDataSize(const QModbusPdu &pdu, const QByteArray &data)

Calculates the expected data size for a request, based on the pdu function code. The data byte array is expected to be the part directly following the function code. Returns the full size of the PDU's data part; -1 if the size could not be properly calculated.

[static] int QModbusRequest::minimumDataSize(const QModbusPdu &pdu)

Returns the minimum data size for a request, based on the pdu function code.

Note: The function returns -1 if the size could not be properly calculated.

Related Non-Members

QDataStream &operator>>(QDataStream &stream, QModbusRequest &pdu)

Reads a pdu from the stream and returns a reference to the stream.

Note: The function might fail to properly stream PDU's with function code QModbusPdu::Diagnostics or QModbusPdu::EncapsulatedInterfaceTransport because of the missing size indicator inside the PDU. In particular this may happen when the PDU is embedded into a stream that doesn't end with the diagnostic/encapsulated request itself.