# Drivers

> O que é um driver, onde os drivers são listados e como um deles é acrescentado à estação, o driver fixo de um dispositivo, a tabela de todos os drivers que este produto conhece, o que cada página de driver documenta e a nota sobre drivers que um pacote não carrega.

Um **driver** é o protocolo que a estação usa para conversar com uma família de equipamentos: registradores Modbus sobre TCP, um servidor OPC UA, um CLP Siemens. Todo dispositivo da página Connector pertence a exatamente um driver, e o driver decide quais campos de conexão o dispositivo mostra, como as tags dele são endereçadas, quais tipos de dado elas podem carregar, se podem ser escritas, se o driver consegue varrer atrás de equipamento, e se a estação as lê ciclicamente ou o equipamento envia por push. Este grupo tem uma página por driver; esta página é o que todas elas têm em comum.

## O registro {#the-registry}

O conjunto de drivers é fixo: ele vem com a aplicação e não pode ser estendido pela página. A pasta **Drivers**, no topo da árvore da coluna Comunicação, abre o catálogo dos que esta instalação carrega, cada um com a sua descrição, a sua contagem de dispositivos, a sua saúde e **Acrescentar driver**, ou **Abrir** e **Remover o driver** depois de acrescentado; o catálogo e as regras dele estão em [A lista de drivers e a página de um driver](connector-drivers).

Todo driver que o pacote carrega está pronto para uso, sem interruptor para ligá-lo ou desligá-lo: a estação acrescenta os que usa. Sob a pasta Drivers, a árvore lista os drivers acrescentados, com ou sem algo abaixo deles, então a coluna traz o que a estação está preparada para ler. Um driver é acrescentado com **Acrescentar driver** na linha dele no catálogo ou no menu Novo… da coluna, e removido com **Remover o driver** na linha dele no catálogo, na barra dele ou no menu de contexto dele. Remover não exclui nada: é recusado enquanto o driver tem um dispositivo, uma linha serial, um broker ou uma pasta, e um driver que tem algum deles está sempre acrescentado. Uma estação nova não tem driver acrescentado; uma estação atualizada de uma versão anterior começa com os drivers que já usa acrescentados.

## O driver de um dispositivo é fixo {#the-driver-of-a-device-is-fixed}

Você escolhe o driver quando cria o dispositivo: no menu Novo… da coluna o dispositivo é criado pela entrada do próprio driver, e o Acrescentar dispositivo na página de um driver cria sob aquele driver. Dali em diante o cartão Dispositivo mostra o driver como texto somente leitura. Para mudar um dispositivo para outro protocolo, crie um dispositivo novo sob o outro driver e exclua o antigo; o endereço muda, então as referências têm de ser apontadas para as tags novas pelo cartão Usada por de cada tag.

## Todos os drivers {#every-driver}

Os drivers estão agrupados pela família de equipamentos que alcançam: os mesmos grupos, na mesma ordem, em que o catálogo **Drivers** e o **Acrescentar driver** do menu Novo… os listam.

### CLPs {#plcs}

| Driver | Conversa com |
| --- | --- |
| [Beckhoff ADS](driver-beckhoff-ads) | CLPs Beckhoff TwinCAT sobre ADS/AMS. |
| [Mitsubishi MC](driver-mitsubishi) | CLPs Mitsubishi pelo driver MELSEC MC. |
| [Omron](driver-omron) | CLPs Omron: controladores CJ, CS e CP por endereço de memória sobre FINS (UDP, TCP ou Host Link numa linha serial), e controladores NJ, NX e NY por nome de variável sobre EtherNet/IP. |
| [Rockwell EtherNet/IP](driver-rockwell) | CLPs Allen-Bradley / Rockwell sobre EtherNet/IP (CIP). |
| [Siemens S7](driver-siemens-s7) | CLPs Siemens S7 pelo driver S7comm. |

### Protocolos industriais {#industrial-protocols}

