QModbusServer Class
QModbusServer クラスは Modbus リクエストを受信し処理するインターフェースです。詳細...
ヘッダー | #include <QModbusServer> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS SerialBus) target_link_libraries(mytarget PRIVATE Qt6::SerialBus) |
qmake: | QT += serialbus |
を継承する: | QModbusDevice |
によって継承される: |
パブリックな型
enum | Option { DiagnosticRegister, ExceptionStatusOffset, DeviceBusy, AsciiInputDelimiter, ListenOnlyMode, …, UserOption } |
パブリック関数
QModbusServer(QObject *parent = nullptr) | |
bool | data(QModbusDataUnit *newData) const |
bool | data(QModbusDataUnit::RegisterType table, quint16 address, quint16 *data) const |
virtual bool | processesBroadcast() const |
int | serverAddress() const |
bool | setData(const QModbusDataUnit &newData) |
bool | setData(QModbusDataUnit::RegisterType table, quint16 address, quint16 data) |
virtual bool | setMap(const QModbusDataUnitMap &map) |
void | setServerAddress(int serverAddress) |
virtual bool | setValue(int option, const QVariant &newValue) |
virtual QVariant | value(int option) const |
シグナル
void | dataWritten(QModbusDataUnit::RegisterType table, int address, int size) |
保護された関数
virtual QModbusResponse | processPrivateRequest(const QModbusPdu &request) |
virtual QModbusResponse | processRequest(const QModbusPdu &request) |
virtual bool | readData(QModbusDataUnit *newData) const |
virtual bool | writeData(const QModbusDataUnit &newData) |
詳細説明
Modbusネットワークは複数のModbusサーバーを持つことができます。Modbus サーバーはQModbusClient で表される Modbus クライアントによって読み書きされます。QModbusServer は Modbus バックエンドと通信し、ユーザに便利な API を提供します。
メンバー・タイプ・ドキュメント
enum QModbusServer::Option
各 Modbus サーバーはそれぞれオプションと関連した値のセットを持っています。
汎用オプション(および関連するタイプ)は以下のとおりです:
定数 | 値 | 説明 |
---|---|---|
QModbusServer::DiagnosticRegister | 0 | サーバの診断レジスタ。quint16 |
QModbusServer::ExceptionStatusOffset | 1 | サーバーの例外ステータス・バイト・オフセット。quint16 |
QModbusServer::DeviceBusy | 2 | サーバーが長時間プログラム・コマンドを処理していることを示すフラグ。quint16 |
QModbusServer::AsciiInputDelimiter | 3 | Modbus ASCII メッセージ・デリミタ。char |
QModbusServer::ListenOnlyMode | 4 | サーバのリッスン・オンリー・モードを設定するフラグ。この機能は通常 Modbus シリアル・デバイスによってのみサポートされます。bool |
QModbusServer::ServerIdentifier | 5 | サーバー・アドレスではなく、サーバーの識別子。quint8 |
QModbusServer::RunIndicatorStatus | 6 | サーバの実行インジケータ。quint8 |
QModbusServer::AdditionalData | 7 | サーバーの追加データ。QByteArray |
QModbusServer::DeviceIdentification | 8 | サーバーの物理的および機能的説明。QModbusDeviceIdentification |
ユーザー・オプション
定数 | 値 | 説明 |
---|---|---|
QModbusServer::UserOption | 0x100 | ユーザー固有の目的で使用できる最初のオプション。 |
ユーザーオプションでは、どの型を使用するかを決定し、コンポーネントが値にアクセスしたり設定したりするときに正しい型を使用するようにするのは開発者次第です。
メンバ関数のドキュメント
[explicit]
QModbusServer::QModbusServer(QObject *parent = nullptr)
指定されたparent で Modbus サーバーを構築します。
bool QModbusServer::data(QModbusDataUnit *newData) const
newData で指定されたレジスタ範囲の値を返す。
newData には、有効なレジスタ・タイプ、開始アドレス、および valueCount を指定しなければならない。返される には、与えられた範囲に関連するレジスタ値が含まれる。newData
newData に有効なレジスタ・タイプが含まれているが、開始アドレスが負の値である場合、レジスタ・マップ全体が返され、newData が適切なサイズに設定される。
setData()も参照のこと 。
bool QModbusServer::data(QModbusDataUnit::RegisterType table, quint16 address, quint16 *data) const
Modbus サーバーに保存されているデータを読み取ります。Modbus サーバーには 4 つのテーブル (table) があり、それぞれユニークなaddress フィールドがあり、希望のフィールドからdata を読み込むために使用されます。各テーブルの詳細についてはQModbusDataUnit::RegisterType を参照してください。アドレスがマップ範囲外であるか、レジスタ・タイプが定義されていない場合はfalse
を返します。
QModbusDataUnit::RegisterType およびsetData()も参照のこと 。
[signal]
void QModbusServer::dataWritten(QModbusDataUnit::RegisterType table, int address, int size)
このシグナルは、Modbusクライアントが1つ以上のフィールドのデータをModbusサーバに書き込んだときに発行されます。シグナルは書き込まれたフィールドの情報を含みます:
- 書き込まれたレジスタ・タイプ (table)、
- address 書き込まれた最初のフィールドの
- そしてaddress から始まる連続したフィールドのsize です。
値が変化しないため、書き込まれるフィールドが変化していない場合、シグナルは発せられません。
[virtual protected]
QModbusResponse QModbusServer::processPrivateRequest(const QModbusPdu &request)
この関数はカスタムModbusサーバーによって実装されるべきである。指定されたrequest が標準 Modbus 要求でない場合、processRequest() によって呼び出されます。
この関数を上書きすることで、Modbus アプリケーション・プロトコル仕様 1.1b で指定されていない追加ファンクション・コードとサブファンクション・コードを扱うことができます。再実装は、カスタム Modbus 実装が扱わないすべての未知のファンクション・コードに対して例外レスポンスが返されるように、この関数を再度呼び出す必要があります。
このデフォルトの実装は、request ファンクション・コードとエラー・コードが不正ファンクションに設定されたQModbusExceptionResponse
を返します。
processRequest()も参照してください 。
[virtual protected]
QModbusResponse QModbusServer::processRequest(const QModbusPdu &request)
Modbus クライアントrequest を処理し、Modbus レスポンスを返す。この関数はリクエストの性質に応じてQModbusResponse またはQModbusExceptionResponse を返します。
この関数のデフォルト実装は、Modbus アプリケーション・プロトコル仕様 1.1b で定義されているすべての標準 Modbus ファンクション・コードを処理します。仕様に含まれていない他のすべての Modbus ファンクション・コードはprocessPrivateRequest() に転送されます。
標準 Modbus ファンクション・コード・リクエストのデフォルト処理は、この関数を再インプ リメントすることで上書きできます。オーバーライドは問題のリクエスト・タイプを処理し、適切なQModbusResponse を返さなければなりません。一般的な理由は、イーサネットや Modbus Plus トランスポート・レイヤのシリアル・ライン診断のような特定のインプリメンテーションで望まれないデータ値やファンクション・コードのファンクション・コード・リクエストをフィルタリングしてリード/ライト・アクセスを制限することです。他の全てのリクエスト・タイプはこのデフォルト・インプリメンテーションに転送されるべきです。
注意: この関数は非標準 Modbus リクエスト・タイプのカスタム実装を提供するためにオーバーライドされるべきではありません。
processPrivateRequest()も参照してください 。
[virtual]
bool QModbusServer::processesBroadcast() const
サブクラスは、トランスポートレイヤーがブロードキャストを処理する場合に はこの関数を実装するべきである。その実装は、現在処理されているリクエストがブロードキャストリクエスト であればtrue
、そうでなければfalse
を返すべきである。デフォルトの実装は常にfalse
を返す。
注意: この関数の戻り値は、processRequest()またはprocessPrivateRequest()の中 でのみ意味を持つ。そうでなければ、最後に処理されたリクエストがブロードキャ ストリクエストであったことを示すだけである。
[virtual protected]
bool QModbusServer::readData(QModbusDataUnit *newData) const
newData で指定されたレジスタ範囲の値を読み取り、データをnewData に書き戻す。成功した場合はtrue
を返し、newData が0
である場合、newData の範囲がマップ範囲外である場合、または registerType() が存在しない場合はfalse
を返す。
int QModbusServer::serverAddress() const
この Modbus サーバー・インスタンスのアドレスを返します。
setServerAddress()も参照してください 。
bool QModbusServer::setData(const QModbusDataUnit &newData)
Modbus サーバー・マップにnewData を書き込む。newData の範囲がマップの範囲外の場合はfalse
を返す。
呼び出しが成功した場合、dataWritten() シグナルが発せられます。アドレス指定されたレジスタが変更されていない場合、シグナルは発せられないことに注意してください。これは、newData がすでにそのレジスタとまったく同じ値を含んでいる場合に起こりうる。それでも、この関数はそのような場合にtrue
を返す。
data()も参照のこと 。
bool QModbusServer::setData(QModbusDataUnit::RegisterType table, quint16 address, quint16 data)
Modbus サーバーにデータを書き込みます。Modbus サーバーには 4 つのテーブル (table) があり、それぞれユニークなaddress フィールドがあり、希望のフィールドにdata を書き込むために使用されます。マップ範囲外のアドレスの場合はfalse
を返す。
呼び出しが成功するとdataWritten() シグナルが発せられる。data が変更されていない場合、シグナルは発せられないことに注意。それにもかかわらず、この関数はそのような場合にtrue
を返す。
QModbusDataUnit::RegisterType 、data ()、dataWritten ()も参照のこと 。
[virtual]
bool QModbusServer::setMap(const QModbusDataUnitMap &map)
他のModBusクライアントからのリクエストのために、登録されたマップ構造をmap に設定する。 レジスタ値はゼロで初期化される。成功するとtrue
を返し、そうでなければfalse
を返す。
接続前にこの関数を呼び出さなかった場合、ゼロ・エントリーのデフォルト・レジスタが設定される。
注意: この関数を呼び出すと、以前に設定されたレジスタ値はすべて破棄されます。
void QModbusServer::setServerAddress(int serverAddress)
この Modbus サーバー・インスタンスのアドレスをserverAddress に設定します。
serverAddress()も参照 。
[virtual]
bool QModbusServer::setValue(int option, const QVariant &newValue)
option にnewValue を設定し、成功すればtrue
を返し、そうでなければfalse
を返す。
注意: オプションの関連型がquint8
またはquint16
で、newValue の型の方が大きい場合、データは切り捨てられるか、会話は失敗する。
キー | 説明 |
---|---|
QModbusServer::DiagnosticRegister | サーバーの診断レジスタをデバイス固有のエンコーディングでnewValue に設定する。 デフォルト値は0x0000 である。このレジスタのビット値については、デバイス固有のドキュメントが必要である。 |
QModbusServer::ExceptionStatusOffset | サーバーの例外ステータス・バイト・オフセットを、コイル(0x レジスタ)の絶対オフセット・アドレスであるnewValue に設定します。Modbus レジスタ・テーブルは0x0000h で始まります。デフォルト値は0x0000 で、Modicon 984 CPU と同様の例外ステータス・コイル(コイル 1-8)を使用します。この関数は、コイル・レジスタがステータス・コイルの保存と取得に必要な 8 ビットを含んでいる場合は |
QModbusServer::DeviceBusy | サーバーが長時間プログラム・コマンドの処理中であることを示すフラグを設定します。有効な値は、0x0000 (ビジーではない)および0xffff (ビジー)である。デフォルト値は0x0000 。 |
QModbusServer::AsciiInputDelimiter | newValue は、今後の Modbus ASCII メッセージのメッセージ区切り文字になります。デフォルト値は\n です。 |
QModbusServer::ListenOnlyMode | サーバーのリッスン・オンリー・ステートをnewValue に設定します。 リッスン・オンリー・モードがtrue に設定されている場合、メッセージは監視されますが、レスポンスは送信されません。デフォルト値はfalse です。 |
QModbusServer::ServerIdentifier | サーバーの製造者識別子をnewValue に設定します。設定可能な値は0x00 から 0xff の範囲です。デフォルト値は0x0a 。 |
QModbusServer::RunIndicatorStatus | サーバーの稼動インジケータ・ステータスをnewValue に設定する。 このデータは、QModbusPdu::ReportServerId 関数コードの補遺として使用される。有効な値は、0x00 (OFF)および0xff (ON)。デフォルト値は0xff (ON)。 |
QModbusServer::AdditionalData | サーバーの追加データをnewValue に設定する。このデータは、QModbusPdu::ReportServerId ファンクション・コードの追加データとして使用される。レスポンス・メッセージ・サイズの制限に合わせるため、最大データ・サイズは249バイトを超えることはできない。デフォルト値はQt Modbus Server である。 |
QModbusServer::DeviceIdentification | サーバーの物理的および機能的記述を設定する。デフォルトでは、追加のデバイス識別データは設定されない。 |
QModbusServer::UserOption | ユーザー・オプションの値をnewValue に設定する。 注: ユーザー・オプションについて、どの型を使用するかを決定し、コンポーネントが値へのアクセスや設定時に正しい型を使用するようにするのは、開発者次第である。 |
value()も参照のこと 。
[virtual]
QVariant QModbusServer::value(int option) const
option の値、またはオプションが設定されていない場合は無効なQVariant
を返す。
オプション | 説明 |
---|---|
QModbusServer::DiagnosticRegister | サーバーの診断レジスタ値を返す。診断レジスタには、各ビットが特定の意味を持つデバイス固有の内容が含まれています。 |
QModbusServer::ExceptionStatusOffset | コイル・レジスタ内の例外ステータス・バイト位置のオフセット・アドレスを返します。 |
QModbusServer::DeviceBusy | サーバーが長時間プログラム・コマンドの処理中であるかどうかを示すフラグを返します。 |
QModbusServer::AsciiInputDelimiter | Modbus ASCII メッセージのメッセージ区切り記号を返します。 |
QModbusServer::ListenOnlyMode | サーバーのリッスン・オンリー・ステートを返します。メッセージは監視されていますが、レスポンスは送信されません。 |
QModbusServer::ServerIdentifier | サーバーの製造者識別子コードを返します。これは0x00 から 0xff の範囲の任意の値です。 |
QModbusServer::RunIndicatorStatus | サーバーの実行インジケーター・ステータスを返す。このデータは、QModbusPdu::ReportServerId 関数コードの付加データとして使用される。 |
QModbusServer::AdditionalData | サーバーの追加データを返す。このデータは、QModbusPdu::ReportServerId 関数コードの補遺として使用される。 |
QModbusServer::DeviceIdentification | サーバーの物理的および機能的説明を返します。 |
QModbusServer::UserOption | ユーザー・オプションの値を返します。 注: ユーザー・オプションについて、どの型を使用するかを決定し、コンポーネントが値へのアクセスや設定時に正しい型を使用するようにするのは、開発者次第です。 |
setValue()も参照 。
[virtual protected]
bool QModbusServer::writeData(const QModbusDataUnit &newData)
Modbus サーバー・マップにnewData を書き込む。成功するとtrue
を返し、newData の範囲がマップの範囲外であるか registerType() が存在しない場合はfalse
を返します。
注意: デフォルト・ストアとは異なるバッキング・ストアへの書き込みを実装するサブクラスは、setMap() とreadData() も実装する必要があります。また、dataWritten() シグナルは、関数の実装内からも発する必要があります。
setMap(),readData(),dataWritten()も参照 。
© 2025 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.