La biblioteca IEC CmpBACnet representa la integración de la pila BACnet en un entorno IEC CODESYS y proporciona los tipos de datos BACnet, así como los métodos BACstack. El uso exclusivo de la biblioteca IEC CmpBACnet (sin las bibliotecas BACnet y BACnetDefaultImpl ) daría lugar a un código de aplicación IEC complejo y largo.
La biblioteca BACnet simplifica considerablemente el desarrollo de aplicaciones BACnet en comparación
con el uso exclusivo de CmpBACnet, especialmente en las siguientes áreas:
-
Inicio y parada de la pila BACnet
-
Utilización de los objetos del servidor BACnet y sus propiedades
-
Lanzamiento de solicitudes asíncronas (principalmente solicitudes de servicio de cliente) y procesamiento de la transacción de solicitud.
-
Procesamiento de las retrollamadas de la pila BACnet (véase
IBACnetEventConsumer) y distribución de las retrollamadas a varios receptores de la aplicación.
Además, la biblioteca BACnet ofrece un mecanismo de complemento (BACnetServerPlugin) para ampliar determinados aspectos de la biblioteca BACnet. BACnetServerPlugin es la base de la biblioteca BACnetDefaultImpl.
La biblioteca BACnetDefaultImpl se utiliza para la simplificación adicional del desarrollo de aplicaciones BACnet.
La norma BACnet ASHRAE 135 deja abiertos algunos aspectos del uso práctico de BACnet.
Los ejemplos más notables son los siguientes:
-
Persistencia de los objetos del servidor
-
Almacenamiento y persistencia de las entradas
Trend Log,Trend Log Multiple, yEvent Log -
Actualización de la información de fecha/hora del objeto dispositivo
La biblioteca CEI BACnet está pensada como una capa sobre la biblioteca CEI CmpBACnet. Sin embargo, la capa no oculta la biblioteca porque esto requeriría que la biblioteca
BACnet tuviera funciones de "fachada" para las funciones CmpBACnet. Estas funciones de fachada darían lugar a un código de aplicación más extenso y
a mayores requisitos de tiempo de ejecución. Esto es difícil de aceptar para el PLC.
Por este motivo, es necesario saber cuándo se van a utilizar elementos de la biblioteca
BACnet o de la biblioteca CmpBACnet.
Reglas generales:
-
Inicio y parada de la pila BACnet
Utilice siempre
BACnetServer.StartBACnetStackyBACnetServer.StopBACnetStackoAutoStart. Nunca utilice directamente las funciones correspondientes de la bibliotecaCmpBACnet, comoCmpBACnet.BACnetServerInit. -
Utilización de los objetos del servidor BACnet y sus propiedades
Utilice siempre los bloques de funciones especificados en IEC-lib-BACnet, como
BACnetAnalogValue. Nunca utilice directamente las funciones correspondientes de la bibliotecaBACnet, comoCmpBACnet.BACnetStorePropertyInstance. -
Lanzamiento de solicitudes asíncronas
Utilice siempre los bloques de funciones cliente especificados de la biblioteca
BACnet, comoBACnetClientReadProperty. Nunca utilice directamente las funciones correspondientes de la bibliotecaCmpBACnet, comoCmpBACnet.BACnetReadProperty. Todas las funciones de la bibliotecaCmpBACnetque requieren unBACnetAsyncTransactionTokenpertenecen a esta categoría y nunca deben utilizarse directamente. -
Procesamiento de las devoluciones de llamada de la pila BACnet y distribución de las devoluciones de llamada a varios receptores de la aplicación.
Utilice siempre
IBACnetEventConsumeryBACnetServer.RegisterHook/UnregisterHook/RegisterCallback/UnregisterCallback. Nunca utilice directamente las funciones correspondientes de la bibliotecaCmpBACnet, comoCmpBACnet.BACnetSetHookoCmpBACnet.BACnetSetCallback.
¿Cuándo es apropiado y seguro llamar directamente a las funciones de la biblioteca
CmpBACnet?
Básicamente, sólo es necesario llamar directamente a funciones de CmpBACnet cuando la biblioteca BACnet no proporciona la funcionalidad correspondiente. Consulte primero la biblioteca BACnet antes de intentar utilizar directamente CmpBACnet. Es posible utilizar funciones de bloqueo en CmpBACnet, como BACnet*CbCompletion, BACnetIam(Ex) o BACnetIHave(Ex), BACnetUnconf*.
En la mayoría de los casos, utilizará BACnet*CbCompletion para implementar sus IBACnetEventConsumer.BACnetEventCallbackespecíficos. Pero primero compruebe si la biblioteca BACnetDefaultImpl ya contiene una implementación estándar adecuada.
En la carpeta de ejemplos se proporciona la dirección BACnetDefaultImpl.library abierta, que puede utilizarse para la personalización del usuario.