の使用 BACnet クライアント機能ブロック
に加えて BACnet オブジェクト、 BACnet クライアントを「デバイス」として以下に挿入することもできます。 BACnet サーバ。
オブジェクトやサーバーと同様に、各クライアント デバイスにも、クライアント デバイスと同じ名前でインスタンス化された機能ブロックが付属します。
とは異なり BACnet オブジェクト、 BACnet クライアントは複雑な (静的) 構成を必要としません。これにより、クライアントファンクションブロックを作成しなくても利用できるようになります。 BACnet クライアントを「デバイス」として扱います。ただし、この場合は、「サインイン」する必要があります。 BACnet サーバーによる RegisterToServer()
コードを IEC に登録し、その方法でアクティブ化します。この「アクティベーション」は、次の場合に自動的に行われます。 BACnet client は「device」として挿入されます。
の BACnet クライアント関数ブロックは「共通動作モデル」を実装するため、フロー制御の入力と出力を提供します。
入力
xExecute
そしてxAbort
出力
xBusy
、xDone
、xError
、 そしてxAborted
クライアントリクエストパラメータと結果の入力と出力
次のコードでは関数ブロックを使用します。 BACnetClientReadProperty
から BACnet
クライアント読み取りプロパティ要求を特定のサーバーに送信するライブラリ BACnet のクライアントデバイス BACnet 通信網。受信した応答はローカル変数に読み込まれます。
PROGRAM PLC_PRG VAR initDone : BOOL := FALSE; readProp : BACnet.BACnetClientReadProperty; readPropCnt : INT := 0; readPropErrorCnt : INT := 0; readPropCancelCnt : INT := 0; readPropVal : REAL; END_VAR IF NOT initDone THEN readProp.RegisterToServer(BACnet_Server); readProp( dwTargetDeviceNumber:= 43, objType:= BACnet.CmpBACnet.IEC_BACNET_OBJECT_TYPE.OBJ_ANALOG_VALUE, objInst:= 1, propID:= BACnet.CmpBACnet.IEC_BACNET_PROPERTY_ID.PROP_PRESENT_VALUE, nIndex:= -1); END_IF IF readProp.xExecute AND readProp.xBusy AND readProp.iState = 3 THEN IF readPropCnt MOD 2 = 0 THEN // cancel every second request readProp.xAbort := TRUE; readPropCancelCnt := readPropCancelCnt + 1; END_IF END_IF IF NOT readProp.xExecute AND NOT readProp.xAborted AND NOT readProp.xDone THEN readProp.xExecute := TRUE; readPropCnt := readPropCnt + 1; END_IF IF readProp.xExecute THEN IF readProp.xDone THEN readProp.xExecute := FALSE; END_IF IF readProp.xError THEN readProp.xExecute := FALSE; readPropErrorCnt := readPropErrorCnt + 1; END_IF IF readProp.xAborted THEN readProp.xExecute := FALSE; readProp.xAbort := FALSE; END_IF END_IF readProp(); IF readProp.xDone OR readProp.xError THEN IF readProp.xError THEN // handle error ; ELSE readPropVal := BACnet.GetRealFromContents(readProp.result); END_IF END_IF
クライアント要求が応答を送信する限り、上記の例のように、応答の内容は 1 つ以上の出力変数の形式で提供されます。ただし、これはクライアントのアクションによって異なる場合があります。この例では補助関数も使用しています GetRealFromContents()
出力変数を読み取るには readProp.result
タイプの IEC_BACNET_PROPERTY_CONTENTS
。