QModbusPdu Class
QModbusPduはModbus ADU内部に格納されるファンクション・コードとペイロードを含む抽象コンテナ・クラスです。詳細...
Header: | #include <QModbusPdu> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS SerialBus) target_link_libraries(mytarget PRIVATE Qt6::SerialBus) |
qmake: | QT += serialbus |
Inherited By: |
パブリック・タイプ
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 |
保護された関数
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) |
詳細説明
このクラスは Modbus Application Protocol Specification 1.1b で定義されている生の Modbus プロトコル・パケットへのアクセスを提供します。
メンバ・タイプ・ドキュメント
enum QModbusPdu::ExceptionCode
この列挙型は Modbus Exception Codes で定義されたすべての可能なエラー状態を記述します。これらはリクエストへのリプライで適切なエラー条件をチェックした後、サーバによって設定され、例外コードを操作するためにクライアントによってデコードされなければなりません。
定数 | 値 | 説明 |
---|---|---|
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 仕様書の Annex A を参照してください。 |
QModbusPdu::UndefinedFunctionCode | 0x100 | 使用しないでください。 |
メンバ関数ドキュメント
[constexpr noexcept]
QModbusPdu::QModbusPdu()
無効な QModbusPdu を構築します。
[protected]
QModbusPdu::QModbusPdu(QModbusPdu::FunctionCode code, const QByteArray &data)
ファンクション・コードがcode に設定され、ペイロードがdata に設定された QModbusPdu を構築します。 データは既にビッグエンディアン・バイト順で格納されていることが期待されます。
[noexcept protected]
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 が有効な場合は真を、そうでない場合は偽を返します。
メッセージコードが 10 進数で 1 から 255 の範囲にあり、PDU の複合サイズ(ファンクションコード + データ)が 253 バイトを超えない場合、PDU は有効であるとみなされる。デフォルトで構築された 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]
QModbusPdu &QModbusPdu::operator=(const QModbusPdu &other)
other のコピーを作成し、このQModbusPdu オブジェクトに割り当てる。
メンバ変数ドキュメント
const quint8 QModbusPdu::ExceptionByte
この変数は0x80に初期化される。
例外は、定義されたパケット・フォーマットで報告される。関数コードは、最上位ビットが設定されている以外は、元の関数コードと同じである。これは、元のファンクションコードの値に0x80を追加するのと同じである。
このフィールドは生の Modbus パケットのファンクション・フィールドの例外ビットをマスクするために使用されます。
関連する非会員
QDataStream &operator<<(QDataStream &stream, const QModbusPdu &pdu)
stream にpdu を書き込み、ストリームへの参照を返します。
QDebug operator<<(QDebug debug, const QModbusPdu &pdu)
Modbuspdu をdebug ストリームに書き込みます。
©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。