| Driver | Conversa com |
| --- | --- |
| [BACnet](driver-bacnet) | Dispositivos de automação predial BACnet/IP. |
| [Generic serial and TCP](driver-generic-serial-tcp) | Equipamentos com um protocolo próprio de texto ou de bytes, como balanças e leitores de código de barras, por uma linha serial, TCP ou UDP. |
| [Modbus RTU](driver-modbus-rtu) | Registradores Modbus por uma linha serial (RS-485/232), em modo de transmissão RTU ou ASCII. |
| [Modbus TCP](driver-modbus-tcp) | Registradores Modbus sobre TCP/IP, em enquadramento MBAP ou como quadros RTU para um conversor serial-Ethernet. Porta padrão 502. |
| [MQTT](driver-mqtt) | Dispositivos que publicam por um broker MQTT externo, em MQTT simples ou Sparkplug B. |
| [OCPP](driver-ocpp) | Pontos de recarga de veículos elétricos por OCPP (os pontos de recarga conectam a esta estação). |
| [OPC DA](driver-opc-da) | Servidores OPC Data Access clássicos via COM/DCOM, por um processo auxiliar de 32 bits só deles. |
| [OPC UA](driver-opc-ua) | Cliente OPC Unified Architecture sobre opc.tcp. |
| [SNMP](driver-snmp) | Equipamentos de rede que respondem SNMP v1, v2c ou v3, como nobreaks, PDUs, switches e sensores de sala técnica; com o Redfish para os servidores, cobre a sala técnica. |

### Instrumentos e aquisição {#instruments-and-acquisition}

| Driver | Conversa com |
| --- | --- |
| [Fluke NetDAQ](driver-fluke-netdaq) | Unidades de aquisição de dados Fluke NetDAQ (2640A, 2645A) e 2680 Series (2680A, 2686A), configuradas a partir das tags e lidas pela biblioteca da própria Fluke num processo auxiliar de 32 bits. |
| [NI-DAQmx](driver-ni-daqmx) | Hardware de aquisição de dados da National Instruments (chassis cDAQ e seus módulos, dispositivos USB e PCI Express) pelo NI-DAQmx instalado neste computador, uma amostra por leitura. |
| [SCPI instruments](driver-scpi) | Instrumentos de bancada que falam SCPI, como multímetros, fontes de alimentação e cargas eletrônicas, por TCP, por linha serial, ou por USB e GPIB através do VISA. |

### Sem fio {#wireless}

| Driver | Conversa com |
| --- | --- |
| [LoRaWAN](driver-lorawan) | Sensores LoRaWAN e concentradores de rádio pelo servidor de rede Basics Station embutido. |
| [Matter](driver-matter) | Dispositivos residenciais Matter (comissionamento por Bluetooth). |

### Web e APIs {#web-and-apis}

| Driver | Conversa com |
| --- | --- |
| [AVEVA PI](driver-aveva-pi) | Pontos do AVEVA PI System pelo PI Web API, por HTTPS por padrão. |
| [HTTP](driver-http) | Endpoints HTTP e HTTPS genéricos lidos ciclicamente como tags, com uma credencial opcional. |
| [Redfish](driver-redfish) | API REST Redfish para hardware de servidor e de datacenter. |

### Arquivos e bancos de dados {#files-and-databases}

| Driver | Conversa com |
| --- | --- |
| [Database](driver-database) | Tabelas do banco de dados de um sistema da fábrica (SQL Server, PostgreSQL, MySQL e MariaDB, SQLite, ou qualquer banco de dados pelo driver ODBC dele), cada tag lendo uma célula pela tabela, pela coluna e pela linha ou executando uma consulta própria; a célula ou um comando próprio da tag escritos onde uma tag manda. |
| [File](driver-file) | Arquivos que outro programa grava numa pasta local ou de rede (CSV e texto em colunas, texto livre, JSON, XML), lidos um arquivo por vez ou de uma pasta de entrada; linhas ou arquivos inteiros gravados para esse programa onde o dispositivo permite. |

### Teste {#test}

| Driver | Conversa com |
| --- | --- |
| [Simulated](driver-simulated) | Sinais sintéticos gerados na própria aplicação, para testar sem hardware. |

O [servidor Modbus](connector-modbus-server) não está nesta tabela: ele não é um driver, e sim a própria estação servindo as tags e as variáveis da Logic dela para CLPs, IHMs e sistemas prediais por Modbus TCP, a partir da linha própria dele, sob a pasta Servidores.

## O que os drivers têm em comum, e onde diferem {#what-the-drivers-have-in-common-and-where-they-differ}

O Connector desenha um editor só para todo driver e deixa o driver decidir quais partes aparecem. Esta tabela diz o que esperar antes de abrir a página de um driver:

