# Omron

> Conecte 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; as configurações FINS, as formas de endereço, os tipos de dado, leituras, escritas e descoberta.

O driver **Omron** conversa com CLPs Omron em qualquer uma das duas línguas deles, escolhida por
dispositivo. Um controlador CJ, CS ou CP, e um NJ ou NX configurado no modo de memória CJ, é lido
por FINS pelo endereço de memória, escrito do jeito que o software de programação da Omron
escreve: `D100`, `W0.01`, `CIO100.05`. Um controlador NJ, NX ou NY é lido sobre EtherNet/IP pelo
nome de uma variável que ele publica na rede, como `Level` ou `Motor.Speed`. Uma estação lê os
dois tipos lado a lado sob o mesmo driver. Adicione um dispositivo sob o driver Omron no
[Connector](connector) e escolha o **Protocolo** dele; o painel mostra só os campos que esse
protocolo usa.

## Protocolos {#protocols}

| Protocolo | Controladores | As tags são endereçadas por | Porta |
| --- | --- | --- | --- |
| **FINS** | CJ1, CJ2, CS1, CP1 e os outros controladores CJ, CS e CP com porta ou unidade Ethernet; um NJ ou NX no modo de memória CJ | **Endereço de memória**, como `D100` ou `W0.01` | 9600 por padrão |
| **Tags NJ/NX por nome** | Controladores NJ, NX e NY, como NJ501, NJ301, NJ101, NX1P2, NX102, NX502, NX701 e NY5 | **Nome da variável**, como `Level` ou `Motor.Speed` | nenhuma: o EtherNet/IP responde na porta padrão dele, a 44818 |

FINS é o padrão, e um dispositivo novo começa nele. O protocolo é uma configuração do
dispositivo, então um CJ2 e um NX1P2 ficam sob o mesmo driver, cada um lido na sua própria
língua. Trocar o protocolo mantém as configurações FINS como foram deixadas, para quando o FINS
voltar, e toda tag do dispositivo passa a ler o endereço no protocolo novo: o **Tipo de dado**
dela se ajusta a um que o endereço comporta ali, e um endereço que o protocolo novo não consegue
ler fica sinalizado na página da tag até ser corrigido.

## Conexão {#connection}

| Campo | Significado | Padrão |
| --- | --- | --- |
| **Host ou IP** | Endereço IP ou nome de host da porta ou unidade Ethernet do CLP. | vazio |
| **Protocolo** | **FINS** ou **Tags NJ/NX por nome**. A linha embaixo diz o que o protocolo em vigor lê: "Áreas de memória dos controladores CJ, CS e CP, e de um NJ/NX no modo de memória CJ." ou "Variáveis que um controlador NJ, NX ou NY publica na rede, lidas por nome sobre EtherNet/IP." | FINS |
| **Porta** | Só FINS: a porta em que o CLP responde FINS, a mesma por UDP e por TCP, de 1 a 65535. Um campo vazio mostra 9600 em cinza e o dispositivo é chamado nela. Um dispositivo lido por nome de tag não tem campo de porta. | 9600 |
| **Intervalo de leitura (ms)** | Período de leitura do dispositivo inteiro para as tags que não o sobrescrevem. | 1.000 |

O cabeçalho do dispositivo mostra o endpoint montado. Um dispositivo FINS escreve nele todas as
suas configurações, com um nó 0 valendo automático, por exemplo
`omron://192.168.250.1:9600?protocol=fins&transport=udp&network=0&node=0&unit=0&source=0&timeoutMs=2000`.
Um dispositivo lido por nome de tag nomeia só o host e o protocolo, `omron://192.168.250.1?protocol=njnx`.
Cada tag pode definir o próprio **Intervalo de leitura (ms)**; o valor 0 numa tag volta ao
intervalo do dispositivo.

## Preparar o controlador {#prepare-the-controller}

