QModbusServer Class

QModbusServer クラスは Modbus リクエストを受信し処理するインターフェースです。詳細...

Header: #include <QModbusServer>
CMake: find_package(Qt6 REQUIRED COMPONENTS SerialBus)
target_link_libraries(mytarget PRIVATE Qt6::SerialBus)
qmake: QT += serialbus
Inherits: QModbusDevice
Inherited By:

QModbusRtuSerialServer and QModbusTcpServer

パブリックタイプ

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::DiagnosticRegister0サーバーの診断レジスタ。quint16
QModbusServer::ExceptionStatusOffset1サーバーの例外ステータス・バイト・オフセット。quint16
QModbusServer::DeviceBusy2サーバーが長時間プログラム・コマンドを処理していることを示すフラグ。quint16
QModbusServer::AsciiInputDelimiter3Modbus ASCII メッセージ・デリミタ。char
QModbusServer::ListenOnlyMode4サーバのリッスン・オンリー・モードを設定するフラグ。この機能は通常 Modbus シリアル・デバイスによってのみサポートされます。bool
QModbusServer::ServerIdentifier5サーバー・アドレスではなく、サーバーの識別子。quint8
QModbusServer::RunIndicatorStatus6サーバの実行インジケータ。quint8
QModbusServer::AdditionalData7サーバーの追加データ。QByteArray
QModbusServer::DeviceIdentification8サーバーの物理的、機能的説明。QModbusDeviceIdentification

ユーザー・オプション

定数説明
QModbusServer::UserOption0x100ユーザー固有の目的で使用できる最初のオプション。

ユーザーオプションでは、どの型を使用するかを決定し、コンポーネントが値にアクセスしたり設定したりするときに正しい型を使用するようにするのは開発者次第です。

メンバ関数のドキュメント

[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 を返し、newData0 である場合、newData の範囲がマップ範囲外である場合、または registerType() が存在しない場合はfalse を返す。

注意: デフォルトとは異なるバッキングストアからの読み取りを実装するサブクラスは、setMap() およびwriteData() も実装する必要があります。

setMap() およびwriteData()も参照

int QModbusServer::serverAddress() const

この Modbus サーバー・インスタンスのアドレスを返します。

setServerAddress()も参照して ください。

bool QModbusServer::setData(const QModbusDataUnit &newData)

newData を Modbus サーバー・マップに書き込みます。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::RegisterTypedata()、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)

optionnewValue を設定し、成功した場合はtrue を返し、そうでない場合はfalse を返します。

注意: オプションの関連型がquint8 またはquint16 で、newValue の型の方が大きい場合、データは切り捨てられるか、会話は失敗する。

キー説明
QModbusServer::DiagnosticRegisterサーバーの診断レジスタをデバイス固有のエンコーディングでnewValue に設定する。 デフォルト値は0x0000 である。このレジスタのビット値については、デバイス固有のドキュメントが必要である。
QModbusServer::ExceptionStatusOffsetサーバーの例外ステータス・バイト・オフセットを、コイル(0x レジスタ)の絶対オフセット・アドレスであるnewValue に設定します。Modbus レジスタ・テーブルは0x0000h で始まります。デフォルト値は0x0000 で、Modicon 984 CPU と同様の例外ステータス・コイル(コイル 1-8)を使用します。

この関数は、コイル・レジスタがステータス・コイルの保存と取得に必要な 8 ビットを含んでいる場合はtrue を返し、そうでない場合はfalse を返します。

QModbusServer::DeviceBusyサーバーが長時間プログラム・コマンドの処理中であることを示すフラグを設定します。有効な値は、0x0000 (ビジーではない)および0xffff (ビジー)である。デフォルト値は0x0000
QModbusServer::AsciiInputDelimiternewValue は、今後の 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::AsciiInputDelimiterModbus 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()参照してください。

©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。