Protocolos y datos

Matriz de prioridades BACnet y liberación de órdenes

Prioridades de mando BACnet: las 16 ranuras, liberación con NULL, Relinquish_Default y pruebas de escritura sin dejar una anulación.

Un objeto BACnet que admite órdenes, como una salida binaria que arranca un ventilador o un valor analógico que contiene una consigna, no se limita a adoptar el último valor que se haya escrito. Un sistema de seguridad, un operador y un horario pueden dar órdenes al mismo ventilador sin interferir entre sí porque cada uno escribe en una posición de la matriz de prioridades del objeto.

Esta guía forma parte de la serie sobre BACnet y protocolos de edificios.

Cómo decide la matriz

Cada una de las 16 posiciones contiene un valor o NULL (vacío). El Present_Value del objeto procede de la primera posición, empezando por la 1, que no sea NULL. La prioridad 1 es la más alta. Cuando todas las posiciones contienen NULL, Present_Value toma el Relinquish_Default del objeto.

La norma asigna un nombre a cinco prioridades. Las demás quedan disponibles para asignarlas en la instalación:

PrioridadUso definido por la norma
1Seguridad de la vida, manual
2Seguridad de la vida, automática
3, 4Disponibles
5Control de equipos críticos
6Tiempo mínimo de encendido/apagado
7Disponible
8Operador manual
9 a 16Disponibles; los horarios y el control habitual suelen utilizar las más bajas

Un plan habitual asigna los horarios a la prioridad 16, la gestión energética o la respuesta a la demanda a alguna prioridad entre 9 y 15, y las anulaciones del operador a la 8. Documente este plan junto con la lista de puntos.

Ejemplo paso a paso

Un ventilador de impulsión (binary-output 4) tiene como Relinquish_Default el estado inactivo (apagado):

PasoMatriz de prioridadesPresent_Value
Inicio: todas las posiciones son NULLApagado (Relinquish_Default)
El horario escribe encendido en la 1616 = encendidoEncendido
Un sistema de respuesta a la demanda escribe apagado en la 1212 = apagado, 16 = encendidoApagado
Un operador escribe encendido en la 88 = encendido, 12 = apagado, 16 = encendidoEncendido
Termina el evento; el sistema de respuesta a la demanda escribe NULL en la 128 = encendido, 16 = encendidoEncendido
El operador libera la 816 = encendidoEncendido
El horario libera la 16 por la nocheApagado (Relinquish_Default)

Se desprenden dos lecciones. La orden del sistema de respuesta a la demanda se aceptó, pero dejó de tener efecto mientras el operador mantuvo ocupada la prioridad 8. Y si ese sistema no hubiese liberado la prioridad 12, el ventilador habría permanecido apagado cuando el horario volviese a encenderlo a la mañana siguiente.

Libere la posición; no sobrescriba el valor

Para terminar una orden, escriba NULL en la misma prioridad. Escribir el valor opuesto no equivale a liberarla: la posición sigue ocupada y bloquea todas las prioridades inferiores. Las órdenes olvidadas en prioridades intermedias son una causa habitual de que una instalación ignore su horario semanas después de una prueba.

Algunos clientes no pueden enviar NULL o lo ocultan tras otro método. La documentación de Beckhoff, por ejemplo, explica cómo su biblioteca BACnet escribe NULL mediante el envío de un valor especial. Compruebe cómo libera una orden el cliente que utiliza antes de escribir nada.

Compruebe también el tiempo mínimo de encendido/apagado en la prioridad 6. Una salida binaria con tiempos mínimos escribe su propio valor en la prioridad 6 durante el tiempo mínimo después de cada cambio, por lo que una orden de menor prioridad puede retrasarse.

Probar una escritura de forma segura

  1. Acuerde con el responsable del equipo el objeto, la prioridad, el valor, la duración y el procedimiento para liberar la orden.
  2. Lea y registre la matriz Priority_Array completa y Present_Value antes de la prueba.
  3. Escriba la orden. Vuelva a leer Priority_Array: ¿aparece su valor en la posición acordada?
  4. Compruebe Present_Value y el equipo físico. Si una posición de mayor prioridad contiene un valor, su orden no tendrá efecto.
  5. Libere la posición escribiendo NULL en la misma prioridad y vuelva a leer la matriz.
  6. Confirme que el equipo ha vuelto al estado esperado.

Si una escritura agota el tiempo de espera, se desconoce su resultado; no debe darse por fallida. Lea la matriz antes de volver a intentarlo.

Prioridades y Modbus

Modbus no tiene matriz de prioridades. Una escritura cambia el registro y prevalece la última. Cuando un dispositivo Modbus lo comparten un BMS y un sistema energético, acuerde cuál puede escribir o utilice un controlador que arbitre las órdenes. La guía de BACnet frente a Modbus compara ambos protocolos.

Escrituras con Edge

Edge, en el Gateway ZGW-20, puede escribir en objetos BACnet de salida y de valor que un administrador haya habilitado para control. Cada escritura utiliza una prioridad elegida entre 1 y 16; si no se configura ninguna, utiliza la 16. Edge no libera órdenes escribiendo NULL. Por ello, antes de una prueba acuerde cómo se liberará la orden, normalmente mediante las herramientas del BMS. Trate cada escritura como la prueba de control aprobada que se describe arriba y consulte la guía de control local para planificar las situaciones de fallo.

Preguntas frecuentes

¿Qué es la matriz de prioridades BACnet?

Una propiedad de los objetos que admiten órdenes, como las salidas binarias y analógicas, con 16 posiciones. Cada posición puede contener un valor ordenado o NULL. El valor actual del objeto procede de la posición ocupada de mayor prioridad (el número más bajo), o de Relinquish_Default si todas las posiciones contienen NULL.

¿Cuáles son los niveles de prioridad BACnet definidos por la norma?

La norma asigna nombre a cinco: 1, seguridad de la vida manual; 2, seguridad de la vida automática; 5, control de equipos críticos; 6, tiempo mínimo de encendido/apagado; y 8, operador manual. Las demás están disponibles para las aplicaciones; muchas instalaciones usan una prioridad baja, como la 16, para horarios, y una intermedia para gestión energética.

¿Qué significa liberar una orden en BACnet?

Liberar la orden escribiendo NULL en la posición de prioridad que la contiene. El objeto sigue entonces la siguiente posición de menor prioridad que tenga un valor, o su Relinquish_Default.

¿Qué es Relinquish_Default?

El valor que adopta un objeto que admite órdenes cuando ninguna posición de su matriz de prioridades contiene una orden; por ejemplo, «apagado» para un ventilador o una consigna predeterminada para una válvula.