Un cliente BACnet obtiene un valor de dos maneras. El sondeo lo lee según el horario del cliente mediante ReadProperty o ReadPropertyMultiple. La notificación de cambio de valor (COV) solicita al dispositivo que envíe una notificación cuando el valor cambie al menos una cantidad definida. La elección determina la carga de red, la rapidez con que se recibe un cambio y el significado de la ausencia de mensajes.
Esta guía forma parte de la serie sobre BACnet y protocolos de edificios.
Cómo funciona COV
Un cliente envía SubscribeCOV para un objeto del dispositivo. La petición identifica un proceso suscriptor, elige notificaciones confirmadas o no confirmadas e indica una duración en segundos. El dispositivo envía entonces una notificación con Present_Value y Status_Flags:
- una vez al aceptar la suscripción, para que el cliente tenga un primer valor;
- para un objeto analógico, cuando Present_Value ha cambiado al menos su COV_Increment desde la última notificación;
- para un objeto binario o multestado, en cada cambio de estado;
- cuando cambia Status_Flags, por ejemplo, si el punto entra en alarma o sale de servicio.
Supongamos un incremento de 0,5 °C y un último valor notificado de 20,0 °C. Las lecturas de 20,2 °C y 20,4 °C no generan ninguna notificación. Una lectura de 20,6 °C sí la genera, aunque cada paso haya sido de solo 0,2 °C: el dispositivo compara con el último valor notificado, no con la lectura anterior. Por tanto, una deriva lenta se informa cuando su suma alcanza el incremento. Un cambio inferior al incremento nunca se notifica, por lo que el cliente puede conservar indefinidamente un valor casi 0,5 °C alejado del real mientras la temperatura permanezca allí.
SubscribeCOVProperty permite suscribirse a una sola propiedad y fijar un incremento propio del cliente. Úselo para vigilar una propiedad distinta de Present_Value, como High_Limit, o para sustituir el COV_Increment del objeto sin escribir en el controlador.
El incremento también determina la carga. Si un controlador explora una entrada analógica ruidosa una vez por segundo y el incremento es 0,01, puede enviar una notificación por segundo a cada suscriptor: 3.600 por hora procedentes de un solo punto. El relato de Newman sobre la red del campus de Cornell menciona un incremento demasiado pequeño entre los fallos de los controladores que Cornell limita haciendo que cada red de edificio solo reciba su propio tráfico y el del sistema central.
Notificaciones confirmadas y no confirmadas
Una notificación confirmada requiere un acuse de recibo del cliente. Si este no llega antes de que termine el tiempo de espera APDU del dispositivo, el dispositivo la reenvía hasta alcanzar su número de reintentos. Una notificación no confirmada se envía una vez y no se reintenta. Si un enrutador la descarta o el cliente está ocupado, el cambio se pierde sin que ninguno de los extremos lo sepa.
Utilice notificaciones confirmadas para alarmas y estados de instalaciones. Los acuses de recibo cuestan un mensaje corto por cambio. Las no confirmadas pueden servir para puntos analógicos de alta frecuencia en los que el siguiente cambio sustituye al perdido, pero solo con una lectura de comprobación (véase Qué significa el silencio).
Duración y renovación
La duración indica cuánto tiempo conserva el dispositivo la suscripción sin renovarla. El cliente la renueva enviando de nuevo SubscribeCOV antes de que termine. En un cliente, la duración suele ser un ajuste. En TF8020 de Beckhoff figura como Subscriptions Lifetime en el cuadro Settings.
Intente renovar la suscripción a mitad de su duración y repita un intento fallido antes del vencimiento. Para una suscripción de 600 s, un intento a los 300 s deja tiempo para reintentarlo; esperar hasta los 600 s después de un intento perdido llega al límite de vencimiento. Las directrices de BACnet Testing Laboratories (BTL) exigen que todo servidor COV acepte cualquier duración entre 1 y 28.800 s (8 horas), de modo que los valores de ese intervalo no se rechacen (apartados 7.24 y 7.25).
Una duración de 0 significa suscripción indefinida. No la utilice. El apartado 7.6 de BTL explica por qué: el dispositivo no tiene obligación de conservar la lista de suscripciones después de un reinicio o pérdida de alimentación; un controlador sustituido comienza con una lista vacía; y la suscripción de un cliente retirado ocupa su plaza para siempre. SubscribeCOVProperty no permite una duración de 0.
Las plazas de suscripción son limitadas. La norma solo exige que un servidor COV admita cinco suscripciones simultáneas (apartado 7.7 de BTL, que cita K.1.12 y K.1.13 de ASHRAE 135). BACnet Stack, de código abierto, reserva 128 por defecto. Cuando la tabla está llena, la petición de suscripción devuelve un error; en BACnet Stack, la clase de error es RESOURCES y el código, NO_SPACE_TO_ADD_LIST_ELEMENT. La propiedad Active_COV_Subscriptions del objeto Device enumera las suscripciones que mantiene el dispositivo. Léala durante la puesta en marcha para saber cuántas plazas utilizan ya el supervisor y los demás clientes.
Una suscripción fallida no debe pasar inadvertida. El apartado 7.7 de BTL indica que se debe recurrir al sondeo para ese punto, avisar al operador o hacer ambas cosas.
Comparación entre sondeo y COV
| Sondeo | COV | |
|---|---|---|
| Quién inicia cada mensaje | El cliente, según su horario | El dispositivo, cuando cambia el valor |
| Tráfico para un valor constante | Una petición y respuesta por intervalo | Solo renovaciones, por ejemplo, un intercambio cada 300 s |
| Tiempo hasta recibir un cambio | Hasta un intervalo de sondeo más la lectura | Ciclo de exploración COV del dispositivo más el tránsito; en MS/TP, también la espera del token |
| Cambios pequeños | Se observan en cada sondeo | Quedan ocultos hasta que su suma alcanza el incremento |
| Compatibilidad necesaria | ReadProperty, que todo dispositivo BACnet debe ejecutar | SubscribeCOV en el dispositivo y en el cliente |
| Recursos del dispositivo | No se conservan recursos | Una plaza por punto y cliente; cinco es el mínimo exigido |
| Tras reiniciar el dispositivo | Funciona el siguiente sondeo | Puede perder las suscripciones; vuelven con la siguiente renovación |
| Prueba de vigencia de los datos | Marca temporal de cada lectura correcta | Última renovación, última notificación y lectura de comprobación |
Presupuesto de sondeo en MS/TP
En BACnet/IP, sondear unos cientos de puntos una vez por minuto supone una carga pequeña. En MS/TP hay que calcularla. MS/TP transmite 10 bits por octeto. Una petición ReadProperty de Present_Value de una entrada analógica ocupa unos 23 octetos en su trama MS/TP, y la respuesta con un valor REAL ocupa unos 29. A 38.400 bit/s, eso equivale a unos 14 ms por punto, antes de los intervalos de cambio de sentido, el retraso de respuesta del controlador y el recorrido del token por los demás maestros.
Calcule las lecturas por segundo antes de elegir un intervalo. Leer 300 puntos cada 60 s supone 5 lecturas por segundo, unos 70 ms de cada segundo en el cable. Leer 300 puntos cada 5 s supone 60 lecturas por segundo, unos 0,8 s de cada segundo, sin dejar apenas tiempo para el tráfico propio de los controladores. ReadPropertyMultiple transporta varios puntos en un solo intercambio cuando el dispositivo lo admite y reduce la sobrecarga por punto. La guía de BACnet/IP frente a MS/TP explica el ciclo del token y las velocidades en baudios.
Qué significa el silencio
Con el sondeo, una lectura fallida es visible: se agota el tiempo de espera de la petición. Con COV, el silencio tiene dos significados. Puede que el valor no haya cambiado o que la suscripción haya desaparecido porque se reinició el dispositivo, terminó su duración o se perdió una notificación. Un valor estable y una suscripción inactiva parecen iguales.
Registre tres marcas temporales para cada punto COV:
- Último cambio: cuándo cambió el valor por última vez.
- Último mensaje: cuándo llegó la última notificación o lectura correcta.
- Última renovación: cuándo se confirmó por última vez SubscribeCOV para el punto.
Lea cada punto COV cada 15 minutos como comprobación. Si la lectura difiere del último valor notificado al menos en el incremento, se perdió una notificación: vuelva a suscribirse y emita una alarma de fallo. Marque el punto como obsoleto si la última renovación tiene más antigüedad que la duración de la suscripción, o si el último mensaje tiene más antigüedad que el intervalo de comprobación más un minuto. Para una duración de 600 s y una comprobación cada 15 minutos, los límites son 600 s y 960 s. La guía de datos obsoletos explica cómo mostrar y tratar valores que ya no están vigentes.
El sondeo exige el mismo cuidado de otra forma. Que un programador ejecute una tarea cada minuto no demuestra que llegue un valor válido cada minuto. Mida el tiempo entre lecturas correctas.
Elegir según el punto
| Punto | Elección habitual |
|---|---|
| Energía y potencia para análisis, cada 1 a 15 minutos | Sondear al intervalo de análisis, alineado con el reloj |
| Temperatura ambiente para informes de confort | Sondear cada 5 minutos o usar COV con un incremento de 0,2 a 0,5 °C |
| Estados de instalaciones y alarmas que deben llegar en segundos | COV con notificaciones confirmadas, duración de 600 s renovada cada 300 s y lectura de comprobación cada 15 minutos |
| Muchos puntos en un bus MS/TP | Sondear solo los puntos necesarios, usando ReadPropertyMultiple cuando se admita, o leerlos del supervisor BMS mediante BACnet/IP |
Compruebe la elección en la instalación comparando el registro del cliente con la tendencia propia del controlador:
- Deje el punto estable 30 minutos. Criterio de aceptación: se confirman renovaciones cada 300 s, no llegan notificaciones y las lecturas de comprobación coinciden con el último valor.
- Provoque un cambio menor que el incremento. Criterio de aceptación: no hay notificación y la siguiente lectura de comprobación muestra el valor nuevo.
- Provoque un cambio mayor que el incremento. Criterio de aceptación: llega una notificación. Registre el retraso desde el cambio hasta su llegada; esa es la latencia que experimentará la instalación.
- Reinicie el controlador. Criterio de aceptación: las notificaciones se reanudan antes de que transcurra un intervalo de renovación y el punto aparece obsoleto si no se reanudan.
- Reinicie el cliente. Criterio de aceptación: vuelve a suscribirse antes de marcar cualquier punto como vigente.
- Lea Active_COV_Subscriptions. Criterio de aceptación: el dispositivo mantiene las suscripciones esperadas y aún tiene plazas libres.
Sondeo con Edge
Edge, en el Gateway ZGW-20, lee BACnet/IP sondeando Present_Value. No se suscribe a COV. Cada punto sigue una programación alineada con el reloj, por ejemplo cada 60 o 300 segundos, o funciona en modo en directo, que también lee una vez por minuto. Cada lectura correcta lleva su propia marca temporal. Una lectura fallida no registra un valor nuevo, por lo que un controlador detenido aparece como un hueco. Edge no se conecta directamente a MS/TP: acceda a los controladores MS/TP mediante un enrutador BACnet/IP o el supervisor BMS. Sondee así los puntos de energía y ambientales de cambio lento; deje al BMS las alarmas que deban llegar en segundos.
Preguntas frecuentes
¿Qué significa COV en BACnet?
Cambio de valor. Un cliente se suscribe a un objeto y el dispositivo envía una notificación cuando el valor actual cambia al menos el incremento COV desde la última notificación o cuando cambian los indicadores de estado. Sustituye el sondeo repetido de puntos que cambian poco.
¿Qué es un incremento COV?
El cambio mínimo en el valor actual de un objeto analógico que provoca una notificación COV. Con un incremento de 0,5 °C y un último valor notificado de 20,0 °C, las lecturas de 20,2 y 20,4 °C no generan nada; una lectura de 20,5 °C o mayor genera una notificación. Los objetos binarios y multestado notifican cada cambio de estado.
¿Cuánto debe durar una suscripción COV?
Utilice una duración finita y renueve aproximadamente a la mitad: por ejemplo, 600 s de duración con renovación cada 300 s. BTL exige a los servidores COV que acepten cualquier duración entre 1 y 28.800 s. Una duración de 0 significa suscripción indefinida y las directrices BTL indican a los clientes que no la utilicen.
¿Es COV mejor que el sondeo?
Reduce el tráfico para puntos que cambian poco y comunica rápidamente los cambios de estado. Requiere compatibilidad en el dispositivo y en el cliente, ocupa una plaza de suscripción y necesita renovación y una lectura de comprobación. El sondeo es más sencillo y proporciona una marca temporal en cada intervalo.