| Driver | Campos de conexão na página do dispositivo | Endereçamento da tag | Intervalo de leitura | Escrita em tag | Descobrir |
| --- | --- | --- | --- | --- | --- |
| Simulated | nenhum | o nome da tag, mais a forma do sinal | sim | sim | sim (o catálogo dele) |
| Modbus TCP | Host, Porta, Unit ID, Enquadramento (MBAP ou RTU), Intervalo mínimo entre transações | tipado: classe e número do registrador | sim | sim | sim (varredura por host ou CIDR) |
| Modbus RTU | Linha serial (fixa; a linha define o modo de transmissão, RTU ou ASCII), Unit ID | tipado: classe e número do registrador | sim | sim | sim (sondagem de unit ids numa linha) |
| OPC UA | Host, Porta, Caminho do recurso, Usuário, Senha | texto livre: ID do nó | sim | sim | sim (endereço do servidor) |
| OPC DA | Host, Servidor / Chave | texto livre: ID do item | sim | sim | sim (os servidores de um computador) |
| Siemens S7 | Host, Rack / Slot | tipado: área, DB, byte, bit | sim | sim | não |
| Rockwell EtherNet/IP | Host, Slot | texto livre: Tag do controlador, mais um deslocamento | sim | sim | sim (difusão) |
| Beckhoff ADS | Host, Porta, IP local (AMS) | texto livre: Símbolo | sim | sim | não |
| Mitsubishi MC | Host, Porta | texto livre: Endereço do dispositivo | fixo em 1 s | sim | não |
| BACnet | Host, Porta, Device Id | tipado: tipo de objeto e instância | fixo em 1 s | sim | sim (Who-Is) |
| OCPP | Identificador | tipado: número do conector; o nome da tag termina em Meter, Status ou Transaction | enviado pelo ponto de recarga | não (somente leitura) | sim (pontos de recarga conectados) |
| Redfish | Host, Porta, Usuário, Senha | texto livre: Caminho do recurso, mais um ponteiro JSON | sim | sim | sim (endereço do serviço) |
| Matter | Node ID (somente leitura) | tipado: saída, cluster e atributo; as tags vêm do dispositivo | sim | sim (os valores que o driver sabe mudar) | sim (nós comissionados, com os valores que cada um publica) |
| LoRaWAN | Identificador (DevEUI), Server / Key (chave da aplicação) | tipado: canal ou deslocamento, tipo LPP | enviado pelo sensor | não (somente leitura) | não |
| AVEVA PI | Host, Porta, Caminho do recurso, Transporte, Usuário, Senha, Token bearer | texto livre: Caminho PI | sim | sim | sim (elemento AF depois do endereço do serviço) |
| HTTP | Host, Porta, Caminho do recurso | texto livre: Caminho | sim | sim | não |
| MQTT | Broker (fixo; o broker guarda o host, a porta, o transporte e o login), Protocolo e, no Sparkplug B, os IDs de grupo, de nó de borda e de dispositivo | texto livre: Tópico, mais um caminho do valor dentro de um payload JSON, ou Métrica Sparkplug B | entregue pelo broker | sim (num tópico de comando, ou num comando Sparkplug B) | sim (escuta num broker) |
| Generic serial and TCP | Transporte (Cliente TCP ou Escuta UDP), Host, Porta, ou a Linha serial (fixa) num dispositivo de linha; depois os cartões Mensagens e Soma de verificação | tipado: modo de leitura, requisição, filtro de mensagens e onde o valor está na mensagem | sim; uma tag em escuta guarda o que o equipamento envia | sim (uma mensagem de escrita; não por UDP) | não |
| Omron | Host ou IP, Protocolo (FINS ou Tags NJ/NX por nome); por FINS, a Porta e o cartão FINS (transporte, rede, nós, unidade, timeout de resposta); numa linha serial, a Linha serial (fixa), o Unit ID (o número de unidade Host Link) e o timeout de resposta | texto livre: Endereço de memória (FINS) ou Nome da variável (NJ/NX) | sim | sim | sim (uma sondagem FINS de um CLP, e um broadcast para controladores NJ/NX) |
| SCPI instruments | Transporte (TCP (socket LXI) ou VISA), Host ou IP e Porta ou o Recurso VISA, ou a Linha serial (fixa) num dispositivo de linha; depois o cartão Instrumento (terminador, timeout de resposta, confirmação de escrita, comandos de preparação) | texto livre: Consulta, mais qual valor de uma resposta separada por vírgulas, e um comando de escrita | sim | sim (um comando de escrita, confirmado pela fila de erros do instrumento) | sim (os instrumentos que o VISA lista, e uma sondagem TCP de um host) |
| NI-DAQmx | nenhum: o cartão Dispositivo NI-DAQmx no lugar (Nome do dispositivo, e o Produto que o NI-DAQmx lê) | tipado: Canal físico e Medição, com a faixa, a ligação, o termopar ou os ajustes de contador da medição | sim | sim (linhas de saída digital e saídas de tensão) | sim (todo dispositivo que o NI MAX conhece, com os canais) |
| Fluke NetDAQ | Host ou IP; depois o cartão Instrumento (Canal base, Velocidade de varredura) | tipado: Ponto (um canal analógico e a sua Função, uma linha digital, um relé ou o totalizador) | sim; o instrumento varre no menor intervalo entre as tags do dispositivo | sim (linhas digitais e relés, e o totalizador zerado) | não |
| SNMP | Host, Porta; depois o cartão Agente SNMP (versão, community ou usuário SNMPv3 e segurança, timeout de resposta, novas tentativas) | texto livre: OID, em números ou pelo nome padrão | sim | sim (um SET que o agente aceita; um objeto padrão que a MIB declara somente leitura fica somente leitura) | sim (uma varredura das subárvores padrão de um agente) |
| File | nenhum: o cartão Pasta e arquivo no lugar (Caminho da pasta, Nome do arquivo ou o padrão da pasta de entrada, Ler de, Formato do arquivo), depois os cartões Texto do arquivo e Escrita | tipado: o que a tag lê (um valor, o arquivo inteiro ou um dado do arquivo) e, para um valor, uma coluna e uma linha (CSV), uma linha e os caracteres dela (texto livre) ou um caminho (JSON, XML) | sim | sim (num dispositivo que permite escrita: uma linha acrescentada, o arquivo inteiro substituído ou outro arquivo indicado) | sim (um arquivo, o de um dispositivo ou um digitado) |
| Database | nenhum: o cartão Banco de dados no lugar (Tipo de banco de dados, depois Servidor, Porta, Nome da instância e Nome do banco de dados, o Arquivo do banco de dados, ou a Origem de dados ou texto de conexão), depois o cartão Entrada (Usuário e Senha, e no SQL Server a entrada com a conta do Windows e a Criptografia) | tipado: como a tag lê (uma célula por Tabela, Coluna do valor e Linha a ler, ou o Texto da consulta própria) | sim | sim (a célula que lê, ou o comando de escrita próprio) | sim (as tabelas do banco de dados de um dispositivo) |