Um controlador NJ, NX ou NY lido por nome de tag só serve as variáveis globais que publica na rede.
Publicar é um atributo de cada variável, definido no Sysmac Studio e transferido para o
controlador. Um controlador lido por FINS não precisa de nenhuma definição assim.

| Definição | Onde no Sysmac Studio | Sem ela |
| --- | --- | --- |
| **Network Publish** em **Publish Only** (ou Input ou Output para uma variável que um enlace de dados de tags também usa), em toda variável global que a estação lê ou escreve | **Programming > Data > Global Variables**, a coluna **Network Publish** da variável. Transfira o projeto para o controlador (**Controller > Synchronize**). | O controlador responde que não serve nenhuma variável com esse nome, exatamente como para um nome que não existe. A tag lê qualidade ruim, e as outras tags do dispositivo seguem lendo. |

Uma variável de um programa, uma variável local, não pode ser publicada: declare-a entre as
variáveis globais, ou copie-a para uma variável global no programa.

Quando o controlador responde que não serve nenhuma variável com o nome de uma tag, a página do
dispositivo nomeia a variável e as tags que a leem, com as duas causas (um nome que não existe, ou
uma variável que não está publicada) e estes passos, num aviso que some sozinho assim que a variável
lê; a página da própria tag traz o mesmo aviso. O diário e o agente leem os mesmos passos.

## O cartão FINS {#the-fins-card}

Um dispositivo lido por FINS traz um cartão **FINS** abaixo do cartão Conexão: em que as
requisições dele viajam, a quem elas se dirigem e quanto tempo cada uma espera pela resposta. Um
dispositivo lido por nome de tag não tem esse cartão.

| Campo | Significado | Padrão |
| --- | --- | --- |
| **Protocolo de transporte** | **UDP**: "Um datagrama por requisição, respondido para a porta de onde saiu: o padrão das portas Ethernet da Omron." **TCP**: "Uma conexão, na qual o CLP atribui a esta estação o nó FINS dela." | UDP |
| **Rede** | "A rede FINS do CLP: 0 para a rede desta estação, de 1 a 127 pelas tabelas de roteamento dos CLPs." | 0 |
| **Nó do CLP** | O nó FINS do CLP, de 1 a 254. Vazio, o campo mostra "Automático": por UDP o último número do endereço IP do CLP (um CLP em `192.168.250.1` é o nó 1), por TCP o nó que o CLP anuncia quando a conexão abre. | Automático |
| **Unidade** | "A unidade do CLP que responde: 0 para a unidade CPU." Até 255. | 0 |
| **Nó da estação** | Só UDP: o nó FINS desta estação, de 1 a 254. Vazio, o campo mostra "Automático": o último número do endereço IP desta estação na rede pela qual ela chega ao CLP. Por TCP o campo não é desenhado, porque o CLP atribui o nó na conexão. | Automático |
| **Timeout de resposta (ms)** | "Quanto tempo uma requisição FINS espera pela resposta." De 100 a 60.000. | 2.000 |

Um número fora da faixa é recusado embaixo do campo, por exemplo "Digite um número entre 0 e 127.",
e o campo volta ao valor em vigor. Trocar o transporte para TCP mantém o nó da estação digitado
para UDP, que o dispositivo então não usa.

## Host Link numa linha serial {#host-link-on-a-serial-line}

Um controlador CP1E, CP1L, CP1H, CJ ou CS que só tem porta serial (RS-232C, ou RS-485 e RS-422A por uma placa opcional ou um conversor) é lido por FINS sobre Host Link, por uma linha serial do driver Omron: uma porta COM compartilhada por até 32 CLPs, cada um respondendo ao próprio número de unidade. Adicione a linha com **Acrescentar linha** na tabela Linhas seriais da página do driver e ajuste a **Porta serial**, o **Velocidade em baud** e o **Formato serial** ao que as portas seriais dos CLPs usam (o resto da página da linha está em [Linhas seriais](connector-lines)), habilite-a e depois adicione cada CLP com **Acrescentar dispositivo** na página da linha.

