QModbusRequest Class
QModbusRequest は、Modbus ADU 内に格納されるファンクションコードとペイロードを含むコンテナクラスです。詳細...
| ヘッダー: | #include <QModbusRequest> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS SerialBus) target_link_libraries(mytarget PRIVATE Qt6::SerialBus) |
| qmake: | QT += serialbus |
| 継承元: | QModbusPdu |
パブリック型
パブリック関数
| QModbusRequest() | |
| QModbusRequest(const QModbusPdu &pdu) | |
| QModbusRequest(QModbusPdu::FunctionCode code, Args... data) | |
| QModbusRequest(QModbusPdu::FunctionCode code, const QByteArray &data = QByteArray()) |
静的パブリックメンバー
| int | calculateDataSize(const QModbusRequest &request) |
| int | minimumDataSize(const QModbusRequest &request) |
| void | registerDataSizeCalculator(QModbusPdu::FunctionCode fc, QModbusRequest::CalcFuncPtr calculator) |
関連する非メンバー
| QDataStream & | operator>>(QDataStream &stream, QModbusRequest &pdu) |
詳細な説明
Modbusリクエストは通常、FunctionCode を記述する1バイトと、Nバイトのペイロードで構成されます。
典型的な Modbus リクエストは、次のような形式になります。
QModbusRequest request(QModbusRequest::WriteMultipleCoils,
QByteArray::fromHex("0013000a02cd01"));注: QByteArray を受け取るコンストラクタを使用する場合は 、リクエストを作成する前に、そのデータがビッグエンディアンのバイト順になっていることを確認してください。
コンパイル時に値が分かっている場合は、同じリクエストを次のように作成できます:
quint16 startAddress = 19, numberOfCoils = 10;
quint8 payloadInBytes = 2, outputHigh = 0xcd, outputLow = 0x01;
QModbusRequest request(QModbusRequest::WriteMultipleCoils, startAddress, numberOfCoils,
payloadInBytes, outputHigh, outputLow);メンバ型のドキュメント
[alias] QModbusRequest::CalcFuncPtr
QModbusRequest::calculateDataSize と同じシグネチャを持つ、カスタム計算関数へのポインタの typedef。
メンバ関数のドキュメント
[constexpr noexcept default] QModbusRequest::QModbusRequest()
無効な QModbusRequest を生成します。
QModbusRequest::QModbusRequest(const QModbusPdu &pdu)
pdu のコピーを作成します。
template <typename... Args> QModbusRequest::QModbusRequest(QModbusPdu::FunctionCode code, Args... data)
関数コードをcode 、ペイロードをdata に設定したQModbusRequestを生成します。データは変換され、ビッグエンディアンバイト順で格納されます。
注:使用は quint8 およびquint16 に限定されます。これは、QDataStream のストリーム演算子が、生データだけでなく、複合型の場合にはサイズやカウントなども付加してしまうためです。
[explicit] QModbusRequest::QModbusRequest(QModbusPdu::FunctionCode code, const QByteArray &data = QByteArray())
関数コードをcode 、ペイロードをdata に設定したQModbusResponse を構築します。データはすでにビッグエンディアンバイト順で格納されていることが想定されています。
[static] int QModbusRequest::calculateDataSize(const QModbusRequest &request)
リクエストの関数コードとデータに基づいて、request の予想データサイズを計算します。リクエストのデータ部分の合計サイズを返します。サイズを正しく計算できなかった場合は、-1 を返します。
「 minimumDataSize 」および「registerDataSizeCalculator 」も参照してください 。
[static] int QModbusRequest::minimumDataSize(const QModbusRequest &request)
リクエストの関数コードに基づいて、request の予想される最小データサイズを返します。関数コードが不明な場合は、-1 を返します。
[static] void QModbusRequest::registerDataSizeCalculator(QModbusPdu::FunctionCode fc, QModbusRequest::CalcFuncPtr calculator)
この関数は、関数コード `fc` のリクエストデータサイズを計算するためのユーザー定義の実装を登録します。これは、QModbusRequest::calculateDataSize() 内の実装を拡張または上書きするために使用できます。
CalcFuncPtr は、以下のシグネチャを持つカスタムcalculator 関数へのポインタに対するtypedefです。
int myCalculateDataSize(const QModbusRequest &pdu);関連する非メンバー
QDataStream &operator>>(QDataStream &stream, QModbusRequest &pdu)
stream からpdu を読み取り、そのストリームへの参照を返します。
注: PDU内にサイズ指標が欠落している場合、この関数は関数コード QModbusPdu::Diagnostics またはQModbusPdu::EncapsulatedInterfaceTransport のPDUを正しくストリーム処理できない可能性があります。特に、PDUが診断/カプセル化リクエスト自体で終わらないストリームに埋め込まれている場合に、この現象が発生する可能性があります。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.