デフォルトのアクション実装によるサービス指示フック
以下は、デフォルトのアクションがすでに実装されており、通常はユーザー アプリケーションに実装する必要のないフックのリストです。
サービスフック: アラーム確認応答
リクエストの有効性を確認した後、API は指定されたオブジェクトを見つけようとします。オブジェクトが存在し、 Time Stamp
パラメーターが、確認されたイベントの最新の時刻と一致すると、次のことが起こります。 Acked_Transitions
の値に対応するオブジェクトのプロパティ Event State Acknowledged
パラメータは次のように設定されています 1
、 result(+)
プリミティブが発行され、イベント通知が発行されます。 Notify Type
パラメータに等しい ACK_NOTIFICATION
発行されます。オブジェクトが見つからない場合は、 result(-)
プリミティブが発行されます。確認通知は、元の確認済みまたは未確認のイベント通知が送信されたのと同じ受信者に向けられた同じサービス タイプ (確認済みまたは未確認) を使用します。の Time Stamp
確認通知で伝えられる情報は、確認通知が生成された時刻から導出されるものであり、 Time Stamp
元のイベント通知の。
サービスフック: GetAlarmsummary
リクエストの有効性を確認した後、API は、 イベントの状態 プロパティが次と等しくない NORMAL
そして Notify_Type
の値を持つプロパティ ALARM
。以下を含む肯定的な応答が構築されます。 Alarm Summaries
この検索で見つかったオブジェクト。これらの基準を満たすオブジェクトが見つからない場合は、長さ 0 のリストが返されます。
サービスフック: GetEnrollmentsummary
リクエストの有効性を確認した後、API はリクエスト プリミティブで指定された検索基準を満たすすべてのイベント トリガー オブジェクトを検索します。検索基準は、リクエスト プリミティブで省略された、明示的に設定されたすべてのフィルターの論理リンクです。を含む陽性反応 Enrollment Summaries
この検索で見つかったオブジェクトに対して、 が構築されます。これらの基準を満たすオブジェクトが見つからない場合は、長さ 0 のリストが返されます。
サービスフック: SubscribeCOV
どちらでもない場合 Lifetime
または Issue Confirmed Notifications
存在する場合、リクエストはキャンセルとみなされます。同じ BACnet アドレスに対してすでに存在し、 SubscribeCOV
リクエストして同じものを持っています Subscriber Process Identifier
そして Monitored Object Identifier
、無効になっており、 SimpleAck
が返されます。一致する COV コンテキストが見つからない作成されたキャンセルは、コンテキストが存在していたかのように正常に実行され、 SimpleAck
。もし Lifetime
パラメータは存在しませんが、 Issue Confirmed Notifications
パラメータが存在する場合、値ゼロ (無期限の存続期間) が適用されます。 lifetime
。もし Issue Confirmed Notifications
パラメータは存在しますが、監視対象のオブジェクトが COV レポートをサポートしていない場合は、エラーが発行されます。監視対象のオブジェクトが COV レポートをサポートしている場合は、同じ BACnet アドレスの既存の COV コンテキストを見つけるためのチェックが実行されます。 SubscribeCOV
リクエストして同じものを持っています Subscriber Process Identifier
そして Monitored Object Identifier
。既存の COV コンテキストが見つかった場合、リクエストはサブスクリプションが再度作成されたかのように処理されます。もし COV
要求に対応するコンテキストが見つからない場合は、要求を伝送する PDU からの BACnet アドレスを含む新しい COV コンテキストが作成されます。 SubscribeCOV
リクエストと同じ Subscriber Process Identifier
そして Monitored Object Identifier
。コンテキストを作成できない場合は、エラーが返されます。新しいコンテキストが作成されるか、新しいサブスクリプションが受信されると、COV コンテキストが初期化され、次のとおり有効期間が与えられます。 Lifetime
パラメータが存在する場合は 0、Lifetime パラメータが存在しない場合は 0。再購読を受信せずに何秒も経過すると、購読は自動的にキャンセルされます。ライフタイム 0 は、サブスクリプションが無期限であり、自動キャンセルが発生しないことを示します。いずれの場合も、 SimpleAck
が返されます。あ ConfirmedCOVNotification
または UnconfirmedCOVNotification
で指定されているように、サブスクリプションまたは再サブスクリプション要求が正常に完了した後、できるだけ早く作成されます。 Issue Confirmed Notifications
パラメータ。
サービスフック: AddListElement
リクエストの有効性を確認した後、API は、 Object Identifier
パラメータ。識別されたオブジェクトが存在し、 Property Identifier
パラメータに指定されているすべての要素を追加しようとします。 List of Elements
パラメータを指定されたプロパティに追加します。この試みが成功すると、 SimpleAck
プリミティブが発行されます。 1 つ以上の要素がリストにすでに存在する場合、その要素は無視され、リストに追加されません。すでに存在する要素を無視しても、サービスは失敗しません。指定されたオブジェクトが存在しない場合、指定されたプロパティが存在しない場合、または指定されたプロパティがリストでない場合、サービスは失敗し、エラー応答プリミティブが発行されます。 1 つ以上の要素をリストに追加できず、それらの要素がリストにまだ存在していない場合は、エラー応答プリミティブが発行され、要素はリストに追加されません。このサービスの効果は、指定されたまだ存在しないすべての要素をリストに追加するか、リストに要素をまったく追加しないことです。
サービスフック: RemoveListElement
リクエストの有効性を確認した後、API は、 Object Identifier
パラメータ。識別されたオブジェクトが存在し、 Property Identifier
パラメータを使用すると、パラメータで指定されたすべての要素を削除しようとします。 List of Elements
指定されたプロパティのパラメータ。 1 つ以上の要素が存在しないか、不十分な権限やその他の問題により削除できない場合、要素はいずれも削除されず、エラー応答プリミティブが発行されます。
サービスフック: ReadProperty
リクエストの有効性を確認した後、API は指定されたオブジェクトの指定されたプロパティへのアクセスを試みます。アクセスが成功すると、 ComplexAck
アクセスされた値を返すプリミティブが生成されます。アクセスが失敗すると、失敗の理由を示すエラー プリミティブが生成されます。とき object-type
の中に Object Identifier
パラメータには値が含まれています Device Object
そしてその中のインスタンス Object Identifier
パラメータには値が含まれています 4194303
の場合、API は Object Identifier
あたかもローカル デバイス オブジェクトと正しく一致したかのように。これにより、生成されないデバイスのデバイス インスタンスが許可されます。 I-Am
メッセージは未定です。
サービスフック: ReadPropertyMultiple
リクエストの有効性を確認した後、API は指定されたオブジェクトの指定されたプロパティへのアクセスを試みます。それは、 List of Read Access Results
リクエストで指定された順序で。もし List of Property References
の一部 List of Read Access Specifications
パラメータにはプロパティ識別子が含まれます ALL
、 REQUIRED
、 または OPTIONAL
、 そうして List of Read Access Results
は、返される各プロパティが明示的に参照されているかのように構築されます。リクエストが「自動的に」実行される必要はありません。それにもかかわらず、API は、優先度の高いプロセスのみを対象として、すべての読み取り操作が可能な限り最短時間で完了するようにします。リクエストは、指定されたすべてのプロパティへのアクセスが試行されるまで処理されます。指定されたオブジェクトが見つからない場合、または指定されたオブジェクトの指定されたプロパティのいずれにもアクセスできない場合は、エラー プリミティブまたは ComplexAck
すべてのプロパティのエラー コードを返すプリミティブが発行されます。指定されたオブジェクトの指定されたプロパティのいずれかにアクセスできる場合、 ComplexAck
プリミティブが発行され、アクセスされたすべての値と、アクセスできなかったすべてのプロパティのエラー コードが返されます。とき object-type
の中に Object Identifier
の一部 Read Access Specification
パラメータには値が含まれています Device Object
そしてその中のインスタンス Object Identifier
パラメータには値が含まれています 4194303
の場合、API は Object Identifier
あたかもローカル デバイス オブジェクトと正しく一致したかのように。これにより、生成されないデバイスのデバイス インスタンスが許可されます。 I-Am
メッセージは未定です。
BACnet サーバー ユーザー アプリケーションの場合、内部データベースを使用できないため、 ReadPropertyMultiple
サービスを実装する必要があるのは、 ReadProperty
サービスフックのため ReadPropertyMultiple
リクエストは 1 つに分割されます ReadProperty
リクエストが内部的に処理され、完了が収集されてレスポンスが作成されます。
サービスフック: WriteProperty
リクエストの有効性を確認した後、API は、指定されたオブジェクトの指定されたプロパティを、 Property Value
パラメータ。この変更の試行が成功すると、 SimpleAck
プリミティブが発行されます。変更の試行が失敗すると、失敗の理由を示すエラー プリミティブが生成されます。
サービスフック: WritePropertyMultiple
それぞれについて Write Access Specification
に含まれる List of Write Access Specifications
、指定された各プロパティの値は、 Write Access Specification
、そして SimpleAck
プリミティブが発行され、サービス要求がすべて実行されたことを示します。提供されたプロパティは、 List of Write Access Specifications
。処理中に変更できないプロパティが発生した場合、PI は失敗の理由を示すエラー応答プリミティブを発行します。このサービスの結果は、指定されたすべてのプロパティ、または指定されたプロパティまでのプロパティのみ (これは含まれない) のいずれかになります。 First Failed Write Attempt
パラメータが正常に変更されました。あ BACnet-Reject-PDU
このメッセージは、書き込み操作が正常に実行されなかった場合にのみ発行されます。これは、サービス要求が完全に拒否されたことを示します。に含まれる書き込み操作の 1 つが、 List of Write Access Specifications
が正常に実行できなかった場合、上記のように失敗の理由を示すエラー応答が発行されます。
サービスフック: ReadRange
まず、API は、 Object Identifier
、 Property Identifier
、 そして Property Array Index
パラメータを返し、オブジェクトまたはプロパティが不明な場合、参照されたデータがリストまたは配列でない場合、または現在別の理由でアクセスできない場合は、適切なエラー クラスとエラー コードを含むエラー応答を返します。もし Range
パラメータが存在しない場合、API はリストまたは配列内の使用可能な項目をすべて読み取り、それらを返そうとします。もし Range
パラメータが存在し、 By Position
パラメータを指定すると、API は指定されたすべての項目を読み取り、それらを返そうとします。指定された項目には、 で定義されたインデックス位置の項目が含まれます。 Reference Index
プラス以下のもの Count
- 以下の場合は 1 項目 Count
がポジティブ、または最大 -1 - Count
if の前の項目 Count
はマイナスです。リストの最初の要素はインデックス 1 に関連付けられます。 Range
パラメータが存在し、 By Time
パラメータまたは By Sequence Number
パラメータを指定すると、API は適切なエラー クラスとエラー コードを含むエラー応答を返してリクエストを拒否します。返された応答は、 Item Count
パラメータ。現在のアイテムは Item Data
パラメータ。返された応答に最初の位置インデックスが含まれている場合、 FIRST_ITEM
フラグが設定されています TRUE
の中に Result Flags
パラメータ;それ以外の場合は、次のように設定されます FALSE
。返された応答に最後の位置インデックスが含まれている場合、 LAST_ITEM
フラグが設定されています TRUE
で Result Flags
;それ以外の場合は、次のように設定されます FALSE
。リスト内の項目が一致しない場合は、 Range
パラメータ基準、次に ComplexAck
で返されます Item Count
の 0
そしていいえ First Sequence Number
パラメータ。
このサービスのデフォルトの実装では、 log-buffer
トレンドおよびイベントログオブジェクトのプロパティ。ユーザー アプリケーションがログ オブジェクトをサポートする必要がある場合、それらのデータへのストレージとアクセスはユーザー アプリケーションによって実装される必要があります。
サービスフック: SubscribeCOVProperty
どちらでもない場合 Lifetime
または Issue Confirmed Notifications
存在する場合、リクエストはキャンセルとみなされます。同じ BACnet アドレスに対してすでに存在し、 SubscribeCOVProperty
リクエストして同じものを持っています Subscriber Process Identifier
、 Monitored Object Identifier
そして Monitored Property Identifier
、無効になっており、 SimpleAck
が返されます。一致する COV コンテキストが見つからない場合に発行されたキャンセルは、コンテキストが存在していたかのように正常に処理されます。彼らは戻ってきます SimpleAck
。 COV コンテキストが見つかった場合、それは Active_COV_Subscriptions
デバイスオブジェクト。もし Issue Confirmed Notifications
パラメータは存在しますが、監視対象のプロパティが COV レポートをサポートしていない場合は、エラーが発行されます。監視対象のプロパティが COV レポートをサポートしている場合は、同じ BACnet アドレスの既存の COV コンテキストを見つけるためのチェックが実行されます。 SubscribeCOVProperty
リクエストして同じものを持っています Subscriber Process Identifier
、 Monitored Object Identifier
、 そして Monitored Property Identifier
。既存の COV コンテキストが見つかった場合、リクエストは再サブスクリプションとして解釈され、再サブスクリプションが作成されたかのように正常に処理されます。リクエストに一致する COV コンテキストが見つからない場合は、新しい COV コンテキストが作成されます。これには、PDU からの BACnet アドレスが含まれており、 SubscribeCOVProperty
リクエストして同じものを持っています Subscriber Process Identifier
、 Monitored Object Identifier
、 そして Monitored Property Identifier
。新しいコンテキストは、 Active_COV_Subscriptions
デバイスオブジェクトのプロパティ。コンテキストを作成できない場合は、エラーが返されます。新しいコンテキストが作成されるか、再サブスクリプションを受信すると、COV コンテキストが初期化され、 Lifetime
パラメータ。数秒経っても再購読が受信されない場合、購読は自動的にキャンセルされます。あ SimpleAck
が返され、 ConfirmedCOVNotification
または UnconfirmedCOVNotification
で指定されているように、サブスクリプションまたは再サブスクリプション要求が正常に完了した後、できるだけ早く作成されます。 Issue Confirmed Notifications
パラメータ。
サービスフック: GetEventInformation
リクエストの有効性を確認した後、API は、次の条件を満たすすべてのイベント トリガー オブジェクトを、指定されたオブジェクトの後のオブジェクト (オブジェクト インスタンスの内部順序で昇順) から検索します。 Last Received Object Identifier
パラメータが存在する場合は、 Event_State
値が次と等しくないプロパティ NORMAL
、または Acked_Transitions
次のビットの少なくとも 1 つを持つプロパティ (TO-OFFNORMAL
、 TO-FAULT
、 TO-NORMAL
) に設定 FALSE
。この検索で見つかったオブジェクトのイベント概要を含む肯定的な応答が構築されます。これらの基準を満たすオブジェクトが見つからない場合は、長さ 0 のリストが返されます。期限内に返却できる限り返却します。 APDU
。基準を満たすが、 APDU
、 そうして More Events
パラメータは次のように設定されています TRUE
;それ以外の場合は、次のように設定されます FALSE
。
サービスフック: I-Am
API はリクエストの正当性を確認した後、受信した情報を Address_Binding
デバイスオブジェクトのプロパティ。これは、デバイス インスタンス番号をそのデバイスとの通信に必要な BACnet MAC アドレスに解決するために使用されます。
サービスフック: I-Have
リクエストの有効性を確認した後、API は受信した情報を内部のソートリストに追加します。このリストは、オブジェクト名をそれらのオブジェクトにアクセスするために必要なオブジェクト識別子に解決するために使用されます。
サービスフック:Who-Has
API は未確認のメッセージを送信します。 Who-Has
リクエスト。通常はブロードキャスト アドレスを使用します。もし Device Instance Range Low Limit
そして Device Instance Range High Limit
パラメータが存在し、次に API、そのデバイス Object_Identifier
インスタンス番号は範囲内にあります Device Instance Range Low Limit
>= Object_Identifier Instance Number
<= Device Instance Range High Limit
、応答する資格があります。もし Object Name
パラメータが存在し、次に API が存在します。これには、 Object_Name
に一致するプロパティ値 Object Name
パラメータは、 I-Have
サービス要求。もし Object Identifier
パラメータが存在し、次に API が存在します。これには、 Object_Identifier
に一致するプロパティ値 Object Identifier
パラメータは、 I-Have
サービス要求。
サービスフック: 誰が誰ですか
API は未確認のメッセージを送信します。 Who-Is
リクエスト。通常はブロードキャスト アドレスを使用します。もし Device Instance Range Low Limit
そして Device Instance Range High Limit
パラメータが欠落している場合、API はデバイスを返します Object_Identifier
による個々の応答における I-Am
サービス。もし Device Instance Range Low Limit
そして Device Instance Range High Limit
パラメータが存在し、次に API、そのデバイス Object_Identifier
インスタンス番号は範囲内にあります Device Instance Range Low Limit
>= Device Object_Identifier Instance Number
<= Device Instance Range High Limit
、デバイスを返却します Object_Identifier
によって I-Am
サービス。
サービスフック: AtomicReadFile
まず、API は、 Object Identifier
。を返します result(-)
オブジェクトが不明な場合は、対応するエラー クラスとエラー コードを含むエラー。このサービス フックは、経由でアクセスされるファイルのみをサポートします。 STREAM
。その後、ローカル ハード ドライブ上のローカル ファイル アクセスの有効性がチェックされ、 result(-)
ファイルの開始位置が無効な場合、または何らかの理由でファイルにアクセスできない場合は、適切なエラー クラスとエラー コードを含む応答が返されます。有効性チェックが成功すると、指定された数値が Request Record Count
のオクテットがローカル ファイルから読み取られます。実際に読み取られたオクテット数が指定されたオクテット数より小さい場合、 Returned Record Count
返されたものの result(+)
読み取ったオクテット数を示します。ファイルの終わりに達すると、 End Of File
返されたパラメータ result(+)
に設定されています TRUE
。
このサービス フックは、次の SysFile インターフェイスを使用して実装されます。 CODESYS そしてサポートします STREAM
アクセスのみ。その結果、ユーザー アプリケーションは、特にファイル アクセス用のこのサービス フックを変更する必要がある場合があります。
サービスフック: AtomicWriteFile
まず、API は、 Object Identifier
。を返します result(-)
オブジェクトが不明な場合は、対応するエラー クラスとエラー コードを含むエラー。このサービス フックは、経由でアクセスされるファイルのみをサポートします。 STREAM
。その後、ローカル ハード ドライブ上のローカル ファイル アクセスの有効性がチェックされ、 result(-)
ファイルの開始位置が無効な場合、または何らかの理由でファイルにアクセスできない場合は、適切なエラー クラスとエラー コードを含む応答が返されます。もし File Start Position
サービス リクエストのパラメータがローカル ファイル サイズを超えると、ファイルは受信オクテットを書き込むために拡張されます。もし File Start Position
パラメータに値があります -1
、その後、ローカル ファイルに受信オクテットが追加されます。ローカル ファイルへの書き込みが失敗した場合、対応する result(-)
応答が発行されます。ローカル ファイルへの書き込みが成功すると、 result(+)
が発行され、それに対応する内容が含まれます File Start Position
。
このサービス フックは、次の SysFile インターフェイスを使用して実装されます。 CODESYS そしてサポートします STREAM
アクセスのみ。その結果、ユーザー アプリケーションは、特にファイル アクセス用のこのサービス フックを変更する必要がある場合があります。
サービスフック: CreateObject
まず、API はリクエストの正当性を検証します。 Object Specifier
リクエストの は、作成可能なオブジェクト タイプを指定します (内部ルールに従って) BACnet.IsBACnetObjectAMEVCreatable
)。対応するエラーを返します result(-)
そうでない場合。で指定されている場合は、 Object Specifier
、オブジェクト インスタンス番号の有効性がチェックされ、対応するエラーが発生します。 result(-)
インスタンス番号が存在しない場合に返されます。もし List of Initial Values
が指定されていない場合、作成されたオブジェクトのプロパティは、指定されたオブジェクトで指定されていないプロパティの場合と同様に、デフォルト値を使用して作成されます。 List of Initial Values
。オブジェクトの作成が失敗した場合は、対応するエラーが表示されます。 result(-)
が発行されますが、 First Failed Element Number
応答の設定は 0
。作成が成功すると、 result(+)
作成されたオブジェクトのオブジェクト識別子を含む応答が発行されます。
このサービスフックの現在の実装は、その実装に対する包括的な提案として見なすべきです。このサービス リクエストがどのように処理されるかはユーザー アプリケーションの純粋にローカルな問題であるため、ユーザー アプリケーションがリクエストの別の処理のために独自のサービス フックを提供する可能性が非常に高くなります。
サービスフック: オブジェクトの削除
まず、API は、 Object Identifier
そして、を返します result(-)
オブジェクトが不明な場合は、対応するエラー クラスとエラー コードを含むエラー応答。指定されたオブジェクトが削除できる場合、 result(+)
応答が発行されます。オブジェクトの削除に失敗した場合(例:内部ルールによりオブジェクトを動的に削除できない場合) BACnet.IsBACnetObjectAMEVCreatable
)、またはその他の理由で、 result(-)
発行されます。
このサービスフックの現在の実装は、その実装に対する包括的な提案として見なすべきです。このサービス リクエストがどのように処理されるかはユーザー アプリケーションの純粋にローカルな問題であるため、ユーザー アプリケーションがリクエストの別の処理のために独自のサービス フックを提供する可能性が非常に高くなります。詳細については、以下を参照してください。 現在のを使用する場合の実装要件 BACnet API/スタック