Rockwell EtherNet/IP

Conecte controladores Allen-Bradley por EtherNet/IP: ControlLogix, CompactLogix, PLC-5, SLC 500, MicroLogix e Micro800, os endereços das tags, os tipos de dado e a descoberta na rede.

Ver como Markdown

O driver Rockwell EtherNet/IP conversa com controladores Allen-Bradley / Rockwell por EtherNet/IP. Controladores ControlLogix e CompactLogix são endereçados pelo nome da tag do controlador declarado no projeto Logix, um Micro800 pelo nome da sua variável global, e um PLC-5, SLC 500 ou MicroLogix pelo endereço de arquivo de dados, sem nenhum mapa de registradores envolvido. Adicione um dispositivo sob o driver Rockwell EtherNet/IP no Connector e escolha a Família do controlador dele; o painel mostra só os campos que essa família usa.

Famílias de controlador

A Família do controlador do dispositivo decide como o controlador é alcançado e como as tags dele são endereçadas:

Família do controlador Controladores As tags são endereçadas por Slot
ControlLogix / CompactLogix ControlLogix, CompactLogix Tag do controlador, o nome da tag sim
PLC-5 PLC-5 com porta Ethernet (PLC-5/20E, /40E, /80E) Endereço de arquivo de dados, como N7:0 não
SLC 500 SLC 5/05 Endereço de arquivo de dados não
MicroLogix MicroLogix 1100 e 1400, e os outros por um 1761-NET-ENI Endereço de arquivo de dados não
Micro800 Micro820, Micro850, Micro870 Tag do controlador, o nome de uma variável global não

ControlLogix / CompactLogix é o padrão, e um dispositivo criado antes de o campo existir é um deles, então ele lê exatamente como sempre leu. Só um controlador ControlLogix ou CompactLogix é alcançado pelo barramento traseiro num slot: toda outra família responde na própria porta Ethernet, e o dispositivo dela não tem o campo Slot. Uma varredura lê a família na identidade do controlador, então um controlador encontrado chega com a família já escolhida.

Conexão

Campo Significado Padrão
Host ou IP Endereço IP ou nome de host da porta Ethernet do controlador. vazio
Família do controlador A família à qual o controlador pertence; ela decide os campos abaixo e como as tags são endereçadas. ControlLogix / CompactLogix
Slot Só ControlLogix / CompactLogix: em qual posição do chassi o controlador está encaixado, contada a partir de 0. 0
Intervalo de leitura (ms) Período de leitura de todo o dispositivo, para as tags que não o sobrepõem. 1.000

Não existe campo de porta: o EtherNet/IP usa a porta TCP padrão 44818 dele. A rota CIP é o barramento traseiro mais o Slot, então um controlador encaixado em qualquer lugar do chassi é alcançável; um controlador descoberto começa no slot 0 e o campo é onde você corrige isso. Não existe campo de rack: uma rota CIP não carrega número de rack. As requisições expiram depois de 10 segundos. O cabeçalho do dispositivo mostra o endpoint montado, por exemplo eip://192.168.0.10:0, em que o número depois do endereço é o slot.

Um controlador de qualquer outra família não leva slot, e o cabeçalho dele nomeia a família no lugar, por exemplo eip://192.168.0.20?family=slc500.

Cada tag pode definir o próprio Intervalo de leitura (ms); um valor 0 na tag recai no intervalo do dispositivo.

Endereçamento

Uma tag Rockwell é endereçada por dois campos no cartão Origem da tag:

Campo Significado Valores aceitos Padrão
Tag do controlador O nome da tag como declarado no controlador. Obrigatório. texto livre vazio
Deslocamento na tag (bytes, bits para BOOL) Onde, dentro dos dados daquela tag, o valor está: um deslocamento de byte, ou um deslocamento de bit em tags booleanas. 0–255 0

O driver abre a tag de controlador nomeada e retira o valor do buffer de dados dela no deslocamento. Numa tag atômica simples, o deslocamento fica em 0. O deslocamento é o que deixa uma tag de controlador atender vários canais: um DINT no começo de uma estrutura fica no deslocamento 0, o REAL quatro bytes depois fica no deslocamento 4, e numa tag booleana o deslocamento conta bits em vez de bytes.

Para ler Tag do controlador Deslocamento Tipo de dado
Um DINT de escopo de controlador Counter Counter 0 Int32
Um DINT de escopo de programa em Main Program:Main.Counter 0 Int32
Um elemento de vetor REAL Temps[2] Temps[2] 0 Float
Um elemento de vetor BOOL Flags[5] Flags[5] 0 Boolean
O segundo DINT dentro da estrutura Recipe Recipe 4 Int32
O bit 3 dos dados em Flags Flags 3 Boolean

Num vetor BOOL o índice nomeia o BOOL, não a palavra de 32 bits do controlador: Flags[5] é o BOOL 5, e um deslocamento em bits conta a partir do BOOL nomeado, então Flags[5] com deslocamento 2 é o BOOL 7.

