BACnet:写入属性(PresentValue)
FAQ BACnet 中的BACnet服务器:属性的循环读取 用作此处的服务器。
将此减少为读取模拟值。
服务器和客户端的要求
检查文件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 ”。

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

- 修改 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。
该值被传输到服务器。


PresentValue属性使用从 1 到 16 的优先级 编写,其中 16 是最低的。
当您将具有更高优先级的值写入服务器时,它会一直保留,直到它被删除或被更高优先级覆盖。
在删除操作期间,最高设置优先级的值然后作为PresentValue输出。
通过使用数据类型DATA_TYPE_NULL写入来删除优先级。

