OPC UA

Um cliente OPC UA para servidores de terceiros, com confiança condicionada a certificado, endereçamento por node id e descoberta do espaço de endereços.

Ver como Markdown

O driver OPC UA é um cliente para servidores OPC UA de terceiros (CLPs, gateways, historiadores, outros sistemas SCADA) sobre opc.tcp. Ele é a contraparte de saída do servidor OPC UA embutido que publica o espaço de endereços desta estação (descrito em Configurações); os dois compartilham a identidade de aplicação da estação, mas confiam nos seus pares de forma independente.

Dispositivo

Campo Significado Padrão
Host Nome DNS, endereço IPv4 ou IPv6 do servidor. localhost quando deixado vazio
Porta Porta TCP do endpoint. 4840 (um 0 configurado recai em 4840)
Caminho do recurso O caminho de endpoint que alguns servidores exigem depois do host e da porta, produzindo opc.tcp://host:port/path. Deixe vazio quando o servidor responde na raiz. vazio
Segurança da sessão Desligada, a sessão vai assinada e criptografada e um equipamento que não oferece nada melhor é recusado. Permitir sessão sem segurança abre a sessão mesmo assim, em claro, para um equipamento que não anuncia nenhum endpoint seguro. desligada
Usuário / Senha A identidade de usuário da sessão. Usuário vazio significa sessão anônima. A senha fica protegida em repouso pela DPAPI do Windows por usuário e só pode ser lida na máquina e na conta do Windows que a digitaram. anônima
Intervalo de leitura (ms) Taxa de leitura padrão para as tags que não a sobrepõem. 1000

Segurança e certificados

Conectar começa pela lista de endpoints do servidor: o cliente escolhe o endpoint mais seguro que o servidor anuncia e autentica a aplicação com o certificado da própria estação, a mesma identidade de aplicação OPC UA que o servidor embutido usa. Muitos servidores exigem que esse certificado seja confiável do lado deles antes de aceitarem a sessão; esse passo acontece no equipamento.

Um equipamento que não anuncia nada melhor do que um endpoint sem segurança é recusado, e o dispositivo diz por quê. Aquela sessão levaria as leituras e a identificação em claro e não provaria a identidade do equipamento, então ela só abre onde você pediu isso naquele dispositivo: Segurança da sessão, Permitir sessão sem segurança, no cartão de conexão. A escolha pertence àquele dispositivo, viaja no endereço dele como ?security=none e vale tanto para a sessão de leitura quanto para a navegação da descoberta. Ligá-la nunca rebaixa um equipamento que oferece segurança: o endpoint mais seguro anunciado continua sendo o escolhido.

No outro sentido, a confiança é fechada por padrão e explícita. O certificado do equipamento é conferido antes de a sessão abrir:

  • Um certificado que esta estação nunca aprovou é recusado, registrado para revisão, e o painel do dispositivo mostra um aviso nomeando a aprovação que ele espera: o dispositivo não está "offline", ele está esperando uma decisão.
  • Você revisa certificados em Configurações → Acesso de equipamentos, a metade de saída da confiança em certificados: um certificado registrado fica em Aguardando aprovação até você Aprovar (sessões novas podem abrir) ou Bloquear (recusado sem levantar avisos repetidos). Esta é a lista de equipamentos; o Acesso de clientes, na mesma página, é o outro sentido, quem pode conectar de fora ao servidor da própria estação.
  • Revogar aprovação, numa linha aprovada, encerra as sessões vivas que rodam sobre aquele certificado e o devolve à lista de revisão, para que a próxima conexão pergunte de novo.
  • Um equipamento que apresenta nenhum certificado não prova nada sobre quem respondeu, então não há o que aprovar e a sessão é recusada, com o endereço dela escrito no diário. Ele só conecta sob o mesmo Permitir sessão sem segurança, que passa a ser o que faz as vezes da aprovação.

Aprovar o servidor de um equipamento nunca autoriza aquele certificado a conectar de fora ao servidor da própria estação: os dois sentidos mantêm depósitos separados de propósito.

Comportamento da sessão

