QModbusRequest is a container class containing the function code and payload that is stored inside a Modbus ADU. 更多...
头: | #include <QModbusRequest> |
qmake: | QT += serialbus |
Since: | Qt 5.8 |
继承: | QModbusPdu |
CalcFuncPtr |
QModbusRequest (QModbusPdu::FunctionCode code , Args... data ) | |
QModbusRequest (QModbusPdu::FunctionCode code , const QByteArray & data = QByteArray()) | |
QModbusRequest (const QModbusPdu & pdu ) | |
QModbusRequest () |
int | calculateDataSize (const QModbusRequest & request ) |
int | minimumDataSize (const QModbusRequest & request ) |
void | registerDataSizeCalculator (QModbusPdu::FunctionCode fc , QModbusRequest::CalcFuncPtr calculator ) |
QDataStream & | operator>> (QDataStream & stream , QModbusRequest & pdu ) |
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"));
注意:
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 known at compile time:
quint16 startAddress = 19, numberOfCoils = 10; quint8 payloadInBytes = 2, outputHigh = 0xcd, outputLow = 0x01; QModbusRequest request(QModbusRequest::WriteMultipleCoils, startAddress, numberOfCoils, payloadInBytes, outputHigh, outputLow);
[alias]
QModbusRequest::
CalcFuncPtr
Typedef for a pointer to a custom calculator function with the same signature as QModbusRequest::calculateDataSize .
Constructs a QModbusRequest with function code set to code and payload set to data . The data is converted and stored in big-endian byte order.
注意:
Usage is limited
quint8
and
quint16
only. This is because
QDataStream
stream operators will not only append raw data, but also e.g. size, count, etc. for complex types.
构造 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.
构造副本为 pdu .
Constructs an invalid QModbusRequest.
[static]
int
QModbusRequest::
calculateDataSize
(const
QModbusRequest
&
request
)
Calculates the expected data size for
request
based on the request's function code and data. Returns the full size of the request's data part;
-1
if the size could not be properly calculated.
另请参阅 minimumDataSize and registerDataSizeCalculator .
[static]
int
QModbusRequest::
minimumDataSize
(const
QModbusRequest
&
request
)
Returns the expected minimum data size for
request
based on the request's function code;
-1
if the function code is not known.
[static]
void
QModbusRequest::
registerDataSizeCalculator
(
QModbusPdu::FunctionCode
fc
,
QModbusRequest::CalcFuncPtr
calculator
)
This function registers a user-defined implementation to calculate the request data size for function code fc . It can be used to extend or override the implementation inside QModbusRequest::calculateDataSize ().
CalcFuncPtr
is a typedef for a pointer to a custom
calculator
function with the following signature:
int myCalculateDataSize(const QModbusRequest &pdu);
读取 pdu 从 stream 并返回流引用。
注意: 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.