BACnet:写入属性(PresentValue)


FAQ BACnet 中的BACnet服务器:属性的循环读取 用作此处的服务器。

将此减少为读取模拟值。

图1

服务器和客户端的要求

检查文件CODESYSControl.cfg中是否存在以下条目。

  • BACnet组件的集成: [ ComponentManager ] Component .[n+1]= CmpBACnet

  • 集成BACnet协议栈的INI文件(注意语法): [CmpBACnet] IniFile=bacstac d .ini

BACnet客户端项目

  • 创建一个“标准项目”并选择 CODESYS Control Win V3 作为设备。
  • 通过网络扫描定义目标系统(参见BACnet服务器)。
  • 将“ BACNet Server”对象插入设备树并将其重命名为“ BACnet_Client ”。

图2

  • 打开库管理器 并添加以下库: CmpBACnet

图3

  • 修改 PLC_PRG 如下:

声明

VAR
    fbWriteProperty : BACnet.BACnetClientWriteProperty;
    writePropVal    : BACnet.CmpBACnet.IEC_BACNET_REAL := 16.34;
    writePropCont   : BACnet.CmpBACnet.IEC_BACNET_PROPERTY_CONTENTS;
    xWriteExecute   : BOOL;
    writePrio       : CmpBACnet.IEC_BACNET_SIGNED := 16;
    xInitDone       : BOOL := FALSE;
END_VAR

实现

IF NOT xInitDone THEN
    fbWriteProperty.RegisterToServer(BACnet_Client);
    fbWriteProperty(dwTargetDeviceNumber := 718,
                    objType := BACnet.CmpBACnet.IEC_BACNET_OBJECT_TYPE.OBJ_ANALOG_VALUE, objInst := 1,
                    propID := BACnet.CmpBACnet.IEC_BACNET_PROPERTY_ID.PROP_PRESENT_VALUE);
    xInitDone := TRUE;   
ELSE
    writePropCont.buffer.pBuffer := ADR(writePropVal);
    writePropCont.buffer.nBufferSize := SIZEOF(writePropVal);
    writePropCont.nElements := 1;
    writePropCont.tag := BACnet.CmpBACnet.IEC_BACNET_DATA_TYPE.DATA_TYPE_REAL;

    fbWriteProperty(xExecute := xWriteExecute,
                    propertyContents := writePropCont,
                    nWritePriority := writePrio);
END_IF

  • 将项目下载到控制器并将xWriteExecute 变量设置为TRUE。

该值被传输到服务器。

图4

图5

PresentValue属性使用从 1 到 16 的优先级 编写,其中 16 是最低的。

当您将具有更高优先级的值写入服务器时,它会一直保留,直到它被删除或被更高优先级覆盖。

在删除操作期间,最高设置优先级的值然后作为PresentValue输出。

通过使用数据类型DATA_TYPE_NULL写入来删除优先级。

图6