O nome chega inteiro ao controlador, pontos incluídos, e uma leitura e uma escrita da mesma tag caem no mesmo lugar. É isso que faz um nome de escopo de programa como Program:Main.Counter funcionar. Um caminho de membro com ponto (MyUdt.Member) é resolvido pelo controlador quando o controlador publica aquele membro por nome; onde ele não publica, nomeie a tag base de escopo de controlador e alcance o interior dela com o deslocamento de byte, o que sempre funciona. A linha somente leitura Endereço de origem (barramento) do cartão Origem mostra o endereço montado enquanto você edita.

Um Micro800 é endereçado do mesmo jeito, pelo nome de uma variável global como Level: ele não tem tags de escopo de programa para nomear.

Endereços de arquivo de dados

Uma tag de PLC-5, SLC 500 ou MicroLogix é endereçada por um campo só, Endereço de arquivo de dados: a letra e o número do arquivo, dois-pontos e o elemento, e depois um membro após um ponto ou um bit após uma barra. Não existe campo de deslocamento, porque o endereço nomeia o próprio elemento, membro e bit, e o campo recusa enquanto você digita um endereço que o driver não consegue ler, dizendo o porquê.

Arquivo Exemplos Lê Tipo de dado
Inteiro (N) N7:0, N7:0/15 uma palavra de 16 bits, ou um dos bits dela Int16 ou UInt16; Boolean para um bit
Bit (B) B3:0, B3:0/2 uma palavra de 16 bits, ou um dos bits dela Int16 ou UInt16; Boolean para um bit
Ponto flutuante (F) F8:1 um valor de ponto flutuante de 32 bits Float
Inteiro longo (L) L9:0 um inteiro de 32 bits Int32 ou UInt32
Temporizador (T) T4:0.ACC, T4:0.PRE, T4:0.DN ACC ou PRE, ou o bit EN, TT ou DN Int16 ou UInt16; Boolean para um bit
Contador (C) C5:0.ACC, C5:0.PRE, C5:0.DN ACC ou PRE, ou o bit CU, CD, DN, OV ou UN Int16 ou UInt16; Boolean para um bit
Controle (R) R6:0.LEN, R6:0.POS LEN ou POS Int16 ou UInt16
Status (S) S:1, S:1/15 uma palavra do arquivo de status, ou um dos bits dela Int16 ou UInt16; Boolean para um bit
Entrada (I), saída (O) I:0, I:0/1, O:0/1 uma palavra da imagem de entradas ou de saídas, ou um dos bits dela Int16 ou UInt16; Boolean para um bit

O Tipo de dado oferecido segue o arquivo, e digitar um endereço cujo arquivo não guarda o tipo da tag troca o tipo pelo do arquivo. Os arquivos de status, de entradas e de saídas podem ser escritos sem o número, como o software de programação os escreve; o driver os envia como S2:1, I1:0/1 e O0:0/1, e a linha Endereço de origem (barramento) mostra isso. Num endereço de entrada ou de saída, o elemento é a posição da palavra na imagem: as entradas embutidas de um MicroLogix vão de I:0/0 em diante. Um elemento de temporizador, contador ou controle é lido por um dos seus membros, nunca inteiro, e arquivos de string, ASCII, BCD, mensagem e PID não são lidos. Um PLC-5 numera as entradas e as saídas em octal, e o driver não lê essa numeração, então os arquivos I e O dele são recusados: leia esse valor por um arquivo de dados para onde o programa o copia. Se um arquivo existe só se sabe ao lê-lo: um arquivo que o controlador não tem (N9:0 sem N9) lê como erro desde a primeira leitura daquela tag, e todas as outras tags do dispositivo continuam lendo.

Tipos de dado

Todo tipo atômico do CIP está disponível como Tipo de dado de uma tag:

Tipo de dado Tipo CIP Tamanho
Boolean BOOL 1 bit no deslocamento de bit
SByte SINT 1 byte
Byte USINT 1 byte
Int16 INT 2 bytes
UInt16 UINT 2 bytes
Int32 DINT 4 bytes
UInt32 UDINT 4 bytes
Int64 LINT 8 bytes
UInt64 ULINT 8 bytes
Float REAL 4 bytes
Double LREAL 8 bytes

Estruturas e UDTs não são suportados: só os tipos atômicos acima podem ser lidos ou escritos, e é por isso que o deslocamento de byte existe, para alcançar membros dentro deles. O String está deliberadamente ausente do seletor: um STRING do Logix não é um tipo atômico, e sim uma estrutura com um comprimento e um vetor de 82 bytes, e o driver não consegue ler nem escrever um. A ordem de bytes no barramento é o little-endian do próprio CIP e é tratada automaticamente; não existe opção de ordem de bytes.

Num PLC-5, SLC 500 ou MicroLogix, o tipo segue o arquivo de dados, como mostra a tabela de endereços de arquivo de dados acima.

Escritas

Tags cujo Acesso é Leitura e escrita ou Somente escrita podem ser escritas. Uma escrita envia o valor pedido e nada além dele, de modo que um bit ou um membro que mude no controlador no mesmo instante nunca volta ao que era um momento antes:

