Skip to main content

何时使用 BACnet 库或 CmpBACnet 库

注意

这些描述也始终适用于相应的库 CODESYS BACnet2 SL (“主要修订2”)。

IEC 库 BACnet 旨在作为 IEC 库之上的一层 CmpBACnet。但是,该层不会隐藏库,因为这需要 BACnet 库具有“外观功能”的功能 CmpBACnet。这些“外观函数”将导致更大的应用程序代码和增加的运行时要求。这对于PLC来说是很难接受的。因此,有必要知道元素何时来自 BACnet 图书馆或 CmpBACnet 库是要使用的。

. 一般规则:
  • 启动和停止 BACnet

    总是使用 BACnetServer.StartBACnetStackBACnetServer.StopBACnetStack 或者 AutoStart。切勿直接使用相应的功能 CmpBACnet 图书馆,例如 CmpBACnet.BACnetServerInit

  • 使用 BACnet 服务器对象及其属性

    始终使用 IEC-lib-BACnet 中指定的功能块,例如 BACnetAnalogValue。切勿直接使用相应的功能 BACnet 图书馆,例如 CmpBACnet.BACnetStorePropertyInstance

  • 触发异步请求

    始终使用指定的客户端功能块 BACnet 图书馆,例如 BACnetClientReadProperty。切勿直接使用相应的功能 CmpBACnet 图书馆,例如 CmpBACnet.BACnetReadProperty。的所有功能 CmpBACnet 需要一个库 BACnetAsyncTransactionToken 属于这一类,切勿直接使用。

  • 处理来自 BACnet 堆栈的“回调”并将“回调”分发到应用程序中的多个接收器

    总是使用 IBACnetEventConsumerBACnetServer.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 库已经包含适当的标准实现。