BACnet
Conecte dispositivos de automação predial BACnet/IP: instância do dispositivo, endereçamento por tipo e instância de objeto, descoberta Who-Is e presentValue.
O driver BACnet conversa com equipamento de automação predial por BACnet/IP. Toda tag lê o valor presente de um objeto BACnet: a leitura ao vivo de uma entrada analógica, o estado de uma saída binária, a posição de um valor de múltiplos estados. Adicione um dispositivo sob o driver BACnet no Connector; o painel mostra só os campos que este protocolo usa.
Conexão
| Campo | Significado | Padrão |
|---|---|---|
| Host ou IP | Endereço IP ou nome de host do dispositivo BACnet (ou do roteador que responde por ele). Um nome é resolvido para o seu endereço IPv4 quando o dispositivo conecta; um nome que este computador não consegue resolver deixa o dispositivo sem conexão, e o motivo diz isso. | vazio |
| Porta | Porta UDP do dispositivo, de 1 a 65535. Um campo vazio mostra 47808, o padrão do BACnet/IP, em cinza e o dispositivo é alcançado nela, que é também como se lê um dispositivo salvo com 0. | 47808 |
| Id do dispositivo | O número de instância do dispositivo, o número do objeto Device dele, único na rede BACnet. | 0 |
O cabeçalho do dispositivo mostra o endpoint montado, por exemplo
bacnet://192.168.0.30:47808/1234. Conectar envia uma requisição pelo tamanho
da lista de objetos do dispositivo para confirmar que o equipamento responde; a lista de objetos
em si não é percorrida. Essa resposta é a conexão: um dispositivo que não responde
fica offline em vez de aparecer como conectado, e o motivo (a porta UDP
já ocupada, um endereço que não é um endereço) é escrito na página Eventos
e no arquivo de log do dia. Não há campos de intervalo de leitura neste driver: as
tags dele são lidas uma vez por segundo.
Endereçamento
Uma tag BACnet é endereçada por dois campos tipados no cartão Origem da tag, sem endereço em texto livre:
| Campo | Significado | Valores aceitos | Padrão |
|---|---|---|---|
| Tipo de objeto | Que tipo de objeto BACnet ler. | os nove tipos abaixo | AnalogInput |
| Instância | O número de instância do objeto dentro do tipo dele. | 0 ou mais | 0 |
Os tipos de objeto oferecidos e os códigos de tipo padrão do BACnet:
| Tipo de objeto | Código | O valor presente guarda |
|---|---|---|
AnalogInput |
0 | um número medido |
AnalogOutput |
1 | um número comandado |
AnalogValue |
2 | um número guardado |
BinaryInput |
3 | inativo/ativo |
BinaryOutput |
4 | inativo/ativo |
BinaryValue |
5 | inativo/ativo |
MultiStateInput |
13 | um número de estado a partir de 1 |
MultiStateOutput |
14 | um número de estado a partir de 1 |
MultiStateValue |
19 | um número de estado a partir de 1 |
AnalogInput 5 no dispositivo 1234 significa "o valor presente da entrada analógica 5
daquele dispositivo". Toda leitura pede a propriedade presentValue do objeto; outras
propriedades não são endereçáveis. A linha somente leitura Endereço de origem
(barramento) do cartão Origem mostra o par tipo,instância montado enquanto você edita.
Tipos de dado
O seletor de Tipo de dado oferece quatro tipos. Escolha o que corresponde ao objeto:
| Tipo de dado | Serve para | Notas |
|---|---|---|
| Float | objetos analógicos | um valor presente Real; doubles são estreitados para Float |
| Boolean | objetos binários | um valor presente booleano, ou o 0 e o 1 enumerados com que um objeto binário responde |
| Int32 | múltiplos estados e outros valores inteiros | respostas com sinal, sem sinal e enumeradas chegam todas aqui |
| String | valores de cadeia de caracteres | texto como o dispositivo o envia |
O tipo escolhido tem de bater com o que o objeto guarda. Um dispositivo que responde com outra coisa faz a leitura daquela tag falhar: a tag vai a qualidade ruim e o motivo nomeia o que chegou ("O dispositivo respondeu um valor Single para um ponto declarado Inteiro."), em vez de um número convertido entrar na tendência, no histórico e nos alarmes. Ler um objeto analógico como booleano, ou um Real como Int32, é exatamente esse caso. O resto do dispositivo segue lendo; nada é reconectado por causa de uma tag com o tipo errado.
Uma tag cujo objeto o dispositivo não tem falha a leitura com a resposta do
próprio dispositivo: o motivo diz que o dispositivo não tem objeto naquele
endereço e nomeia o erro que ele enviou (ERROR_CODE_UNKNOWN_OBJECT), então um
endereço errado se distingue de um dispositivo que parou de responder. O
dispositivo continua conectado.
Escritas
Tags cujo Acesso é Leitura e escrita ou Somente escrita podem ser escritas. Uma escrita
define o presentValue do objeto no tipo que a norma BACnet dá a esse tipo de objeto,
qualquer que seja o tipo de dado da tag:
| Objeto | Escrito como | Aceita |
|---|---|---|
| Entrada, saída ou valor binário | Enumerated | inativo (0) ou ativo (1), vindo de uma tag Boolean ou de um Int32 igual a 0 ou 1 |
| Entrada, saída ou valor de múltiplos estados | Unsigned | um número de estado a partir de 1 |
| Entrada, saída ou valor analógico | Real | um número vindo de uma tag Float ou Int32 |
| Qualquer outro tipo de objeto | o tipo de dado da tag | Float um Real, Boolean um Boolean, Int32 um inteiro com sinal, String uma cadeia de caracteres |
Nenhuma prioridade de comando é enviada com a escrita. Um valor que o objeto não comporta, como 0 num objeto de múltiplos estados ou 2 num binário, é recusado antes de qualquer envio, e a recusa diz o motivo. Quando o dispositivo responde à escrita com um erro, a tag relata a classe e o código de erro que o dispositivo enviou em vez de fingir sucesso, e o dispositivo continua conectado. Uma tag nova nasce como Somente leitura.
Descoberta
O botão Descobrir do Connector faz difusão de um Who-Is do BACnet e escuta as respostas I-Am por 10 segundos. Todo dispositivo que responde vira um candidato que carrega o endereço, a porta e a instância de dispositivo dele, pronto para adicionar com os campos de conexão preenchidos, e ele aparece na lista no instante em que responde, e não ao fim dos dez segundos: uma varredura que você cancela no meio guarda tudo que já tinha respondido. A varredura não navega objetos, então os candidatos chegam com zero tags; acrescente você mesmo os pares de tipo e instância de objeto.
O Who-Is sai pela rede que o cartão Escopo da varredura indica. A caixa dele
recebe um endereço IPv4 dessa rede, o de um dispositivo ou o do próprio computador
nela (por exemplo 192.168.1.20), e a varredura então faz difusão só nessa rede.
Vazia, o Who-Is sai por todas as redes deste computador, então um computador com
duas placas de rede, uma VPN ou o Docker acha os dispositivos de cada uma delas. O
que não for um endereço IPv4 escrito por inteiro é recusado embaixo da caixa, e
Descobrir fica cinza até ser corrigido.
Um dispositivo que responde por um roteador BACnet é adicionado do mesmo jeito. O candidato dele carrega o endereço do roteador e, ao lado, a rede e o endereço do próprio dispositivo naquela rede; os dois são guardados quando você o adiciona, e toda leitura é enviada ao roteador nomeando o dispositivo lá dentro. Um dispositivo achado assim, portanto, lê como qualquer outro, e o endpoint dele mostra "dispositivo via roteador". Um dispositivo adicionado à mão não tem rota e é alcançado diretamente no host dele.
Bom saber
- Só BACnet/IP: equipamento MS/TP ou BACnet/SC só é alcançável por um roteador que o apresente em BACnet/IP, e a varredura é o que o encontra: a rota em que um dispositivo responde é guardada da varredura, então adicione-o pela lista descoberta em vez de digitar os campos dele à mão.
- Num computador com várias interfaces de rede (duas placas de rede, uma VPN, o Docker), cada dispositivo é alcançado pela interface por onde este computador roteia o endereço dele, a mesma que qualquer outro programa daqui usaria; não há nada a escolher.
- Só o socket que escuta as mensagens dos dispositivos fica na porta UDP padrão 47808 do BACnet nesta estação, e por isso outra aplicação BACnet que segure aquela porta com exclusividade no mesmo computador pode conflitar com ele. Os pedidos a um dispositivo saem de uma porta que o sistema escolhe para cada cliente.
- A leitura cíclica é fixa em um segundo para toda tag deste driver; os campos usuais de intervalo de leitura não são mostrados.