# 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: o dispositivo e o seu cartão Instrumento, o ponto e a função de uma tag, a leitura, a escrita e o que o driver deixa para a Logic.

O driver **Fluke NetDAQ** lê e escreve as unidades de aquisição de dados em rede da Fluke: os NetDAQ
2640A e 2645A, e a 2680 Series, 2680A e 2686A. Cada dispositivo é um instrumento na rede, e cada tag é
um dos seus pontos: um canal analógico e o que ele mede ali (um termopar, uma tensão contínua, uma
resistência, uma termorresistência), uma das suas linhas digitais, um relé de um módulo DIO da 2680
Series ou o seu totalizador. A estação configura o instrumento a partir das tags: toda vez que se
conecta, envia a configuração inteira e substitui a que o instrumento tinha, de modo que o instrumento
mede exatamente o que as tags da estação dizem.

O driver fala com os instrumentos pela biblioteca da própria Fluke, `NTOOL32.dll`, a mesma sobre a qual
é construído o driver LabVIEW desses instrumentos, que a estação distribui ao lado do driver. Adicione o
driver e os seus dispositivos na página [Connector](connector).

## Antes de começar {#before-you-start}

| O quê | Por quê |
| --- | --- |
| O runtime Microsoft Visual C++ 2005 de 32 bits no computador | A biblioteca da Fluke precisa dele, e o Ganter Lab não pode incluí-lo. A estação confere sozinha se ele existe e, enquanto falta, a página do driver, a página de cada dispositivo e o último erro de cada dispositivo dizem isso, com os passos de [Instalar o runtime Visual C++ 2005](#installing-the-visual-c-2005-runtime). |
| O instrumento na rede, no modo de rede geral (General), com o endereço IP e o número do canal base (BCN) definidos no painel frontal | A estação alcança o instrumento no seu endereço IP pela porta TCP 4369, e a biblioteca da Fluke chama o instrumento pelo seu número de canal base. |
| Um computador por vez | Um instrumento conversa com um computador: enquanto outro programa (Fluke DAQ, NetDAQ Logger, um programa LabVIEW) o tem, a estação não consegue abri-lo. |
| Um NetDAQ com software embarcado 2.0 ou mais novo | A biblioteca da Fluke não configura um NetDAQ mais antigo; a conexão do dispositivo falha dizendo que o instrumento precisa de atualização. |

O driver roda somente no Windows.

## Instalar o runtime Visual C++ 2005 {#installing-the-visual-c-2005-runtime}

A estação confere sozinha se o Windows consegue carregar a biblioteca da Fluke, sem esperar um
dispositivo: na primeira vez que a página do driver, a página de um dos seus dispositivos ou o agente
pergunta, e de novo a cada 30 segundos enquanto o runtime faltar. Até o Connector ter subido, não se
sabe se o runtime existe, e nada é dito sobre isso. Enquanto ele falta:

| Onde | O que diz |
| --- | --- |
| A página do driver | Um aviso de cautela, "O runtime Microsoft Visual C++ 2005 não está instalado neste computador", com os passos abaixo. O link dele abre a página da Microsoft no navegador do computador. |
| A página de cada dispositivo | O mesmo aviso. |
| O último erro de cada dispositivo | Os mesmos passos, em inglês, como são escritas as causas próprias do driver. |
| O agente | `driver_capabilities` dá os passos em `prerequisite`, com `installed` falso. |

Para instalar:

1. Abra a página da Microsoft [Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package MFC Security Update](https://www.microsoft.com/download/details.aspx?id=26347), a que a própria lista da Microsoft dos downloads do Visual C++ com suporte dá para o Visual C++ 2005.
2. Escolha o arquivo `vcredist_x86.exe` (2,6 MB), mesmo num Windows de 64 bits: o `vcredist_x64.exe` não serve, porque a biblioteca da Fluke é de 32 bits.
3. Execute-o como administrador. O Windows pode pedir para reiniciar o computador.

Se a lista de programas instalados já mostra "Microsoft Visual C++ 2005 Redistributable", instale assim
mesmo: o que está lá pode ter só o runtime C, sem a parte MFC de que a biblioteca da Fluke precisa.

Em até 30 segundos depois da instalação, o aviso some e os dispositivos deste driver se conectam com a
configuração que já têm, sem reiniciar o Ganter Lab.

## Dispositivo {#device}

Um dispositivo deste driver tem o campo **Host ou IP** do cartão Conexão e, abaixo dele, o cartão
**Instrumento**.

| Campo | Significado | Padrão |
| --- | --- | --- |
| **Host ou IP** | O endereço IP do instrumento na rede, ou um nome que se resolve num endereço IPv4. Não há porta: todo instrumento responde na porta TCP 4369. | vazio |
| **Canal base** | O número do canal base (BCN) definido no painel frontal do instrumento, de 1 a 99. A biblioteca da Fluke chama o instrumento por ele, então dois dispositivos da estação nunca compartilham um. | vazio |
| **Velocidade de varredura** | Lenta, Média ou Rápida. Uma varredura mais lenta integra por mais tempo e lê com mais resolução e menos ruído; uma mais rápida varre mais canais por segundo. | Lenta |
| **Intervalo de leitura (ms)** | De quanto em quanto tempo a estação lê as tags do dispositivo, a menos que uma tag defina o seu próprio intervalo. O instrumento varre no menor intervalo de leitura entre as tags do dispositivo, de modo que cada leitura encontra uma varredura recente. | 1000 |

Um dispositivo novo não tem host nem canal base, e a estação não tenta alcançá-lo enquanto não tiver os
dois: a sua linha diz "Host ainda não informado" até o host ser escrito, depois "Canal base ainda não informado"
até o canal base ser escrito, e a sua página diz o que preencher. A URI base que o cabeçalho mostra é
`netdaq://192.168.0.21/1?speed=slow`: o host, o canal base e a velocidade de varredura.

Salvar um dispositivo cujo canal base já é de outro dispositivo NetDAQ da estação é recusado, em qualquer
host: "O número de canal base 5 já pertence ao dispositivo Fluke NetDAQ 'Logger'. Escolha outro número de canal base."
Um dispositivo que ainda espera o seu canal base não detém nenhum, e um dispositivo mantém o próprio número
quando é salvo de novo.

O cartão **Instrumento** também mostra o que o instrumento disse ser na última vez em que a estação se
conectou a ele: o seu **Modelo do instrumento** (2640A, 2645A, 2680A ou 2686A) e a sua **Versão do firmware**, a do seu
software embarcado, que o diário também registra. Os dois dizem "Ainda não lido" até o
instrumento se conectar, e nunca são guardados, então o mesmo dispositivo pode apontar hoje para um 2640A
e amanhã para um 2645A.

## Endereçamento das tags {#tag-addressing}

### O ponto {#the-point}

O cartão Origem de uma tag tem o seletor Ponto, o que a tag lê no instrumento, e os campos de que esse
ponto precisa. Eles são o endereço inteiro da tag.

| Ponto | Campos | Tipo de dado | Acesso | Valor |
| --- | --- | --- | --- | --- |
| **Canal analógico** | Canal e **Função**, com os campos próprios da função | Double ou Float | Somente leitura | A medida, na unidade da função |
| **Linha digital** | Linha, de 0 a 7 num NetDAQ, de 0 a 19 no módulo DIO de uma 2680 Series | Boolean | Somente leitura (o padrão) ou Leitura e escrita | Verdadeiro enquanto a linha está em nível alto |
| **Relé** | Relé, de 0 a 7, no módulo DIO de uma 2680 Series | Boolean | Leitura e escrita (o padrão) ou Somente leitura | Verdadeiro enquanto o relé está fechado |
| **Totalizador** | nenhum | Int64 ou Double | Somente leitura (o padrão) ou Leitura e escrita | A contagem da entrada do totalizador |

Um NetDAQ numera os seus canais analógicos de 1 a 20. Uma 2680 Series os numera por módulo e canal: o
módulo (1 a 6) e depois o canal nele (01 a 20), então o canal 3 do módulo 2 é o 203. Escolher outro ponto
traz um tipo de dado e um acesso que ele permite, onde a tag tinha um que ele não permite.

### A função de um canal analógico {#the-function-of-an-analog-channel}

| Função | Unidade | Campos |
| --- | --- | --- |
| **Tensão contínua** | volts | **Faixa**: automática, `90 mV`, `300 mV`, `3 V`, `30 V`, `50 V`, `150/300 V` |
| **Tensão alternada** | volts | **Faixa**: automática, `300 mV`, `3 V`, `30 V`, `150/300 V` |
| **Resistência** | ohms | **Faixa**: automática, `300 Ω`, `3 kΩ`, `30 kΩ`, `300 kΩ`, `3 MΩ`; **Ligação** |
| **Frequência** | hertz | nenhum |
| **Termorresistência (RTD)** | graus Celsius | **Resistência R0 (Ω)**, de 10 a 1010 (100 para um Pt100); **Ligação**, a quatro fios por padrão. Uma termorresistência de platina com alfa 0,00385 |
| **Termopar** | graus Celsius | **Tipo de termopar**: J, K (o padrão), E, T, R, S, B, C ou N, e L ou U na 2680 Series; **Verificar termopar aberto**, ligado por padrão |
| Corrente | miliampères, ou porcentagem | **Faixa**: `100 mA`, lida em miliampères, ou **4 a 20 mA, em porcentagem**, lida como 0 em 4 mA e 100 em 20 mA; **Resistência do shunt (Ω)**, o resistor que a corrente atravessa, de 10 a 250 (250 por padrão) |
| **Termistor** | graus Celsius | **Coeficientes de Steinhart-Hart**: o A, o B e o C da folha de dados do termistor, cada um maior que 0 e no máximo 0,1; **Ligação**. Somente a 2680 Series |

**Ligação** é **Dois fios** ou **Quatro fios**. Um canal a quatro fios toma o canal dez acima dele para o
seu par de medição (o canal 3 toma o 13), então só os canais 1 a 10 de um instrumento ou de um módulo são
canais a quatro fios, e uma tag no canal de medição não lê nada próprio. Escolher outra função traz a
faixa e a ligação dessa função.

Algumas faixas e ligações pertencem a uma família de estágios de entrada:

| Estágio de entrada | Instrumentos | O que só ele tem |
| --- | --- | --- |
| Rápido | o 2645A e o módulo FAI da 2680 Series | a faixa `50 V`; uma termorresistência, e as faixas `300 Ω` e `3 kΩ`, somente a quatro fios |
| De precisão | o 2640A e o módulo PAI da 2680 Series | a faixa `150/300 V` (300 V nos canais 1 e 11, 150 V nos demais) |

O painel oferece todas as faixas, porque qual instrumento responde só se sabe quando a estação se conecta.
Uma tag que o instrumento conectado não consegue ler fica fora da configuração dele e mostra o motivo
como erro; o resto do instrumento é configurado e lido.

A linha somente leitura **Endereço de origem (barramento)** mostra o endereço que o driver recebe, como
`ch=3&fn=tc&tc=T&otc=on`, `ch=5&fn=vdc&range=3v`, `ch=1&fn=rtd&r0=100&wires=4`,
`ch=9&fn=current&range=4-20ma&shunt=250`, `dio=0`, `relay=2` ou `totalizer`.

## Como a estação configura o instrumento {#how-the-station-configures-the-instrument}

| Passo | O que a estação faz |
| --- | --- |
| Conectar | Abre o instrumento pelo número do canal base e lê o seu modelo. |
| Configurar | Para a varredura do instrumento, envia a configuração montada a partir das tags (cada tag analógica configura o seu canal, todo outro canal fica desligado) e reinicia a varredura no menor intervalo de leitura entre as tags, na velocidade de varredura do dispositivo. |
| Um canal que o instrumento recusa | O canal fica de fora, a sua tag mostra o motivo do instrumento, e o resto é enviado de novo. |
| Desconectar | Para a varredura do instrumento e fecha a conexão. |
| Perder a conexão | O instrumento para de varrer sozinho depois de um tempo, o que poupa os relés de um módulo PAI; a estação o configura de novo quando se reconecta. |

O que estava configurado no painel frontal do instrumento, ou por outro programa, é substituído. Duas
tags que configuram o mesmo canal de jeitos diferentes não podem ser lidas ambas: a segunda mostra o
endereço da primeira como erro.

## Leitura {#reading}

O instrumento varre no seu próprio relógio. Uma leitura pega a última varredura do instrumento, e uma
varredura serve a todas as tags analógicas do dispositivo durante metade do menor intervalo de leitura
entre elas; uma 2680 Series é lida um módulo por vez. As linhas digitais, os relés e o totalizador são
lidos direto do instrumento, do mesmo jeito. O que o instrumento responde decide o que a tag mostra (veja
[A cadeia de valor](connector-value-pipeline)):

| O instrumento | A tag |
| --- | --- |
| Uma medida | O valor, na unidade da função, antes que os estágios próprios da tag o convertam |
| Uma sobrecarga | Infinito positivo ou negativo |
| Um termopar aberto, com a verificação ligada | NaN, sobre o qual decide a política da tag para um valor que não é número |
| Ainda sem varredura, logo depois de configurado | Nada, até a primeira varredura |
| Sem resposta a tempo | Silêncio: a política da tag para um dispositivo que não respondeu decide o que ela mostra |
| Uma conexão perdida, ou outro computador que o tem | O dispositivo se reconecta e configura o instrumento de novo |

## Escrita {#writes}

| Ponto | O que uma escrita faz |
| --- | --- |
| **Linha digital**, **Relé** | Coloca a linha em nível alto ou fecha o relé com verdadeiro (ou 1), e o contrário com falso (ou 0). Qualquer outro valor é recusado. |
| **Totalizador** | Zera a contagem. 0 é o único valor que ele aceita; qualquer outro é recusado. |
| **Canal analógico** | Nada: um canal analógico é somente lido. |

Uma escrita que o instrumento recusa volta recusada, com o código de erro da Fluke e as palavras da
própria biblioteca no diário.

## A biblioteca da Fluke e o processo auxiliar de 32 bits {#flukes-library-and-the-32-bit-helper}

A biblioteca da Fluke é uma biblioteca de 32 bits, que a estação de 64 bits não consegue carregar; por
isso o driver roda no processo auxiliar de 32 bits da estação, `Lab.Desktop.DriverBridge.exe`, como o
driver [OPC DA](driver-opc-da): o processo auxiliar sobe na primeira vez que um dispositivo do driver se
conecta ou que a estação confere o runtime Visual C++ 2005, e os seus dispositivos e tags são lidos, escritos e registrados no diário como qualquer outro.
Se o processo auxiliar para, os dispositivos mostram que ele parou, e se reconectam por um novo.

A biblioteca guarda a lista dos instrumentos que alcança num arquivo próprio, `ccf.cfg`, ao lado do
processo auxiliar (`bridge-x86\ccf.cfg` na pasta do programa). A estação escreve esse arquivo sozinha:
nada precisa ser ajustado nele, e um arquivo apagado é escrito de novo na conexão seguinte. A biblioteca
chama um instrumento por vez, então os instrumentos de uma estação são lidos um depois do outro.

## Limites que vale conhecer {#limits-worth-knowing}

| Não faz | Onde se faz em vez disso |
| --- | --- |
| Os alarmes próprios do instrumento e as suas saídas de alarme | [Alarmes](logic-alarms) nas tags, e ações da Logic que acionam uma linha digital ou um relé |
| Canais calculados e cálculo de canais | [Variáveis](logic-variables) na Logic |
| A gravação na PC Card do 2686A e a fila de varreduras do instrumento | O histórico da própria estação: uma execução de [Process](process) ou um [datalog](process-datalogs) |
| Descoberta | Nenhuma: adicione cada instrumento com o seu host e o seu canal base |
| macOS | O driver roda somente no Windows |
