Rockwell EtherNet/IP
Collegare i controllori Allen-Bradley su EtherNet/IP: ControlLogix, CompactLogix, PLC-5, SLC 500, MicroLogix e Micro800, i loro indirizzi di tag, i tipi di dato e il rilevamento di rete.
Il driver Rockwell EtherNet/IP parla con i controllori Allen-Bradley / Rockwell su EtherNet/IP. I controllori ControlLogix e CompactLogix si indirizzano con il nome del tag del controllore dichiarato nel progetto Logix, un Micro800 con il nome della sua variabile globale, e un PLC-5, SLC 500 o MicroLogix con un indirizzo di file dati, senza alcuna mappa di registri di mezzo. Aggiungi un dispositivo sotto il driver Rockwell EtherNet/IP nel Connector e scegli la sua Famiglia del controllore; il pannello mostra solo i campi che quella famiglia usa.
Famiglie di controllore
La Famiglia del controllore del dispositivo decide come si raggiunge il controllore e come si indirizzano i suoi tag:
| Famiglia del controllore | Controllori | I tag si indirizzano con | Slot del telaio |
|---|---|---|---|
| ControlLogix / CompactLogix | ControlLogix, CompactLogix | Tag del controllore, il nome del tag | sì |
| PLC-5 | PLC-5 con porta Ethernet (PLC-5/20E, /40E, /80E) | Indirizzo di file dati, come N7:0 |
no |
| SLC 500 | SLC 5/05 | Indirizzo di file dati | no |
| MicroLogix | MicroLogix 1100 e 1400, e gli altri tramite un 1761-NET-ENI | Indirizzo di file dati | no |
| Micro800 | Micro820, Micro850, Micro870 | Tag del controllore, il nome di una variabile globale | no |
ControlLogix / CompactLogix è il valore predefinito, e un dispositivo creato prima che il campo esistesse è uno di questi, quindi legge esattamente come ha sempre fatto. Solo un controllore ControlLogix o CompactLogix si raggiunge attraverso il bus di fondo in uno slot: ogni altra famiglia risponde sulla propria porta Ethernet, e il suo dispositivo non ha il campo Slot del telaio. Un rilevamento legge la famiglia nell'identità del controllore, quindi un controllore trovato arriva con la famiglia già scelta.
Connessione
| Campo | Significato | Predefinito |
|---|---|---|
| Indirizzo host | Indirizzo IP o nome host della porta Ethernet del controllore. | vuoto |
| Famiglia del controllore | La famiglia a cui appartiene il controllore; decide i campi qui sotto e come si indirizzano i tag. | ControlLogix / CompactLogix |
| Slot del telaio | Solo ControlLogix / CompactLogix: in quale posizione del telaio è alloggiato il controllore, contando da 0. | 0 |
| Intervallo di interrogazione (ms) | Il periodo di lettura valido per tutto il dispositivo, per i tag che non lo ridefiniscono. | 1.000 |
Non c'è alcun campo per la porta: EtherNet/IP usa la sua porta TCP standard 44818. Il
percorso CIP è il bus di fondo più lo Slot del telaio, quindi un controllore
alloggiato in qualunque posizione del telaio è raggiungibile; un controllore rilevato
parte dallo slot 0 e il campo è dove lo si corregge. Non c'è alcun campo per il telaio:
un percorso CIP non porta un numero di telaio. Le richieste scadono dopo 10 secondi.
L'intestazione del dispositivo mostra l'endpoint composto, per esempio
eip://192.168.0.10:0, dove il numero dopo l'indirizzo è lo slot.
Un controllore di qualsiasi altra famiglia non porta uno slot, e la sua intestazione
nomina invece la famiglia, per esempio eip://192.168.0.20?family=slc500.
Ogni tag può impostare il proprio Intervallo di interrogazione (ms); un valore di tag pari a 0 ricade sull'intervallo del dispositivo.
Indirizzamento
Un tag Rockwell viene indirizzato da due campi nella scheda Sorgente del tag:
| Campo | Significato | Valori accettati | Predefinito |
|---|---|---|---|
| Tag del controllore | Il nome del tag come è dichiarato nel controllore. Obbligatorio. | testo libero | vuoto |
| Scostamento nel tag (byte, bit per BOOL) | Dove il valore si trova dentro i dati di quel tag: uno scostamento in byte, oppure uno scostamento in bit per i tag Boolean. | 0–255 | 0 |
Il driver apre il tag del controllore indicato e prende il valore dal suo buffer di dati allo scostamento. Per un semplice tag atomico lo scostamento resta 0. È lo scostamento che permette a un solo tag del controllore di servire più canali: un DINT all'inizio di una struttura ha scostamento 0, il REAL quattro byte dopo ha scostamento 4, e per un tag Boolean lo scostamento conta bit invece di byte.
| Per leggere | Tag del controllore | Scostamento | Tipo di dato |
|---|---|---|---|
Un DINT Counter di ambito controllore |
Counter |
0 | Int32 |
Un DINT di ambito programma in Main |
Program:Main.Counter |
0 | Int32 |
Un elemento di array REAL Temps[2] |
Temps[2] |
0 | Float |
Un elemento di array BOOL Flags[5] |
Flags[5] |
0 | Boolean |
Il secondo DINT dentro la struttura Recipe |
Recipe |
4 | Int32 |
Il bit 3 dei dati in Flags |
Flags |
3 | Boolean |
In un array BOOL l'indice indica il BOOL, non la parola a 32 bit del
controllore: Flags[5] è il BOOL 5, e uno scostamento in bit conta a partire
dal BOOL indicato, quindi Flags[5] con scostamento 2 è il BOOL 7.
Il nome arriva al controllore per intero, punti compresi, e una lettura e una
scrittura dello stesso tag finiscono nello stesso posto. È questo che fa funzionare un
nome di ambito programma come Program:Main.Counter. Un percorso di membro con il
punto (MyUdt.Member) viene risolto dal controllore quando il controllore pubblica
quel membro per nome; dove non lo fa, nomina il tag di base di ambito controllore e
raggiungi quello che ha dentro con lo scostamento in byte, che funziona sempre. La riga
in sola lettura Indirizzo di origine (bus) della scheda Sorgente mostra l'indirizzo
composto mentre modifichi.
Un Micro800 si indirizza allo stesso modo, con il nome di una variabile globale come
Level: non ha tag con ambito di programma da nominare.
Indirizzi di file dati
Un tag di un PLC-5, SLC 500 o MicroLogix si indirizza con un solo campo, Indirizzo di file dati: la lettera e il numero del file, i due punti e l'elemento, poi un membro dopo un punto o un bit dopo una barra. Non c'è un campo per lo scostamento, perché l'indirizzo nomina da sé il proprio elemento, membro e bit, e il campo rifiuta mentre scrivi un indirizzo che il driver non sa leggere, dicendo perché.
| File | Esempi | Legge | Tipo di dato |
|---|---|---|---|
| Intero (N) | N7:0, N7:0/15 |
una parola di 16 bit, o uno dei suoi bit | Int16 o UInt16; Boolean per un bit |
| Bit (B) | B3:0, B3:0/2 |
una parola di 16 bit, o uno dei suoi bit | Int16 o UInt16; Boolean per un bit |
| Virgola mobile (F) | F8:1 |
un valore in virgola mobile a 32 bit | Float |
| Intero lungo (L) | L9:0 |
un intero a 32 bit | Int32 o UInt32 |
| Temporizzatore (T) | T4:0.ACC, T4:0.PRE, T4:0.DN |
ACC o PRE, o il bit EN, TT o DN | Int16 o UInt16; Boolean per un bit |
| Contatore (C) | C5:0.ACC, C5:0.PRE, C5:0.DN |
ACC o PRE, o il bit CU, CD, DN, OV o UN | Int16 o UInt16; Boolean per un bit |
| Controllo (R) | R6:0.LEN, R6:0.POS |
LEN o POS | Int16 o UInt16 |
| Stato (S) | S:1, S:1/15 |
una parola del file di stato, o uno dei suoi bit | Int16 o UInt16; Boolean per un bit |
| Ingresso (I), uscita (O) | I:0, I:0/1, O:0/1 |
una parola dell'immagine degli ingressi o delle uscite, o uno dei suoi bit | Int16 o UInt16; Boolean per un bit |
Il Tipo di dato offerto segue il file, e scrivere un indirizzo il cui file non
contiene il tipo del tag lo cambia in quello del file. I file di stato, degli ingressi e
delle uscite si possono scrivere senza il loro numero, come li scrive il software di
programmazione; il driver li invia come S2:1, I1:0/1 e O0:0/1, e la riga
Indirizzo di origine (bus) lo mostra. In un indirizzo di ingresso o di uscita,
l'elemento è la posizione della parola nell'immagine: gli ingressi integrati di un
MicroLogix vanno da I:0/0 in poi. Un elemento di temporizzatore, contatore o
controllo si legge tramite uno dei suoi membri, mai per intero, e i file di stringa,
ASCII, BCD, messaggio e PID non si leggono. Un PLC-5 numera ingressi e uscite in
ottale, e il driver non legge questa numerazione, quindi i suoi file I e O vengono
rifiutati: leggi un valore del genere tramite un file dati in cui il programma lo
copia. Se un file esiste si sa solo leggendolo: un file che il controllore non ha
(N9:0 senza N9) si legge come errore dalla prima lettura di quel tag, e tutti gli
altri tag del dispositivo continuano a leggere.
Tipi di dato
Ogni tipo atomico CIP è disponibile come Tipo di dato di un tag:
| Tipo di dato | Tipo CIP | Dimensione |
|---|---|---|
| Boolean | BOOL | 1 bit allo scostamento in bit |
| SByte | SINT | 1 byte |
| Byte | USINT | 1 byte |
| Int16 | INT | 2 byte |
| UInt16 | UINT | 2 byte |
| Int32 | DINT | 4 byte |
| UInt32 | UDINT | 4 byte |
| Int64 | LINT | 8 byte |
| UInt64 | ULINT | 8 byte |
| Float | REAL | 4 byte |
| Double | LREAL | 8 byte |
Le strutture e gli UDT non sono supportati: si possono leggere o scrivere solo i tipi atomici qui sopra, ed è per questo che esiste lo scostamento in byte, per raggiungere i membri al loro interno. String manca deliberatamente dal selettore: una STRING Logix non è un tipo atomico ma una struttura fatta di una lunghezza e di un array di 82 byte, e il driver non la sa né leggere né scrivere. L'ordine dei byte sul bus è il little-endian proprio di CIP e viene gestito automaticamente; non c'è alcuna opzione sull'ordine dei byte.
Su un PLC-5, SLC 500 o MicroLogix il tipo segue invece il file dati, come mostra la tabella degli indirizzi di file dati qui sopra.
Scritture
I tag il cui Accesso è Lettura e scrittura oppure Sola scrittura si possono scrivere. Una scrittura invia il valore richiesto e nient'altro, così un bit o un membro che cambia nel controllore nello stesso istante non viene mai riportato a com'era un momento prima:
| Il tag indirizza | Che cosa invia la scrittura |
|---|---|
| Un tag atomico completo (scostamento 0 e la dimensione del tag stesso), oppure un tag BOOL | Il valore, a quel tag |
Un bit di un tag di tipo intero (Flags, scostamento 3, Boolean) |
Solo quel bit, come Flags.3: il controllore lo cambia sul posto e lascia gli altri bit come sono |
Un elemento di un array BOOL (Flags[5], Boolean) |
Solo quel BOOL, come bit 5 della prima parola dell'array (Flags[0].5): il controllore lo cambia sul posto e lascia gli altri BOOL della parola come sono |
Un valore dentro una struttura (Recipe, scostamento 4) |
Solo quel membro, per nome (Recipe.Speed), trovato nella definizione della struttura che il controllore pubblica |
Una scrittura che si potrebbe fare solo rimandando indietro il resto del tag viene
rifiutata, e il motivo nomina l'indirizzo: una parte di un tag atomico (un Int16 allo
scostamento 2 di un DINT), un bit di un REAL, oppure uno scostamento dove nessun membro
della struttura comincia con la dimensione del valore. In quel caso indirizza il valore con
il suo nome, per esempio Recipe.Speed con scostamento 0. Il driver stabilisce dove
arrivano le scritture di un tag alla sua prima scrittura e lo tiene finché il dispositivo
resta collegato. Un tag nuovo nasce Sola lettura.
Un indirizzo di file dati si scrive così come è nominato: una parola, un valore in
virgola mobile o un membro per intero, e un bit (B3:0/2, T4:0.DN) da solo, che
il controllore cambia sul posto lasciando gli altri bit della sua parola come sono.
Rilevamento
Il pulsante Rileva del Connector diffonde una richiesta CIP List Identity su ogni rete su cui questo computer si trova e continua ad ascoltare finché non passano 10 secondi senza una nuova risposta. La scansione nomina quelle reti mentre gira, così un risultato pari a zero dice dove la domanda è andata davvero: una stazione con adattatori virtuali per macchine, WSL o una VPN ha spesso più reti di quante l'operatore si aspetti, e i candidati possono arrivare da una di quelle.
Le interfacce che non possono portare la richiesta vengono saltate: tutto ciò che non è
attivo, gli adattatori di loopback e di tunnel, e un indirizzo che l'interfaccia si è
data da sé perché nessuno ha risposto al DHCP (169.254.x.x). Solo una risposta che sia
la risposta di identità di un controllore diventa un dispositivo candidato, chiamato
eip:// più il suo indirizzo; qualunque altra cosa risponda sulla porta EtherNet/IP
viene ignorata e detta nel diario. Un controllore Omron risponde alla stessa richiesta e
viene anch'esso lasciato fuori, con una riga propria nel diario: un controllore NJ, NX o NY
viene offerto dalla scansione del driver Omron. Per ogni candidato la scansione legge poi l'elenco
dei tag di ambito controllore e offre i suoi tag atomici come canali candidati,
ciascuno con scostamento 0.
Un array di un tipo atomico viene offerto come il suo primo elemento, in quel
tipo (Temps[0], oppure Grid[0,0] con due dimensioni), e un array BOOL come
un Boolean sul suo primo BOOL (Flags[0]).
Il rilevamento scarta quello che il driver non può interrogare: i tag di struttura e di
UDT (STRING Logix comprese) vengono lasciati cadere, e le voci Program:, Task: e
Map: vengono saltate. Un controllore su una rete su cui questo computer non si trova
non risponde alla diffusione; aggiungilo a mano.
Nemmeno un tag di qualunque altro tipo, come un tipo di sistema, viene offerto,
e il diario lo dice.
L'identità con cui un controllore risponde porta il suo numero di catalogo, che nomina
la sua famiglia: un PLC-5, SLC 500, MicroLogix o Micro800 arriva con la famiglia scelta
e con l'indirizzo che la nomina (eip://192.168.0.20?family=micrologix). Un PLC-5,
SLC 500 o MicroLogix non pubblica alcun elenco di tag, quindi arriva senza canali
candidati e i suoi tag si scrivono per indirizzo di file dati; l'elenco di tag di un
Micro800 si legge come quello di un Logix.
Un controllore Logix o Micro800 che c'è già rilegge il suo elenco dei tag dalla sua stessa pagina: Rileva tag, nell'intestazione della sua scheda Tag, offre solo i tag del controllore per cui non ha ancora un tag, confrontati per nome senza distinguere maiuscole e minuscole. Un controllore a file di dati non ha un elenco da leggere e non mostra Rileva tag (vedere Rilevare i tag di un dispositivo).
Buono a sapersi
- Ogni richiesta al controllore scade dopo 10 secondi, e la finestra di ascolto del rilevamento si chiude dopo 10 secondi di silenzio.
- Il driver apre ogni tag del controllore una volta sola e lo tiene aperto finché il dispositivo resta connesso, così un controllore con decine di tag viene letto sulle sessioni che ha già, invece di aprirne e chiuderne una per ogni lettura. Una lettura che fallisce lascia andare il proprio tag, e quella dopo lo riapre per nome.
- Rinominare un tag nel progetto Logix rompe il canale in silenzio; il tag legge allora cattiva qualità finché il nome configurato non torna a corrispondere.