| Ajuste | Onde | Valor |
| --- | --- | --- |
| Modo da porta | O PLC Setup do CLP, para a porta serial em que a linha está ligada | Host Link |
| Baud e formato | A linha | Como as portas dos CLPs estão ajustadas; uma porta Host Link sai de fábrica com 9600 baud e `7E2` |
| **Unit ID** | O cartão Conexão do dispositivo, ao lado de **Linha serial · fixa** | O número de unidade Host Link do CLP, de 0 a 31, como o PLC Setup dele define. Um dispositivo novo pega o primeiro número livre da linha; um número que outro CLP da linha já tem é recusado |
| **Timeout de resposta (ms)** | O cartão FINS do dispositivo | De 100 a 60.000; 2.000 |

Um dispositivo numa linha é lido por FINS para sempre: não tem campo **Protocolo**, **Host ou IP** nem **Porta**, e o cartão FINS dele mostra só "FINS sobre Host Link nesta linha serial, para o CLP cujo número de unidade (ajustado para a porta serial dele no PLC Setup) é o Unit ID acima." e o **Timeout de resposta (ms)**, porque a requisição vai para a unidade CPU do CLP que o barramento endereça e nenhum campo de rede se aplica. Ele nunca passa para a rede, nem um dispositivo de rede passa para uma linha. As tags dele são endereçadas como pela rede (`D100`, `W0.01`), e o endpoint dele nomeia a linha e a unidade, por exemplo `omron://serial/<line id>/COM5/9600/7E2?protocol=fins&transport=hostlink&hostLinkUnit=0&timeoutMs=2000`.

| Numa linha serial | O que acontece |
| --- | --- |
| Vários CLPs numa linha | Uma requisição e a resposta dela por vez para a linha toda; a resposta de outra unidade, ou ruído, é ignorada |
| Um CLP que não responde dentro do timeout dele | Esse dispositivo se reconecta; os outros CLPs da linha continuam lendo |
| O CLP considera o quadro danificado e responde um código de fim Host Link, como `13 (FCS error)` | O dispositivo se reconecta |
| A porta falha, por exemplo quando o adaptador é desconectado | Todo dispositivo da linha se reconecta; a porta é aberta de novo depois de uma pausa de 1 segundo, que dobra até um minuto |
| Uma tag de texto | No máximo 534 caracteres, o que um quadro Host Link carrega |

A varredura não procura numa linha serial: adicione cada CLP pelo número de unidade dele.

## Endereçamento {#addressing}

Uma tag é endereçada por um campo no cartão Origem dela, com o nome tirado do protocolo do
dispositivo: **Endereço de memória** por FINS, **Nome da variável** para um dispositivo lido por
nome de tag, com a dica do protocolo embaixo. Um endereço que o driver não consegue ler é recusado
na página da tag onde é digitado, com o motivo. A linha somente leitura **Endereço de origem (barramento)**
do cartão Origem mostra o endereço que o driver recebe.

### Endereços de memória (FINS) {#memory-addresses-fins}

Um endereço de memória é formado pelas letras da área, o número da palavra em decimal e, para um
único bit, um ponto e o bit, de 00 a 15. As letras não diferenciam maiúsculas de minúsculas, e as
grafias antigas também são lidas.

| Área | Exemplos | Palavras | Também escrita como |
| --- | --- | --- | --- |
| CIO | `CIO100`, `CIO100.05`, `100.05` | 0 a 6143 | um número sozinho, que é um endereço CIO |
| Trabalho (W) | `W0`, `W0.01` | 0 a 511 | `WR` |
| Retenção (H) | `H10`, `H10.00` | 0 a 1535 | `HR` |
| Auxiliar (A) | `A100`, `A100.03` | 0 a 1471 | `AR` |
| Memória de dados (D) | `D100`, `D100.15` | 0 a 32767 | `DM` |
| Memória de dados estendida (E) | `E0_100`, `EA_0`, `E18_0` | 0 a 32767 | o banco em hexadecimal, de 0 a 18, entre o E e o sublinhado |

