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.

Ver como Markdown

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.