QModbusPdu Class
QModbusPdu は、Modbus ADU 内に格納されるファンクションコードとペイロードを含む抽象コンテナクラスです。詳細...
| ヘッダー: | #include <QModbusPdu> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS SerialBus) target_link_libraries(mytarget PRIVATE Qt6::SerialBus) |
| qmake: | QT += serialbus |
| 継承元: |
パブリック型
| enum | ExceptionCode { IllegalFunction, IllegalDataAddress, IllegalDataValue, ServerDeviceFailure, Acknowledge, …, ExtendedException } |
| enum | FunctionCode { Invalid, ReadCoils, ReadDiscreteInputs, ReadHoldingRegisters, ReadInputRegisters, …, UndefinedFunctionCode } |
パブリック関数
| QModbusPdu() | |
| virtual | ~QModbusPdu() |
| QByteArray | data() const |
| qint16 | dataSize() const |
| void | decodeData(Args &&... data) const |
| void | encodeData(Args... data) |
| QModbusPdu::ExceptionCode | exceptionCode() const |
| QModbusPdu::FunctionCode | functionCode() const |
| bool | isException() const |
| bool | isValid() const |
| void | setData(const QByteArray &data) |
| virtual void | setFunctionCode(QModbusPdu::FunctionCode code) |
| qint16 | size() const |
静的パブリックメンバー
| const quint8 | ExceptionByte |
Protected関数
| QModbusPdu(QModbusPdu::FunctionCode code, const QByteArray &data) | |
| QModbusPdu(const QModbusPdu &other) | |
| QModbusPdu & | operator=(const QModbusPdu &other) |
関連する非メンバー
| QDataStream & | operator<<(QDataStream &stream, const QModbusPdu &pdu) |
| QDebug | operator<<(QDebug debug, const QModbusPdu &pdu) |
メンバ型のドキュメント
enum QModbusPdu::ExceptionCode
この列挙型は、Modbus例外コードで定義されているすべての可能なエラー状態を表しています。これらは、リクエストへの応答において適切なエラー状態を確認した後、サーバーによって設定され、クライアントは例外コードに基づいて処理を行うためにこれらをデコードする必要があります。
| 定数 | 値 | 説明 |
|---|---|---|
QModbusPdu::IllegalFunction | 0x01 | デバイスで機能コードがサポートされていません。 |
QModbusPdu::IllegalDataAddress | 0x02 | クエリで受信したデータアドレスが、Modbus サーバーで許可されていないアドレスです。 |
QModbusPdu::IllegalDataValue | 0x03 | リクエストデータフィールドに含まれる値は、Modbus サーバーで許可されていない値です。 |
QModbusPdu::ServerDeviceFailure | 0x04 | サーバーが要求されたアクションを実行しようとした際に、回復不可能なエラーが発生しました。 |
QModbusPdu::Acknowledge | 0x05 | プログラミングコマンドと組み合わせて特別に使用されます。 |
QModbusPdu::ServerDeviceBusy | 0x06 | サーバーは、処理に時間がかかるプログラムコマンドの処理を行っています。 |
QModbusPdu::NegativeAcknowledge | 0x07 | サーバーは、クエリで受信したプログラム機能を実行できません。このコードは、プログラミング要求が失敗した場合に返されます。クライアントは、サーバーに診断情報またはエラー情報を要求する必要があります。 |
QModbusPdu::MemoryParityError | 0x08 | 拡張ファイル領域の一貫性チェックに失敗したことを示します。機能コード 20 および 21 と組み合わせて使用されます。この例外コードは、伝送回線のパリティ設定とは関係なく、サーバーのファイルレコードの内部メモリのみに関係しています。 |
QModbusPdu::GatewayPathUnavailable | 0x0A | ゲートウェイが、リクエストを処理するために入力ポートから出力ポートへの内部通信パスを割り当てることができなかったことを示します。 |
QModbusPdu::GatewayTargetDeviceFailedToRespond | 0x0B | ゲートウェイの背後にあるターゲットデバイスから応答が得られなかったことを示します。通常、これはターゲットデバイスがネットワーク上でオンラインになっていないことを意味します。 |
QModbusPdu::ExtendedException | 0xFF | これは、Modbus仕様に基づく拡張例外です。一般的に、このコードは、別途詳細が説明されている例外を表すために使用されます。 |
enum QModbusPdu::FunctionCode
サーバーが要求する機能コードと、そのアクションの暗黙的なタイプを定義します。すべてのModbusデバイスが、同じ機能コードセットに対応しているわけではありません。
| 定数 | 値 | 説明 |
|---|---|---|
QModbusPdu::Invalid | 0x00 | デフォルトのコンストラクタによって設定されるため、使用しないでください。 |
QModbusPdu::ReadCoils | 0x01 | デバイスから 1 つ以上のコイルのステータスを要求します。 |
QModbusPdu::ReadDiscreteInputs | 0x02 | デバイスから 1 つ以上の入力レジスタのステータスを要求します。 |
QModbusPdu::ReadHoldingRegisters | 0x03 | デバイスから 1 つ以上の保持レジスタ値のステータスを要求します。 |
QModbusPdu::ReadInputRegisters | 0x04 | デバイスから 1 つ以上の入力レジスタ値のステータスを要求します。 |
QModbusPdu::WriteSingleCoil | 0x05 | デバイス上の 1 つのコイルへの書き込みを要求します。 |
QModbusPdu::WriteSingleRegister | 0x06 | デバイス上の 1 つの保持レジスタへの書き込みを要求します。 |
QModbusPdu::ReadExceptionStatus | 0x07 | デバイス上の 8 つの例外ステータス出力のステータスを要求します。 |
QModbusPdu::Diagnostics | 0x08 | クライアント・サーバー通信システムのチェック、または内部のチェックを行うための一連のテストに使用されます。 |
QModbusPdu::GetCommEventCounter | 0x0B | デバイスの通信イベントカウンタからステータスワードとイベントカウントを要求します。 |
QModbusPdu::GetCommEventLog | 0x0C | デバイスからステータスワード、イベントカウント、メッセージカウント、およびイベントバイトのフィールドを要求します。 |
QModbusPdu::WriteMultipleCoils | 0x0F | デバイス上の 1 つ以上のコイルへの書き込みを要求します。 |
QModbusPdu::WriteMultipleRegisters | 0x10 | デバイス上の 1 つ以上の保持レジスタへの書き込みを要求します。 |
QModbusPdu::ReportServerId | 0x11 | デバイスのタイプ、現在のステータス、およびデバイス固有のその他の情報の説明を要求します。 |
QModbusPdu::ReadFileRecord | 0x14 | ファイルレコードの読み取りを要求します。 |
QModbusPdu::WriteFileRecord | 0x15 | ファイルレコードの書き込みを要求します。 |
QModbusPdu::MaskWriteRegister | 0x16 | AND または OR マスクと、レジスタの現在の内容を組み合わせて、指定された保持レジスタの内容を変更する要求。 |
QModbusPdu::ReadWriteMultipleRegisters | 0x17 | 1 つ以上のホールドレジスタのステータスを要求すると同時に、デバイス上の 1 つ以上のホールドレジスタへの書き込みを要求します。 |
QModbusPdu::ReadFifoQueue | 0x18 | リモートデバイス内のレジスタの FIFO (先入れ先出し) キューの内容を読み取るよう要求します。 |
QModbusPdu::EncapsulatedInterfaceTransport | 0x2B | Modbus 仕様の付録 A を参照してください。 |
QModbusPdu::UndefinedFunctionCode | 0x100 | 使用しないでください。 |
メンバ関数のドキュメント
[constexpr noexcept default] QModbusPdu::QModbusPdu()
無効な QModbusPdu を生成します。
[protected] QModbusPdu::QModbusPdu(QModbusPdu::FunctionCode code, const QByteArray &data)
ファンクションコードをcode に、ペイロードをdata に設定したQModbusPduを生成します。データはすでにビッグエンディアンバイト順で格納されているものと想定されます。
[noexcept protected default] QModbusPdu::QModbusPdu(const QModbusPdu &other)
other のコピーであるQModbusPduを生成します。
[virtual noexcept] QModbusPdu::~QModbusPdu()
QModbusPdu を破棄します。
QByteArray QModbusPdu::data() const
関数コードを除いた PDU のペイロードを返します。ペイロードはビッグエンディアン順で格納されます。
setData()も参照してください 。
qint16 QModbusPdu::dataSize() const
関数コードを除いたPDUのデータサイズを返します。
template <typename... Args> void QModbusPdu::decodeData(Args &&... data) const
ペイロードをホストのエンディアンに変換し、data に読み込みます。データは可変長引数リストである場合があります。
QModbusResponsePdu response(QModbusPdu::ReportServerId);
response.encodeData(quint8(0x02), quint8(0x01), quint8(0xff));
quint8 count, id, run;
response.decodeData(&count, &id, &run);注:使用は quint8 およびquint16 に限定されます。これは、QDataStream のストリーム演算子が、生データだけでなく、複合型の場合、サイズやカウントなども付加してしまうためです。
template <typename... Args> void QModbusPdu::encodeData(Args... data)
ペイロードをdata に設定します。データは変換され、ビッグエンディアンのバイト順で格納されます。
QModbusRequestPdu request(QModbusPdu::ReadCoils);
// starting address and quantity of coils
request.encodeData(quint16(0x0c), quint16(0x0a));注:使用は quint8 およびquint16 に限定されます。これは、QDataStream のストリーム演算子が、生データだけでなく、複合型の場合にはサイズやカウントなども付加してしまうためです。
QModbusPdu::ExceptionCode QModbusPdu::exceptionCode() const
レスポンスの例外コードを返します。
QModbusPdu::FunctionCode QModbusPdu::functionCode() const
PDUのファンクションコードを返します。
setFunctionCode()も参照してください 。
bool QModbusPdu::isException() const
PDUに例外コードが含まれている場合はtrueを返し、そうでない場合はfalseを返します。
bool QModbusPdu::isValid() const
PDUが有効な場合はtrueを返し、そうでない場合はfalseを返します。
PDUは、メッセージコードが1から255(10進数)の範囲にあり、かつPDUの合計サイズ(関数コード+データ)が253バイトを超えない場合に、有効とみなされます。デフォルトで生成されたPDUは無効です。
void QModbusPdu::setData(const QByteArray &data)
PDUの機能ペイロードをdata に設定します。データは、すでにビッグエンディアンのバイト順で格納されていることが想定されています。
data()も参照してください 。
[virtual] void QModbusPdu::setFunctionCode(QModbusPdu::FunctionCode code)
PDUの機能コードをcode に設定します。
functionCode()も参照してください 。
qint16 QModbusPdu::size() const
PDUの全サイズ(機能コードおよびデータサイズを含む)を返します。
[noexcept protected default] QModbusPdu &QModbusPdu::operator=(const QModbusPdu &other)
other のコピーを作成し、それをこのQModbusPdu オブジェクトに割り当てます。
メンバ変数のドキュメント
const quint8 QModbusPdu::ExceptionByte
この変数は 0x80 に初期化されます。
例外は、定義されたパケット形式で報告されます。要求元クライアントには、元のファンクションコードと同じ値のファンクションコードが返されますが、その最上位ビットがセットされています。これは、元のファンクションコードの値に 0x80 を加算した値に相当します。
このフィールドは、生の Modbus パケットの機能フィールドにある例外ビットをマスクするために使用できます。
関連する非メンバー
QDataStream &operator<<(QDataStream &stream, const QModbusPdu &pdu)
pdu をstream に書き込み、そのストリームへの参照を返します。
QDebug operator<<(QDebug debug, const QModbusPdu &pdu)
Modbusのpdu をdebug ストリームに書き込みます。
© 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.