QModbusRequest is a container class containing the function code and payload that is stored inside a Modbus ADU. 更多...
头: | #include <QModbusRequest> |
CMake: |
find_package(Qt6 REQUIRED COMPONENTS SerialBus)
target_link_libraries(mytarget PRIVATE Qt6::SerialBus) |
qmake: | QT += serialbus |
继承: | QModbusPdu |
CalcFuncPtr |
QModbusRequest () | |
QModbusRequest (const QModbusPdu & pdu ) | |
QModbusRequest (QModbusPdu::FunctionCode code , const QByteArray & data = QByteArray()) | |
QModbusRequest (QModbusPdu::FunctionCode code , Args... data ) |
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 .
[constexpr noexcept]
QModbusRequest::
QModbusRequest
()
Constructs an invalid QModbusRequest.
构造副本为 pdu .
[explicit]
QModbusRequest::
QModbusRequest
(
QModbusPdu::FunctionCode
code
, const
QByteArray
&
data
= QByteArray())
构造 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.
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.
[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 ().
The
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.