Cada driver também reduz a lista de **Tipo de dado** que uma tag oferece ao que ele realmente consegue empacotar; a lista exata está na página do driver. Onde a tabela diz "fixo em 1 s", o driver ignora o intervalo configurado, então as páginas do dispositivo e da tag escondem o campo Intervalo de leitura nele. Onde ela diz "somente leitura", o campo Acesso oferece apenas Somente leitura e o campo de escrita nunca aparece.

## O que toda página de driver documenta {#what-every-driver-page-documents}

Cada página de driver percorre as mesmas seções na mesma ordem: os campos de conexão que o cartão Dispositivo mostra e como eles montam o Base URI; como uma tag é endereçada (os campos tipados ou o símbolo em texto livre, e o endereço de barramento somente leitura que o painel mostra em prévia); os tipos de dado oferecidos; a descoberta, quando o driver a tem; as escritas, quando o driver as aceita; e as particularidades do driver (credenciais, certificados, tempos, um servidor de rede que a estação hospeda, pareamento).

## Um driver que o pacote não carrega {#a-driver-the-package-does-not-carry}

O Connector nunca lista nem oferece um driver que o pacote em execução não carrega. Uma configuração que chega com dispositivos assim mesmo (um backup restaurado, uma configuração de outra máquina) os mantém: o driver continua listado, no catálogo e sob a pasta Drivers, enquanto esses dispositivos existirem, a descrição dela diz "Driver não incluído neste pacote.", e a página do driver e todo dispositivo sob ele carregam um aviso dizendo o mesmo. Esses dispositivos ficam offline e mantêm as configurações deles; podem ser excluídos, mas não copiados, e nenhum dispositivo novo nem varredura de descoberta pode ser iniciado sob aquele driver.

Quais drivers um pacote carrega é lido do registro de drivers do Connector, que só existe depois que o Connector iniciou. Até lá todo driver conta como presente, então o catálogo se estabiliza alguns segundos depois da inicialização e então fica parada pela sessão inteira, mesmo enquanto o Connector é parado e iniciado de novo.

O código de um driver é carregado uma vez, para todo o tempo em que a aplicação roda. Parar e iniciar a comunicação reconstrói os dispositivos em execução e a lista de drivers a partir dessa mesma carga, que é o que mantém a memória da estação estável ao longo de um dia de reinícios. A consequência é que substituir em disco os arquivos de um driver só vale depois que a própria aplicação é reiniciada.
