Skip to main content

の使用 BACnet クライアント機能ブロック

に加えて BACnet オブジェクト、 BACnet クライアントを「デバイス」として以下に挿入することもできます。 BACnet サーバ。

オブジェクトやサーバーと同様に、各クライアント デバイスにも、クライアント デバイスと同じ名前でインスタンス化された機能ブロックが付属します。

とは異なり BACnet オブジェクト、 BACnet クライアントは複雑な (静的) 構成を必要としません。これにより、クライアントファンクションブロックを作成しなくても利用できるようになります。 BACnet クライアントを「デバイス」として扱います。ただし、この場合は、「サインイン」する必要があります。 BACnet サーバーによる RegisterToServer() コードを IEC に登録し、その方法でアクティブ化します。この「アクティベーション」は、次の場合に自動的に行われます。 BACnet client は「device」として挿入されます。

BACnet クライアント関数ブロックは「共通動作モデル」を実装するため、フロー制御の入力と出力を提供します。

  • 入力 xExecute そして xAbort

  • 出力 xBusyxDonexError、 そして xAborted

  • クライアントリクエストパラメータと結果の入力と出力

2. クライアントアクションの IEC コードの例

次のコードでは関数ブロックを使用します。 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