BACnet
Conectar equipos de automatización de edificios BACnet/IP: instancia de dispositivo, direccionamiento por tipo e instancia de objeto, descubrimiento Who-Is y presentValue.
El driver BACnet habla con equipos de automatización de edificios sobre BACnet/IP. Cada tag lee el valor presente de un objeto BACnet: la lectura en vivo de una entrada analógica, el estado de una salida binaria, la posición de un valor multiestado. Agregue un dispositivo bajo el driver BACnet en el Connector; el panel muestra solo los campos que usa este protocolo.
Conexión
| Campo | Significado | Valor inicial |
|---|---|---|
| Host o IP | Dirección IP o nombre de host del dispositivo BACnet (o del enrutador que contesta por él). Un nombre se resuelve a su dirección IPv4 cuando el dispositivo se conecta; un nombre que esta computadora no puede resolver deja el dispositivo sin conexión, y el motivo lo dice. | vacío |
| Puerto | Puerto UDP del dispositivo, de 1 a 65535. Un campo vacío muestra 47808, el estándar de BACnet/IP, en gris y se llega al dispositivo por él, que es también como se lee un dispositivo guardado con 0. | 47808 |
| Id del dispositivo | El número de instancia del dispositivo, el número de su objeto Device, único en la red BACnet. | 0 |
El encabezado del dispositivo muestra el endpoint armado, por ejemplo
bacnet://192.168.0.30:47808/1234. Conectarse envía una sola petición por el tamaño de
la lista de objetos del dispositivo, para confirmar que el equipo contesta; la lista de
objetos misma no se recorre. Esa respuesta es la conexión: un dispositivo que no contesta
se queda sin conexión en lugar de mostrarse como conectado, y el motivo (el puerto UDP ya
tomado, una dirección que no es una dirección) se escribe en la página Eventos y en el
archivo de registro del día. Este driver no tiene campos de intervalo de sondeo: sus tags
se leen una vez por segundo.
El direccionamiento
Un tag de BACnet se direcciona con dos campos tipados de la tarjeta Fuente del tag, sin ninguna dirección de texto libre:
| Campo | Significado | Valores aceptados | Valor inicial |
|---|---|---|---|
| Tipo de objeto | Qué clase de objeto BACnet se lee. | los nueve tipos de abajo | AnalogInput |
| Instancia | El número de instancia del objeto dentro de su tipo. | 0 en adelante | 0 |
Los tipos de objeto ofrecidos y sus códigos de tipo estándar de BACnet:
| Tipo de objeto | Código | El valor presente contiene |
|---|---|---|
AnalogInput |
0 | un número medido |
AnalogOutput |
1 | un número comandado |
AnalogValue |
2 | un número guardado |
BinaryInput |
3 | inactivo/activo |
BinaryOutput |
4 | inactivo/activo |
BinaryValue |
5 | inactivo/activo |
MultiStateInput |
13 | un número de estado desde 1 |
MultiStateOutput |
14 | un número de estado desde 1 |
MultiStateValue |
19 | un número de estado desde 1 |
AnalogInput 5 en el dispositivo 1234 significa "el valor presente de la entrada
analógica 5 de ese dispositivo". Cada lectura pide la propiedad presentValue del objeto;
las demás propiedades no son direccionables. La línea de solo lectura Dirección de
origen (bus) de la tarjeta Fuente muestra el par tipo,instancia armado conforme usted
edita.
Los tipos de dato
El selector de Tipo de dato ofrece cuatro tipos. Elija el que corresponda al objeto:
| Tipo de dato | Sirve para | Notas |
|---|---|---|
| Float | los objetos analógicos | un valor presente Real; los dobles se estrechan a Float |
| Boolean | los objetos binarios | un valor presente booleano, o el 0 y el 1 enumerados con los que contesta un objeto binario |
| Int32 | los multiestado y los demás valores enteros | las respuestas con signo, sin signo y enumeradas llegan todas aquí |
| String | los valores de cadena de caracteres | el texto tal como lo manda el dispositivo |
El tipo elegido tiene que coincidir con lo que contiene el objeto. Un dispositivo que contesta con otra cosa hace fallar la lectura de ese tag: el tag pasa a mala calidad y el motivo nombra lo que llegó ("El dispositivo contestó un valor Single para un punto declarado como Integer."), en lugar de que un número convertido entre en la tendencia, en el histórico y en las alarmas. Leer un objeto analógico como booleano, o un Real como Int32, es exactamente ese caso. El resto del dispositivo sigue leyendo; nada se reconecta por un tag cuyo tipo está mal.
Un tag cuyo objeto el dispositivo no tiene falla su lectura con la respuesta del propio
dispositivo: el motivo dice que el dispositivo no tiene ningún objeto en esa dirección y
nombra el error que mandó (ERROR_CODE_UNKNOWN_OBJECT), así que una dirección
equivocada se distingue de un dispositivo que dejó de contestar. El dispositivo sigue
conectado.
Las escrituras
Los tags cuyo Acceso es Lectura y escritura o Solo escritura se pueden escribir.
Una escritura pone el presentValue del objeto en el tipo que la norma BACnet le da a esa
clase de objeto, sin importar el tipo de dato del tag:
| Objeto | Se escribe como | Acepta |
|---|---|---|
| Entrada, salida o valor binario | Enumerated | inactivo (0) o activo (1), desde un tag Boolean o un Int32 igual a 0 o 1 |
| Entrada, salida o valor multiestado | Unsigned | un número de estado desde 1 |
| Entrada, salida o valor analógico | Real | un número desde un tag Float o Int32 |
| Cualquier otro tipo de objeto | el tipo de dato del tag | Float un Real, Boolean un Boolean, Int32 un entero con signo, String una cadena de caracteres |
Con la escritura no se envía ninguna prioridad de comando. Un valor que el objeto no puede contener, como 0 para un objeto multiestado o 2 para uno binario, se rechaza antes de mandar nada, y el rechazo dice por qué. Cuando el dispositivo contesta la escritura con un error, el tag reporta la clase y el código de error que mandó el dispositivo en lugar de fingir que salió bien, y el dispositivo sigue conectado. Un tag nuevo arranca como Solo lectura.
El descubrimiento
El botón Descubrir del Connector difunde un Who-Is de BACnet y escucha las respuestas I-Am durante 10 segundos. Cada dispositivo que contesta se convierte en un candidato que lleva su dirección, su puerto y su instancia de dispositivo, listo para agregarse con los campos de conexión llenos, y aparece en la lista en cuanto contesta y no al final de los diez segundos: un escaneo que usted cancele a medio camino conserva todo lo que ya había contestado. El escaneo no recorre los objetos, así que los candidatos llegan con cero tags; ponga usted mismo los pares de tipo e instancia de objeto.
El Who-Is sale por la red que indica la tarjeta Alcance del escaneo. Su cuadro
admite una dirección IPv4 de esa red, la de un dispositivo o la propia de esta
computadora en ella (por ejemplo 192.168.1.20), y el escaneo difunde entonces solo
en esa red. Vacío, el Who-Is sale por todas las redes de esta computadora, así que una
computadora con dos tarjetas de red, una VPN o Docker encuentra los dispositivos de
cada una. Lo que no sea una dirección IPv4 escrita completa se rechaza bajo el cuadro,
y Descubrir sigue en gris hasta que se corrija.
Un dispositivo que contesta a través de un enrutador BACnet se agrega igual. Su candidato lleva la dirección del enrutador y, junto a ella, la red propia del dispositivo y su dirección en esa red; las dos se conservan cuando usted lo agrega, y cada lectura se envía al enrutador nombrando al dispositivo que hay dentro. Por eso un dispositivo encontrado así se lee como cualquier otro, y su endpoint dice "dispositivo a través del enrutador". Un dispositivo agregado a mano no tiene ruta y se alcanza directamente en su host.
Bueno saber
- Solo BACnet/IP: un equipo MS/TP o BACnet/SC se alcanza únicamente a través de un enrutador que lo presente en BACnet/IP, y el escaneo es lo que lo encuentra: la ruta por la que contesta un dispositivo se conserva desde el escaneo, así que agréguelo desde la lista descubierta en lugar de escribir sus campos a mano.
- En una computadora con varias interfaces de red (dos tarjetas de red, una VPN, Docker), cada dispositivo se alcanza por la interfaz por la que esta computadora enruta su dirección, la misma que usaría cualquier otro programa aquí; no hay nada que elegir.
- Solo el socket que escucha los mensajes de los dispositivos ocupa el puerto UDP estándar de BACnet, el 47808, en esta estación, así que otra aplicación BACnet que tenga ese puerto en exclusiva en la misma computadora puede entrar en conflicto con él. Las peticiones a un dispositivo salen de un puerto que el sistema elige para cada cliente.
- El sondeo es fijo de un segundo para todos los tags de este driver; los campos habituales de intervalo de sondeo no se muestran.