何时使用 BACnet 库或 CmpBACnet 库
注意
这些描述也始终适用于相应的库 CODESYS BACnet2 SL (“主要修订2”)。
IEC 库 BACnet 旨在作为 IEC 库之上的一层 CmpBACnet。但是,该层不会隐藏库,因为这需要 BACnet 库具有“外观功能”的功能 CmpBACnet。这些“外观函数”将导致更大的应用程序代码和增加的运行时要求。这对于PLC来说是很难接受的。因此,有必要知道元素何时来自 BACnet 图书馆或 CmpBACnet 库是要使用的。
启动和停止 BACnet 堆
总是使用
BACnetServer.StartBACnetStack和BACnetServer.StopBACnetStack或者AutoStart。切勿直接使用相应的功能CmpBACnet图书馆,例如CmpBACnet.BACnetServerInit。使用 BACnet 服务器对象及其属性
始终使用 IEC-lib-BACnet 中指定的功能块,例如
BACnetAnalogValue。切勿直接使用相应的功能BACnet图书馆,例如CmpBACnet.BACnetStorePropertyInstance。触发异步请求
始终使用指定的客户端功能块
BACnet图书馆,例如BACnetClientReadProperty。切勿直接使用相应的功能CmpBACnet图书馆,例如CmpBACnet.BACnetReadProperty。的所有功能CmpBACnet需要一个库BACnetAsyncTransactionToken属于这一类,切勿直接使用。处理来自 BACnet 堆栈的“回调”并将“回调”分发到应用程序中的多个接收器
总是使用
IBACnetEventConsumer和BACnetServer.RegisterHook/UnregisterHook/RegisterCallback/UnregisterCallback。切勿直接使用相应的功能CmpBACnet图书馆,例如CmpBACnet.BACnetSetHook或者CmpBACnet.BACnetSetCallback。
有关更多信息,请参阅: 架构、组件及其任务
什么时候直接调用函数是合适且安全的 CmpBACnet 图书馆?
基本上,只需要调用函数 CmpBACnet 当没有提供相应的功能时直接 BACnet 图书馆。检查 BACnet 在尝试使用之前首先使用库 CmpBACnet 直接地。可以使用“阻塞功能” CmpBACnet, 例如 BACnet*CbCompletion, BACnetIam(Ex), 或者 BACnetIHave(Ex), BACnetUnconf*。
大多数情况下,您会使用 BACnet*CbCompletion 来实施您的具体 IBACnetEventConsumer.BACnetEventCallbacks。但首先检查是否 BACnetDefaultImpl 库已经包含适当的标准实现。