Cada área é limitada pela maior que algum controlador CJ, CS ou CP tenha (um CJ2 tem 1.536
palavras de retenção e bancos de memória estendida até o 18). Uma palavra ou um banco que um
controlador menor não tem é resposta do próprio CLP, um erro na primeira leitura da tag (veja
[Leitura](#reading)). O que a página da tag recusa onde é digitado:

| Você digita | A página da tag diz |
| --- | --- |
| Algo que não é uma área, uma palavra e um bit, como `X100` ou `D100.` | "Um endereço de memória FINS é a área, a palavra e, para um bit, um ponto e o bit, por exemplo D100, W0.01, CIO100.05, H10, A100 ou E0_100." |
| Uma palavra depois do fim da área, como `D40000` ou `W512` | "Essa palavra fica depois da última palavra da área dela em qualquer controlador CJ, CS ou CP." |
| Um bit depois do 15, como `W0.16` | "O bit de uma palavra vai de 00 a 15." |
| Um banco depois do 18, como `E19_0` | "Os bancos da memória estendida são numerados de 0 a 18 em hexadecimal." |

O endereço de barramento é o endereço na sua grafia única, com o bit em dois dígitos: `100.5`
viaja como `CIO100.05` e `DM100` como `D100`. Uma tag de texto acrescenta depois de um `?` os
caracteres que ocupa, então um texto de 16 caracteres em D200 viaja como `D200?16`.

### Nomes de variável (NJ/NX) {#variable-names-njnx}

Um controlador NJ, NX ou NY é lido pelo nome de uma variável global que ele publica na rede, que
no Sysmac Studio é uma variável cujo atributo Network Publish é Publish Only, Input ou Output
(veja [Preparar o controlador](#prepare-the-controller)). Uma variável que o controlador não publica
não pode ser lida por nome. Um nome se escreve com letras
ASCII, dígitos e sublinhados, nunca começando por um dígito, com um ponto antes do membro de uma
estrutura e um índice entre colchetes: `Level`, `Motor.Speed`, `Temps[3]`, `Grid[1,2]`. Qualquer
outra forma é recusada na página da tag: "Um nome de variável se escreve com letras, dígitos e sublinhados, sem começar por um dígito, com um ponto antes de um membro e um índice entre colchetes, por exemplo Level, Motor.Speed ou Temps[3]."
Um nome em outra escrita, que o Sysmac Studio permite, é recusado do mesmo jeito, porque a
requisição EtherNet/IP não consegue levá-lo.

O controlador lista as variáveis dele de um jeito que este driver não lê, então toda tag de um
dispositivo lido por nome de tag é digitada à mão. Se o controlador publica um nome é resposta
dele, dada na primeira leitura da tag. Não existe campo de deslocamento: um membro ou um elemento é
nomeado por si mesmo, e um elemento de um array BOOL é lido pelo próprio nome, como `Flags[5]`. O
endereço de barramento é o nome seguido de `?0`, por exemplo `Motor.Speed?0`.

## Tipos de dado {#data-types}

Por FINS o **Tipo de dado** oferecido segue o endereço:

| O endereço nomeia | Tipo de dado | O que é lido |
| --- | --- | --- |
| Um bit, como `W0.01` | Boolean | Só aquele bit. |
| Uma palavra, como `D100` | Int16 ou UInt16 | A palavra. |
| Uma palavra e a seguinte | Int32, UInt32 ou Float | Duas palavras, a palavra baixa no endereço e a alta depois dela, do jeito que as próprias instruções da Omron guardam uma palavra dupla. A última palavra de uma área não começa nenhum par, então ela oferece só Int16, UInt16 e String. |
| Uma palavra e as seguintes, como texto | String | O **Comprimento (caracteres, vazio = 16)** que a tag declara, de 1 a 1998 caracteres, dois por palavra, com o primeiro no byte alto. O texto termina no primeiro NUL. Numa linha serial, de 1 a 534 caracteres. |

Digitar um endereço que não comporta o tipo da tag troca o tipo pelo que o endereço lê de forma
mais natural: um Boolean para um bit, um Int16 para uma palavra. Um tipo que o endereço não
comporta é recusado com os que ele comporta, por exemplo "O endereço D100 é lido como um destes tipos de dado: Int16, UInt16, Int32, UInt32, Float, String."
Não existe opção de ordem de bytes ou de palavras: o FINS guarda toda palavra com o byte alto
primeiro, e o driver cuida disso.

Um dispositivo lido por nome de tag oferece todo tipo atômico do controlador:

| Tipo de dado | Tipo da variável no Sysmac Studio |
| --- | --- |
| Boolean | BOOL |
| SByte | SINT |
| Byte | USINT |
| Int16 | INT |
| UInt16 | UINT |
| Int32 | DINT |
| UInt32 | UDINT |
| Int64 | LINT |
| UInt64 | ULINT |
| Float | REAL |
| Double | LREAL |

Uma variável WORD é lida como UInt16 e uma DWORD como UInt32. Variáveis STRING não são lidas, e
String não é oferecido. Um tipo fora da lista é recusado com ela: "Uma variável de um controlador NJ/NX é lida como um destes tipos de dado: Boolean, SByte, Byte, Int16, UInt16, Int32, UInt32, Int64, UInt64, Float, Double."

## Leitura {#reading}

Por FINS o dispositivo mantém uma conversa com o CLP e manda uma requisição por vez, cada tag uma
leitura de área de memória das palavras dela, e só aceita como resposta a que traz o número da
própria requisição, então uma resposta atrasada nunca é lida como a da seguinte. Antes de qualquer
tag ser lida, o CLP precisa responder a uma leitura de dados do controlador, com qualquer código
de fim; o modelo que ele informa é escrito no diário. O que o CLP responde decide então o destino
de cada leitura:

| O CLP responde | A leitura |
| --- | --- |
| Conclusão normal | O valor. |
| Um código de fim sobre o ponto, como um endereço que o CLP não tem | Aquela tag fica sem valor, e o erro dela nomeia o código e o significado dele no manual da Omron, por exemplo `end code 0x1103 (address range error)`. Todas as outras tags do dispositivo continuam lendo. |
| Um código de fim sobre o caminho até o CLP (0x01xx, 0x02xx, 0x03xx, 0x05xx), um nó intermediário que esgotou o tempo no caminho, ou nada dentro do **Timeout de resposta (ms)** | O dispositivo se reconecta, e as tags dele falham nas leituras até o CLP responder de novo. A política de cada tag para [um dispositivo que não respondeu](connector-value-pipeline#the-device-did-not-answer) decide o que ela mostra. |

Um dispositivo lido por nome de tag é provado perguntando ao controlador por uma variável que
nenhum programa declara: a resposta do controlador de que esse nome não existe é uma resposta do
controlador. As requisições dele passam pelo mesmo código EtherNet/IP do driver
[Rockwell EtherNet/IP](driver-rockwell) e esgotam o tempo depois de 10 segundos.

## Escritas {#writes}

Tags cujo **Acesso** é Leitura e escrita ou Somente escrita podem ser escritas; uma tag nova nasce
como Somente leitura. Uma escrita espera a vez na fila do dispositivo junto com as leituras, e
manda o valor pedido e nada além dele:

| A tag lê | O que a escrita manda |
| --- | --- |
| Um bit FINS (`W0.01`) | Só aquele bit: o CLP muda o bit no lugar e deixa os outros bits da palavra como estão. |
| Uma palavra ou palavra dupla FINS | O valor inteiro, no endereço e, para duas palavras, na palavra seguinte. |
| Um texto FINS | O comprimento declarado inteiro, com o texto na frente e NULs atrás, para que nada de um texto anterior mais longo seja lido depois dele. Um texto que não cabe no comprimento é recusado, nunca cortado. |
| Uma variável NJ/NX | O valor, para aquela variável pelo nome dela; um elemento de um array BOOL como só aquele BOOL. |

| O CLP responde a uma escrita FINS com | A escrita |
| --- | --- |
| Conclusão normal | Entregue. |
| Um código de fim que a recusa | Recusada, e o motivo nomeia o código e o significado dele, por exemplo `end code 0x2101 (read-only)`. |
| Nada dentro do **Timeout de resposta (ms)**, ou um nó intermediário que esgotou o tempo no caminho (0x0205) | Sem resposta. |

Uma escrita FINS cujo valor o tipo da tag não comporta é recusada antes de qualquer envio.

## Descoberta {#discovery}

A página do driver Omron traz um cartão **Escopo da varredura** com um campo opcional, "Endereço do CLP para uma sondagem FINS, por exemplo 192.168.250.1 (vazio = só NJ/NX por broadcast)".
O Descobrir então faz até duas perguntas, uma depois da outra:

| Pergunta | Quando | O que oferece |
| --- | --- | --- |
| Uma leitura de dados do controlador por FINS e UDP, com todo nó automático, mandada ao CLP do campo: um endereço IP ou um nome, com `:port` quando o CLP responde FINS numa porta que não é a 9600. A linha de progresso mostra "Pedindo a 192.168.250.1 que se identifique por FINS…". | Só quando o campo tem um endereço. | O CLP, como um dispositivo FINS com o nome do modelo com que ele responde, em `omron://<host>:<port>?protocol=fins&transport=udp&network=0&node=0&unit=0&source=0&timeoutMs=2000`. Um CLP que não responde nada não oferece nada. |
| A requisição de identidade EtherNet/IP, em broadcast em toda rede em que este computador está. A linha de progresso nomeia essas redes: "Procurando controladores Omron NJ/NX em 192.168.0.255…". | Sempre. A varredura escuta até passarem 5 segundos sem resposta nova. | Cada controlador NJ, NX ou NY que responde, como um dispositivo lido por nome de tag, com o nome do produto dele (um NX1P2, por exemplo). Um acoplador de E/S NX, cujo nome de produto começa com `NX-`, não guarda variáveis e é deixado de lado, como qualquer outro produto Omron. |

Nenhuma das perguntas encontra tags: um CLP FINS não publica lista dos endereços dele, e um NJ/NX
lista as variáveis de um jeito que o driver não lê, então cada candidato mostra "Nenhuma tag informada. Acrescente o dispositivo para configurar as tags no editor dele."
Algo no campo que não é um host é recusado embaixo dele, e o Descobrir fica cinza: "Uma varredura Omron pede ao CLP escrito aqui que se identifique por FINS: o endereço IP ou o nome dele, com a porta se precisar (por exemplo 192.168.250.1 ou 192.168.250.1:9600). Deixe vazio para procurar só controladores NJ/NX por broadcast."
Um controlador numa rede em que este computador não está não responde ao broadcast; adicione-o à
mão. A varredura do Rockwell EtherNet/IP ouve o mesmo broadcast e deixa todo controlador Omron
para esta. O resto do comportamento da varredura está em [Descoberta](connector-discovery).

## Ferramentas do agente {#agent-tools}

O `driver_capabilities` descreve este driver sob `omron`: os dois protocolos, cada um com os campos
de dispositivo, as formas de endereço e os tipos de dado que aceita, os transportes e as faixas
FINS, as escritas e a descoberta. O `device_upsert driver=Omron` aceita `omronProtocol` (`Fins` ou
`NjNx`) e, por FINS, `finsTransport` (`Udp` ou `Tcp`), `finsNetwork`, `finsNode` (0 para
automático), `finsUnit`, `finsSourceNode` (só UDP, 0 para automático) e `finsResponseTimeoutMs`;
um dispositivo lido por nome de tag não aceita porta nem campo FINS. O `tag_upsert` aceita o
endereço de memória ou o nome da variável como `address`, o tipo como `opcUaType` (omitido, um bit
fica Boolean e uma palavra Int16) e o comprimento de um texto FINS como `wireQuantity`. O
`device_discover driver=Omron` roda a varredura, com `target` para a sondagem FINS. Um CJ2 lido
por UDP e um NX1P2 lido por nome de tag:

```
device_upsert driver=Omron name=Press host=192.168.250.1 omronProtocol=Fins finsTransport=Udp
tag_upsert device=Press name=Level address=D100 opcUaType=Float
device_upsert driver=Omron name=Filler host=192.168.250.2 omronProtocol=NjNx
tag_upsert device=Filler name=Speed address=Motor.Speed opcUaType=Float
```

Um CLP numa linha serial fica pendurado numa linha deste driver: `serial_line_upsert driver=Omron` cria a linha, e `device_upsert driver=Omron serialLineId=<id>` adiciona o CLP por Host Link (`finsTransport=HostLink`, que a linha implica) com `unitId`, o número de unidade dele de 0 a 31 (omitido, o primeiro livre), e `finsResponseTimeoutMs`; os campos de rede são recusados nele. Um CP1L na unidade 0 na COM5:

```
serial_line_upsert driver=Omron name=HostLink serialPort=COM5 baudRate=9600 serialFormat=7E2
device_upsert driver=Omron name=Mixer serialLineId=<the line's id> unitId=0
tag_upsert device=Mixer name=Level address=D100 opcUaType=Int16
```

As outras ferramentas estão em [Ferramentas do agente](agent-tools).

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

- Um controlador que fala só os comandos Host Link mais antigos do modo C, como um CPM1, um CPM2, um CQM1 ou um C200HS, não é lido, nem numa [linha serial](#host-link-on-a-serial-line) nem por um conversor: o driver envia só comandos FINS.
- Temporizadores e contadores não são oferecidos por FINS: o valor atual deles fica em BCD ou em
  binário conforme a configuração do CLP, e nada numa resposta FINS diz qual. Leia esse valor por
  uma palavra para a qual o programa o copia.
- As variáveis de um controlador NJ/NX nunca são listadas, nem na página da tag nem por uma
  varredura: todo nome é digitado.
- Um dispositivo lido por nome de tag lê um valor atômico por tag. Variáveis STRING, uma estrutura
  inteira e um array inteiro não são lidos; um membro ou um elemento é lido pelo nome.
- O driver manda três comandos FINS e nenhum outro: leitura de área de memória, escrita de área de
  memória e leitura de dados do controlador. Ele nunca muda o modo de operação do CLP, o relógio
  nem o programa.

## Bom saber {#good-to-know}

- Por UDP a estação manda cada requisição de uma porta própria e o CLP responde para essa porta,
  que é como as portas Ethernet da Omron vêm configuradas por padrão. Uma unidade Ethernet
  configurada com a conversão de endereço estática responde para a porta 9600 da estação, onde o
  driver não escuta: leia esse CLP por TCP.
- Uma rede FINS diferente de 0 é alcançada pelas tabelas de roteamento configuradas nos CLPs; a
  estação não roteia nada sozinha.
- Um controlador NJ/NX é perguntado primeiro pela rota CIP `1,0` e, quando ela não tem resposta,
  por 18 seguido do endereço IP do próprio controlador, como `18,192.168.250.1`; a rota que
  respondeu é tentada primeiro na vez seguinte. Não existe campo de rota.
- Cada tag FINS é uma requisição própria, e um dispositivo manda uma por vez, então o tempo de uma
  rodada de leituras cresce com o número de tags dele.