As tags são lidas ciclicamente: cada leitura pergunta ao servidor o valor atual do nó. O veredicto do próprio servidor viaja com toda amostra: um valor carimbado como Bad ou Uncertain é recusado e a tag lê qualidade ruim, então uma origem duvidosa nunca é lavada e transformada numa leitura boa. Um nó que não existe mais no servidor lê como sem valor, em vez de fazer o dispositivo inteiro falhar.

A sessão é supervisionada por keep-alives; depois de três keep-alives perdidos, o cliente inicia uma reconexão automática e segue em frente. O laço de tentativas em segundo plano da aplicação é dono da conexão inicial, então um servidor inalcançável não custa nada na inicialização.

Endereçamento da tag

Uma tag é endereçada pelo Node id dela, digitado como texto livre e enviado literalmente. As formas aceitas são as notações padrão do OPC UA:

Exemplo Significado
ns=2;s=Temperature Identificador de texto no índice de namespace 2
i=2258 Identificador numérico no namespace 0 (aqui: o CurrentTime do servidor)
ns=3;i=1042 Identificador numérico no índice de namespace 3
nsu=urn:vendor:app;s=Line1.Speed Forma expandida, que nomeia o namespace por URI em vez de índice, robusta contra mudanças de índice entre reinícios

A tag lê e escreve o atributo Value do nó.

Tipos de valor

Tipos oferecidos
Boolean, Byte, Int16, Int32, Int64, Float, Double, String (oito ao todo)

Os valores são apenas escalares: vetores, estruturas e outros valores complexos são recusados como ilegíveis em vez de achatados num número enganoso, e a tag lê qualidade ruim. Uma tag assim falha sozinha; as outras tags do dispositivo seguem lendo, e nada é reconectado por causa dela. Um texto vazio é um valor, não uma falha. Tipos fora do conjunto oferecido (larguras sem sinal, DateTime, Guid, ByteString) não estão disponíveis neste driver.

Uma varredura de um servidor, portanto, oferece menos canais do que o servidor guarda: um nó que declara uma lista de valores, e um nó cujo tipo está fora do conjunto oferecido, ficam de fora. Eles não são descartados em silêncio, porém. A varredura os conta e a mensagem final dela diz quantos e de qual tipo, por exemplo "5 canal(is) ficaram de fora: 3 do tipo UInt32, 2 que guardam uma lista de valores em vez de um valor único.", para que uma lista curta seja lida como uma lista curta, e não como um controlador vazio.

Escritas

Uma tag gravável escreve o atributo Value do nó pelo serviço Write do OPC UA. A resposta do servidor é o veredicto: uma escrita rejeitada aparece como falha, e o valor cacheado só avança quando ela é aceita. Como em todo lugar, o campo de escrita recebe o valor de engenharia e a cadeia de valor é revertida antes de o valor bruto ser enviado.

Descoberta

O comando Descobrir recebe um alvo no campo ao lado dele: um endereço de servidor OPC UA como opc.tcp://plc-host:4840. A varredura tem dois estágios, e a linha de progresso nomeia o que está rodando:

  1. Endpoints: o serviço de descoberta padrão do alvo é consultado e toda URL de descoberta anunciada vira um endpoint candidato. Portas e caminhos de servidor personalizados vão e voltam nos campos de conexão do candidato.
  2. Canais: o espaço de endereços de cada candidato é navegado a partir da pasta Objects para baixo, e toda variável legível é listada como tag candidata com o tipo e o acesso dela. As áreas de diagnóstico do servidor são puladas.

A navegação entra anonimamente (com a mesma escolha do endpoint mais seguro, a mesma recusa de uma sessão sem segurança e a mesma condição do certificado do equipamento). Um servidor que recusa sessões anônimas, um servidor que não anuncia nenhum endpoint seguro, ou uma navegação que falha por qualquer motivo, ainda deixa o endpoint disponível para adicionar, com zero tags: adicione-o, defina as credenciais e a segurança da sessão no dispositivo e configure as tags à mão. Nada é persistido até você Adicionar um candidato, e cancelar mantém os candidatos que já estavam completos.

Limites que vale conhecer

  • As leituras são consultas cíclicas ao atributo Value; o driver não cria assinaturas no servidor remoto.
  • Só valores escalares: uma tag não consegue endereçar um elemento de vetor nem um campo de estrutura.
  • A condição de aprovação vale por certificado: um equipamento que troca o certificado volta à lista de revisão e espera por uma decisão nova.