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 を参照してください。addressがマップ範囲外である場合、またはレジスタタイプが定義されていない場合は、false を返します。
QModbusDataUnit::RegisterType およびsetData()も参照してください 。
[signal] void QModbusServer::dataWritten(QModbusDataUnit::RegisterType table, int address, int size)
この信号は、ModbusクライアントがModbusサーバーに1つ以上のデータフィールドを書き込んだ際に発信されます。この信号には、書き込まれたフィールドに関する情報が含まれています:
- 書き込まれたレジスタタイプ(table )、
- address 書き込まれた最初のフィールドのxml-ph-0000@deepl.internal、
- および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 Application Protocol Specification 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 を返します。
setMap() およびwriteData()も参照してください 。
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()も参照してください 。
© 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.