A tag endereça O que a escrita envia
Uma tag atômica completa (deslocamento 0 e o tamanho da própria tag), ou uma tag BOOL O valor, para essa tag
Um bit de uma tag de número inteiro (Flags, deslocamento 3, Boolean) Só esse bit, como Flags.3: o controlador o altera ali mesmo e deixa os outros bits como estão
Um elemento de vetor BOOL (Flags[5], Boolean) Só esse BOOL, como o bit 5 da primeira palavra do vetor (Flags[0].5): o controlador o altera ali mesmo e deixa os outros BOOLs da palavra como estão
Um valor dentro de uma estrutura (Recipe, deslocamento 4) Só esse membro, pelo nome (Recipe.Speed), encontrado na definição da estrutura que o controlador publica

Uma escrita que só poderia ser feita mandando de volta o resto da tag é recusada, e o motivo cita o endereço: parte de uma tag atômica (um Int16 no deslocamento 2 de um DINT), um bit de um REAL, ou um deslocamento onde nenhum membro da estrutura começa com o tamanho do valor. Nesse caso, enderece o valor pelo próprio nome, por exemplo Recipe.Speed com deslocamento 0. O driver descobre onde caem as escritas de uma tag na primeira escrita e guarda isso enquanto o dispositivo continua conectado. Uma tag nova nasce como Somente leitura.

Um endereço de arquivo de dados é escrito como é nomeado: uma palavra, um valor de ponto flutuante ou um membro inteiro, e um bit (B3:0/2, T4:0.DN) sozinho, que o controlador altera ali mesmo, deixando os outros bits da palavra como estão.

Descoberta

O botão Descobrir do Connector faz difusão de uma requisição CIP List Identity em toda rede em que este computador está e continua escutando até passarem 10 segundos sem resposta nova. A varredura nomeia essas redes enquanto roda, então um resultado de zero diz para onde a pergunta de fato foi: uma estação com adaptadores virtuais de máquinas, WSL ou VPN costuma ter mais redes do que o operador espera, e candidatos podem chegar de uma delas.

Interfaces que não conseguem levar a requisição são puladas: tudo que não está no ar, os adaptadores de loopback e de túnel, e um endereço que a interface deu a si mesma porque nada respondeu DHCP (169.254.x.x). Só uma resposta que seja a resposta de identidade do próprio controlador vira um dispositivo candidato, nomeado eip:// mais o endereço dele; qualquer outra coisa que responda na porta EtherNet/IP é ignorada, e o diário diz isso. Um controlador Omron responde à mesma requisição e também fica de fora, com uma linha própria no diário: um controlador NJ, NX ou NY é oferecido pela varredura do driver Omron. Para cada candidato, a varredura então lê a lista de tags de escopo de controlador e oferece as tags atômicas dele como canais candidatos, cada uma com deslocamento 0. Um vetor de tipo atômico é oferecido como o primeiro elemento, no tipo dele (Temps[0], ou Grid[0,0] com duas dimensões), e um vetor BOOL como um Boolean no primeiro BOOL (Flags[0]).

A descoberta descarta o que o driver não consegue ler ciclicamente: tags de estrutura e de UDT (STRINGs do Logix incluídos) são deixadas de fora, e entradas Program:, Task: e Map: são puladas. Um controlador numa rede em que este computador não está não responde à difusão; adicione-o à mão. Uma tag de qualquer outro tipo, como um tipo de sistema, também não é oferecida, e o diário diz isso.

A identidade com que um controlador responde traz o número de catálogo dele, que nomeia a família: um PLC-5, SLC 500, MicroLogix ou Micro800 chega com a família escolhida e com o endereço nomeando-a (eip://192.168.0.20?family=micrologix). Um PLC-5, SLC 500 ou MicroLogix não publica lista de tags, então chega sem canais candidatos e as tags dele são digitadas por endereço de arquivo de dados; a lista de tags de um Micro800 é lida como a de um Logix.

Um controlador Logix ou Micro800 que você já tem relê a lista de tags dele pela própria página: Descobrir tags, no cabeçalho do cartão Tags dele, oferece só as tags do controlador para as quais ele ainda não tem tag, comparadas pelo nome sem diferenciar maiúsculas de minúsculas. Um controlador de arquivos de dados não tem lista para ler e não mostra Descobrir tags (veja Descobrir as tags de um dispositivo).

Bom saber

  • Toda requisição ao controlador expira depois de 10 segundos, e a janela de escuta da descoberta fecha depois de 10 segundos de silêncio.
  • O driver abre cada tag do controlador uma vez e a mantém aberta enquanto o equipamento estiver conectado, então um controlador com dezenas de tags é lido pelas sessões que já tem, em vez de abrir e fechar uma por leitura. Uma leitura que falha solta a sua tag, e a seguinte abre a tag de novo pelo nome.
  • Renomear uma tag no projeto Logix quebra o canal em silêncio; a tag passa a ler qualidade ruim até o nome configurado bater de novo.