# Omron

> Collega i PLC Omron, i controllori CJ, CS e CP per indirizzo di memoria su FINS (UDP, TCP o Host Link su una linea seriale) e i controllori NJ, NX e NY per nome di variabile su EtherNet/IP; le impostazioni FINS, le forme di indirizzo, i tipi di dato, le letture, le scritture e il rilevamento.

Il driver **Omron** parla con i PLC Omron in una qualsiasi delle loro due lingue, scelta per
dispositivo. Un controllore CJ, CS o CP, e un NJ o NX impostato in modalità memoria CJ, si legge
su FINS per indirizzo di memoria, scritto come lo scrive il software di programmazione di Omron:
`D100`, `W0.01`, `CIO100.05`. Un controllore NJ, NX o NY si legge su EtherNet/IP per nome di una
variabile che pubblica in rete, come `Level` o `Motor.Speed`. Una stessa stazione legge i due tipi
fianco a fianco sotto lo stesso driver. Aggiungi un dispositivo sotto il driver Omron nel
[Connector](connector) e scegli il suo **Protocollo**; il pannello mostra solo i campi che quel
protocollo usa.

## Protocolli {#protocols}

| Protocollo | Controllori | I tag si indirizzano per | Porta |
| --- | --- | --- | --- |
| **FINS** | CJ1, CJ2, CS1, CP1 e gli altri controllori CJ, CS e CP con una porta o un'unità Ethernet; un NJ o NX in modalità memoria CJ | **Indirizzo di memoria**, come `D100` o `W0.01` | 9600 come predefinito |
| **Tag NJ/NX per nome** | Controllori NJ, NX e NY, come NJ501, NJ301, NJ101, NX1P2, NX102, NX502, NX701 e NY5 | **Nome della variabile**, come `Level` o `Motor.Speed` | nessuna: EtherNet/IP risponde sulla sua porta standard, la 44818 |

FINS è il predefinito, e un nuovo dispositivo parte da lì. Il protocollo è un'impostazione del
dispositivo, quindi un CJ2 e un NX1P2 stanno sotto lo stesso driver, ognuno letto nella propria
lingua. Cambiare protocollo conserva le impostazioni FINS come sono state lasciate, per quando FINS
torna, e ogni tag del dispositivo da quel momento legge il suo indirizzo nel nuovo protocollo: il suo
**Tipo di dato** si adegua a uno che l'indirizzo lì ammette, e un indirizzo che il nuovo protocollo
non sa leggere resta segnalato sulla pagina del tag finché non viene corretto.

## Connessione {#connection}

| Campo | Significato | Predefinito |
| --- | --- | --- |
| **Indirizzo host** | Indirizzo IP o nome host della porta o dell'unità Ethernet del PLC. | vuoto |
| **Protocollo** | **FINS** o **Tag NJ/NX per nome**. La riga sotto dice cosa legge il protocollo in vigore: "Aree di memoria dei controllori CJ, CS e CP, e di un NJ/NX in modalità memoria CJ." oppure "Variabili che un controllore NJ, NX o NY pubblica in rete, lette per nome su EtherNet/IP." | FINS |
| **Porta** | Solo FINS: la porta su cui il PLC risponde in FINS, la stessa in UDP e in TCP, da 1 a 65535. Un campo vuoto mostra 9600 in grigio e il dispositivo viene chiamato su di essa. Un dispositivo letto per nome di tag non ha il campo della porta. | 9600 |
| **Intervallo di interrogazione (ms)** | Periodo di lettura dell'intero dispositivo per i tag che non lo sovrascrivono. | 1000 |

L'intestazione del dispositivo mostra l'endpoint composto. Un dispositivo FINS vi scrive tutte le
sue impostazioni, con un nodo 0 che vale automatico, per esempio
`omron://192.168.250.1:9600?protocol=fins&transport=udp&network=0&node=0&unit=0&source=0&timeoutMs=2000`.
Un dispositivo letto per nome di tag nomina solo il suo host e il suo protocollo, `omron://192.168.250.1?protocol=njnx`.
Ogni tag può impostare il proprio **Intervallo di interrogazione (ms)**; un valore 0 sul tag torna
all'intervallo del dispositivo.

## Preparare il controllore {#prepare-the-controller}

Un controllore NJ, NX o NY letto per nome di tag serve solo le variabili globali che pubblica in
rete. La pubblicazione è un attributo di ogni variabile, impostato in Sysmac Studio e trasferito nel
controllore. Un controllore letto via FINS non ha bisogno di alcuna impostazione del genere.

| Impostazione | Dove in Sysmac Studio | Senza di essa |
| --- | --- | --- |
| **Network Publish** su **Publish Only** (oppure Input o Output per una variabile usata anche da un collegamento dati dei tag), su ogni variabile globale che la stazione legge o scrive | **Programming > Data > Global Variables**, la colonna **Network Publish** della variabile. Trasferire il progetto nel controllore (**Controller > Synchronize**). | Il controllore risponde di non servire alcuna variabile con quel nome, esattamente come per un nome che non esiste. Il tag legge cattiva qualità, e gli altri tag del dispositivo continuano a leggere. |

Una variabile di un programma, una variabile locale, non si può pubblicare: dichiararla tra le
variabili globali, oppure copiarla in una variabile globale nel programma.

Quando il controllore risponde di non servire alcuna variabile con il nome di un tag, la pagina del
dispositivo nomina la variabile e i tag che la leggono, con entrambe le cause (un nome che non
esiste, o una variabile non pubblicata) e questi passi, in un avviso che scompare da solo appena la
variabile legge; la pagina del tag porta lo stesso avviso. Il diario tecnico e l'agente leggono gli
stessi passi.

## La scheda FINS {#the-fins-card}

Un dispositivo letto su FINS porta una scheda **FINS** sotto la sua scheda Connessione: in cosa
viaggiano le sue richieste, a chi si rivolgono e quanto ognuna attende la risposta. Un dispositivo
letto per nome di tag non ha questa scheda.

| Campo | Significato | Predefinito |
| --- | --- | --- |
| **Protocollo di trasporto** | **UDP**: "Un datagramma per richiesta, con la risposta alla porta da cui è partito: il valore predefinito delle porte Ethernet di Omron." **TCP**: "Una connessione, in cui il PLC assegna a questa stazione il suo nodo FINS." | UDP |
| **Rete** | "La rete FINS del PLC: 0 per la rete di questa stazione, da 1 a 127 attraverso le tabelle di routing dei PLC." | 0 |
| **Nodo del PLC** | Il nodo FINS del PLC, da 1 a 254. Vuoto, il campo mostra "Automatico": in UDP l'ultimo numero dell'indirizzo IP del PLC (un PLC a `192.168.250.1` è il nodo 1), in TCP il nodo che il PLC annuncia quando la connessione si apre. | Automatico |
| **Unità** | "L'unità del PLC che risponde: 0 per l'unità CPU." Fino a 255. | 0 |
| **Nodo della stazione** | Solo UDP: il nodo FINS di questa stazione, da 1 a 254. Vuoto, il campo mostra "Automatico": l'ultimo numero dell'indirizzo IP di questa stazione sulla rete da cui raggiunge il PLC. In TCP il campo non viene disegnato, perché il PLC assegna il nodo nella connessione. | Automatico |
| **Timeout di risposta (ms)** | "Quanto attende una richiesta FINS la sua risposta." Da 100 a 60.000. | 2000 |

Un numero fuori dal suo intervallo viene rifiutato sotto il campo, per esempio "Immettere un numero compreso tra 0 e 127.",
e il campo torna al valore in vigore. Passare il trasporto a TCP conserva il nodo della stazione
scritto per UDP, che il dispositivo allora non usa.

## Host Link su una linea seriale {#host-link-on-a-serial-line}

Un controllore CP1E, CP1L, CP1H, CJ o CS che ha solo una porta seriale (RS-232C, oppure RS-485 e RS-422A tramite una scheda opzionale o un convertitore) si legge in FINS su Host Link, attraverso una linea seriale del driver Omron: una porta COM condivisa da fino a 32 controllori, ciascuno dei quali risponde al proprio numero di unità. Aggiungi la linea con **Aggiungi linea** nella tabella Linee seriali della pagina del driver e imposta **Porta seriale**, **Velocità (baud)** e **Formato seriale** come sono impostate le porte seriali dei controllori (il resto della pagina della linea è in [Linee seriali](connector-lines)), abilitala, poi aggiungi ogni controllore con **Aggiungi dispositivo** nella pagina della linea.

| Impostazione | Dove | Valore |
| --- | --- | --- |
| Modalità della porta | Il PLC Setup del controllore, per la porta seriale a cui è collegata la linea | Host Link |
| Velocità e formato | La linea | Come sono impostate le porte dei controllori; una porta Host Link esce di fabbrica a 9600 baud e `7E2` |
| **ID unità** | La scheda Connessione del dispositivo, accanto a **Linea seriale · fissa** | Il numero di unità Host Link del controllore, da 0 a 31, come lo imposta il suo PLC Setup. Un dispositivo nuovo prende il primo numero libero della linea; un numero che un altro controllore della linea ha già viene rifiutato |
| **Timeout di risposta (ms)** | La scheda FINS del dispositivo | Da 100 a 60.000; 2000 |

Un dispositivo su una linea si legge in FINS per sempre: non ha i campi **Protocollo**, **Indirizzo host** né **Porta**, e la sua scheda FINS mostra solo "FINS su Host Link su questa linea seriale, verso il PLC il cui numero di unità (impostato per la sua porta seriale nel PLC Setup) è l'ID unità qui sopra." e il **Timeout di risposta (ms)**, perché la richiesta va all'unità CPU del controllore che il bus indirizza e nessun campo di rete si applica. Non passa mai alla rete, né un dispositivo di rete passa a una linea. I suoi tag si indirizzano come in rete (`D100`, `W0.01`), e il suo endpoint nomina la linea e l'unità, per esempio `omron://serial/<line id>/COM5/9600/7E2?protocol=fins&transport=hostlink&hostLinkUnit=0&timeoutMs=2000`.

| Su una linea seriale | Cosa succede |
| --- | --- |
| Più controllori su una linea | Una richiesta e la sua risposta alla volta per tutta la linea; la risposta di un'altra unità, o il rumore, viene ignorata |
| Un controllore che non risponde entro il suo timeout | Quel dispositivo si riconnette; gli altri controllori della linea continuano a leggere |
| Il controllore considera il frame danneggiato e risponde con un codice di fine Host Link, come `13 (FCS error)` | Il dispositivo si riconnette |
| La porta si guasta, per esempio quando l'adattatore viene staccato | Ogni dispositivo della linea si riconnette; la porta viene riaperta dopo una pausa di 1 secondo, che raddoppia fino a un minuto |
| Un tag di testo | Al massimo 534 caratteri, quanto porta un frame Host Link |

La scansione non cerca su una linea seriale: aggiungi ogni controllore con il suo numero di unità.

## Indirizzamento {#addressing}

Un tag si indirizza con un solo campo della sua scheda Sorgente, che prende il nome dal protocollo del
dispositivo: **Indirizzo di memoria** su FINS, **Nome della variabile** per un dispositivo letto per
nome di tag, con il suggerimento del protocollo sotto. Un indirizzo che il driver non sa leggere viene
rifiutato sulla pagina del tag nel punto in cui lo si scrive, con il motivo. La riga in sola lettura
**Indirizzo di origine (bus)** della scheda Sorgente mostra l'indirizzo che il driver riceve.

### Indirizzi di memoria (FINS) {#memory-addresses-fins}

Un indirizzo di memoria è fatto delle lettere dell'area, del numero della parola in decimale e, per
un singolo bit, di un punto e del bit, da 00 a 15. Maiuscole e minuscole non contano, e anche le
grafie più vecchie vengono lette.

| Area | Esempi | Parole | Si scrive anche |
| --- | --- | --- | --- |
| CIO | `CIO100`, `CIO100.05`, `100.05` | da 0 a 6143 | un numero da solo, che è un indirizzo CIO |
| Lavoro (W) | `W0`, `W0.01` | da 0 a 511 | `WR` |
| Ritenzione (H) | `H10`, `H10.00` | da 0 a 1535 | `HR` |
| Ausiliaria (A) | `A100`, `A100.03` | da 0 a 1471 | `AR` |
| Memoria dati (D) | `D100`, `D100.15` | da 0 a 32767 | `DM` |
| Memoria dati estesa (E) | `E0_100`, `EA_0`, `E18_0` | da 0 a 32767 | il banco in esadecimale, da 0 a 18, tra la E e il trattino basso |

Ogni area ha come limite la più grande che un controllore CJ, CS o CP possieda (un CJ2 ha 1.536
parole di ritenzione e banchi di memoria estesa fino al 18). Una parola o un banco che un controllore
più piccolo non ha è la risposta del PLC stesso, un errore alla prima lettura del tag (vedi
[Lettura](#reading)). Ciò che la pagina del tag rifiuta nel punto in cui lo si scrive:

| Scrivi | La pagina del tag dice |
| --- | --- |
| Qualcosa che non è un'area, una parola e un bit, come `X100` o `D100.` | "Un indirizzo di memoria FINS è l'area, la parola e, per un bit, un punto e il bit, per esempio D100, W0.01, CIO100.05, H10, A100 o E0_100." |
| Una parola oltre la fine della sua area, come `D40000` o `W512` | "Quella parola è oltre l'ultima parola della sua area su qualsiasi controllore CJ, CS o CP." |
| Un bit oltre il 15, come `W0.16` | "Il bit di una parola va da 00 a 15." |
| Un banco oltre il 18, come `E19_0` | "I banchi della memoria estesa sono numerati da 0 a 18 in esadecimale." |

L'indirizzo di bus è l'indirizzo nella sua unica grafia, con il bit su due cifre: `100.5` viaggia
come `CIO100.05` e `DM100` come `D100`. Un tag di testo aggiunge dopo un `?` i caratteri che occupa,
quindi un testo di 16 caratteri in D200 viaggia come `D200?16`.

### Nomi di variabile (NJ/NX) {#variable-names-njnx}

Un controllore NJ, NX o NY si legge per nome di una variabile globale che pubblica in rete, cioè in
Sysmac Studio una variabile il cui attributo Network Publish vale Publish Only, Input o Output
(vedere [Preparare il controllore](#prepare-the-controller)). Una variabile che il controllore non
pubblica non si può leggere per nome. Un nome si scrive con lettere
ASCII, cifre e trattini bassi, senza mai iniziare con una cifra, con un punto prima del membro di
una struttura e un indice tra parentesi quadre: `Level`, `Motor.Speed`, `Temps[3]`, `Grid[1,2]`.
Ogni altra forma viene rifiutata sulla pagina del tag: "Un nome di variabile si scrive con lettere, cifre e trattini bassi, senza iniziare con una cifra, con un punto prima di un membro e un indice tra parentesi quadre, per esempio Level, Motor.Speed o Temps[3]."
Un nome in un'altra scrittura, che Sysmac Studio permette, viene rifiutato allo stesso modo, perché
la richiesta EtherNet/IP non può portarlo.

Il controllore elenca le sue variabili in un modo che questo driver non legge, quindi ogni tag di un
dispositivo letto per nome di tag si scrive a mano. Se il controllore pubblica un nome lo dice lui,
alla prima lettura del tag. Non c'è un campo di offset: un membro o un elemento si nomina per sé, e
un elemento di un array di BOOL si legge con il proprio nome, come `Flags[5]`. L'indirizzo di bus è
il nome seguito da `?0`, per esempio `Motor.Speed?0`.

## Tipi di dato {#data-types}

Su FINS il **Tipo di dato** offerto segue l'indirizzo:

| L'indirizzo nomina | Tipo di dato | Cosa si legge |
| --- | --- | --- |
| Un bit, come `W0.01` | Boolean | Solo quel bit. |
| Una parola, come `D100` | Int16 o UInt16 | La parola. |
| Una parola e la successiva | Int32, UInt32 o Float | Due parole, la parola bassa all'indirizzo e quella alta dopo, come le istruzioni stesse di Omron tengono una doppia parola. L'ultima parola di un'area non apre nessuna coppia, quindi offre solo Int16, UInt16 e String. |
| Una parola e le successive, come testo | String | La **Lunghezza (caratteri, vuoto = 16)** che il tag dichiara, da 1 a 1998 caratteri, due per parola, il primo nel byte alto. Il testo finisce al suo primo NUL. Su una linea seriale, da 1 a 534 caratteri. |

Scrivere un indirizzo che non ammette il tipo del tag cambia il tipo in quello che l'indirizzo legge
in modo più naturale: un Boolean per un bit, un Int16 per una parola. Un tipo che l'indirizzo non
ammette viene rifiutato con quelli che ammette, per esempio "L'indirizzo D100 si legge come uno di questi tipi di dato: Int16, UInt16, Int32, UInt32, Float, String."
Non c'è un'opzione di ordine dei byte o delle parole: FINS tiene ogni parola con il byte alto per
primo, e il driver se ne occupa.

Un dispositivo letto per nome di tag offre ogni tipo atomico del suo controllore:

| Tipo di dato | Tipo della variabile in Sysmac Studio |
| --- | --- |
| Boolean | BOOL |
| SByte | SINT |
| Byte | USINT |
| Int16 | INT |
| UInt16 | UINT |
| Int32 | DINT |
| UInt32 | UDINT |
| Int64 | LINT |
| UInt64 | ULINT |
| Float | REAL |
| Double | LREAL |

Una variabile WORD si legge come UInt16 e una DWORD come UInt32. Le variabili STRING non si leggono,
e String non viene offerto. Un tipo fuori dall'elenco viene rifiutato con l'elenco stesso: "Una variabile di un controllore NJ/NX si legge come uno di questi tipi di dato: Boolean, SByte, Byte, Int16, UInt16, Int32, UInt32, Int64, UInt64, Float, Double."

## Lettura {#reading}

Su FINS il dispositivo tiene una sola conversazione con il suo PLC e manda una richiesta alla volta,
ogni tag una lettura di area di memoria delle sue parole, e prende come risposta solo quella che
porta il numero di quella stessa richiesta, quindi una risposta in ritardo non viene mai letta come
quella della successiva. Prima che si legga qualsiasi tag, il PLC deve rispondere a una lettura dei
dati del controllore, con qualsiasi codice di fine; il modello che nomina viene scritto nel diario
tecnico. Ciò che il PLC risponde decide poi la sorte di ogni lettura:

| Il PLC risponde | La lettura |
| --- | --- |
| Completamento normale | Il valore. |
| Un codice di fine sul punto, come un indirizzo che il PLC non ha | Quel tag resta senza valore, e il suo errore nomina il codice e il suo significato nel manuale Omron, per esempio `end code 0x1103 (address range error)`. Tutti gli altri tag del dispositivo continuano a leggere. |
| Un codice di fine sul percorso verso il PLC (0x01xx, 0x02xx, 0x03xx, 0x05xx), un nodo intermedio scaduto lungo il percorso, oppure niente entro il **Timeout di risposta (ms)** | Il dispositivo si riconnette, e i suoi tag falliscono le letture finché il PLC non risponde di nuovo. La politica di ogni tag per [un dispositivo che non ha risposto](connector-value-pipeline#the-device-did-not-answer) decide cosa mostra. |

Un dispositivo letto per nome di tag viene verificato chiedendo al controllore una variabile che
nessun programma dichiara: la risposta del controllore che quel nome non esiste è una risposta del
controllore. Le sue richieste passano per lo stesso codice EtherNet/IP di quelle del driver
[Rockwell EtherNet/IP](driver-rockwell), e scadono dopo 10 secondi.

## Scritture {#writes}

I tag il cui **Accesso** è Lettura e scrittura oppure Sola scrittura si possono scrivere; un nuovo
tag parte come Sola lettura. Una scrittura aspetta il suo turno nella coda del dispositivo insieme
alle letture, e manda il valore richiesto e nient'altro:

| Il tag legge | Cosa manda la scrittura |
| --- | --- |
| Un bit FINS (`W0.01`) | Solo quel bit: il PLC lo cambia sul posto e lascia gli altri bit della parola come sono. |
| Una parola o una doppia parola FINS | Il valore intero, all'indirizzo e, per due parole, alla parola successiva. |
| Un testo FINS | L'intera lunghezza dichiarata, con il testo davanti e dei NUL dietro, così che nulla di un testo precedente più lungo venga riletto dopo di esso. Un testo che non entra nella lunghezza viene rifiutato, mai troncato. |
| Una variabile NJ/NX | Il valore, a quella variabile per nome; un elemento di un array di BOOL come quel solo BOOL. |

| Il PLC risponde a una scrittura FINS con | La scrittura |
| --- | --- |
| Completamento normale | Consegnata. |
| Un codice di fine che la rifiuta | Rifiutata, e il motivo nomina il codice e il suo significato, per esempio `end code 0x2101 (read-only)`. |
| Niente entro il **Timeout di risposta (ms)**, oppure un nodo intermedio scaduto lungo il percorso (0x0205) | Nessuna risposta. |

Una scrittura FINS il cui valore il tipo del tag non può contenere viene rifiutata prima di inviare
qualsiasi cosa.

## Rilevamento {#discovery}

La pagina del driver Omron porta una scheda **Ambito della scansione** con un solo campo, facoltativo, "Indirizzo del PLC per un sondaggio FINS, per esempio 192.168.250.1 (vuoto = solo NJ/NX via broadcast)".
Rileva fa allora fino a due domande, una dopo l'altra:

| Domanda | Quando | Cosa offre |
| --- | --- | --- |
| Una lettura dei dati del controllore su FINS e UDP, con tutti i nodi in automatico, inviata al PLC del campo: un indirizzo IP o un nome, con `:port` quando il PLC risponde in FINS su una porta diversa dalla 9600. La riga di avanzamento dice "Richiesta a 192.168.250.1 di identificarsi su FINS…". | Solo quando il campo contiene un indirizzo. | Il PLC, come dispositivo FINS che prende il nome del modello con cui risponde, a `omron://<host>:<port>?protocol=fins&transport=udp&network=0&node=0&unit=0&source=0&timeoutMs=2000`. Un PLC che non risponde nulla non offre nulla. |
| La richiesta di identità EtherNet/IP, in broadcast su ogni rete in cui si trova questo computer. La riga di avanzamento nomina quelle reti: "Ricerca di controllori Omron NJ/NX su 192.168.0.255…". | Sempre. La scansione ascolta finché non passano 5 secondi senza nuove risposte. | Ogni controllore NJ, NX o NY che risponde, come dispositivo letto per nome di tag, con il nome del suo prodotto (un NX1P2, per esempio). Un accoppiatore di I/O NX, il cui nome di prodotto inizia con `NX-`, non contiene variabili e viene saltato, come qualsiasi altro prodotto Omron. |

Nessuna delle due domande trova tag: un PLC FINS non pubblica un elenco dei suoi indirizzi, e un
NJ/NX elenca le sue variabili in un modo che il driver non legge, quindi ogni candidato mostra "Nessun tag segnalato. Aggiungere il dispositivo per configurarne i tag nel suo editor."
Ciò che nel campo non è un host viene rifiutato sotto di esso, e Rileva diventa grigio: "Una scansione Omron chiede al PLC scritto qui di identificarsi su FINS: il suo indirizzo IP o il suo nome, con la porta se serve (per esempio 192.168.250.1 o 192.168.250.1:9600). Lasciarlo vuoto per cercare solo i controllori NJ/NX via broadcast."
Un controllore su una rete in cui questo computer non si trova non risponde al broadcast; aggiungilo
a mano. La scansione di Rockwell EtherNet/IP sente lo stesso broadcast e lascia ogni controllore
Omron a questa. Il resto del comportamento della scansione è in [Rilevamento](connector-discovery).

## Strumenti dell'agente {#agent-tools}

`driver_capabilities` descrive questo driver sotto `omron`: i suoi due protocolli, ognuno con i campi
del dispositivo, le forme di indirizzo e i tipi di dato che accetta, i trasporti e gli intervalli
FINS, le scritture e il rilevamento. `device_upsert driver=Omron` accetta `omronProtocol` (`Fins` o
`NjNx`) e, su FINS, `finsTransport` (`Udp` o `Tcp`), `finsNetwork`, `finsNode` (0 per automatico),
`finsUnit`, `finsSourceNode` (solo UDP, 0 per automatico) e `finsResponseTimeoutMs`; un dispositivo
letto per nome di tag non accetta né porta né campi FINS. `tag_upsert` accetta l'indirizzo di memoria
o il nome della variabile come `address`, il tipo come `opcUaType` (se omesso, un bit prende Boolean
e una parola Int16) e la lunghezza di un testo FINS come `wireQuantity`. `device_discover driver=Omron`
avvia la scansione, con `target` per il sondaggio FINS. Un CJ2 letto in UDP e un NX1P2 letto per nome
di 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
```

Un controllore su una linea seriale dipende da una linea di questo driver: `serial_line_upsert driver=Omron` crea la linea, e `device_upsert driver=Omron serialLineId=<id>` aggiunge il controllore su Host Link (`finsTransport=HostLink`, che la linea implica) con `unitId`, il suo numero di unità da 0 a 31 (se omesso, il primo libero), e `finsResponseTimeoutMs`; lì i campi di rete vengono rifiutati. Un CP1L all'unità 0 su 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
```

Gli altri strumenti sono in [Strumenti dell'agente](agent-tools).

## Limiti da conoscere {#limits-worth-knowing}

- Un controllore che parla solo i vecchi comandi Host Link della modalità C, come un CPM1, un CPM2, un CQM1 o un C200HS, non viene letto, né su una [linea seriale](#host-link-on-a-serial-line) né attraverso un convertitore: il driver invia solo comandi FINS.
- Timer e contatori non vengono offerti su FINS: il loro valore attuale è tenuto in BCD o in binario
  a seconda di come è configurato il PLC, e nulla in una risposta FINS dice quale. Leggi un valore
  del genere attraverso una parola in cui il programma lo copia.
- Le variabili di un controllore NJ/NX non vengono mai elencate, né sulla pagina del tag né da una
  scansione: ogni nome si scrive.
- Un dispositivo letto per nome di tag legge un valore atomico per tag. Le variabili STRING, una
  struttura intera e un array intero non si leggono; un membro o un elemento si legge per nome.
- Il driver manda tre comandi FINS e nessun altro: lettura di area di memoria, scrittura di area di
  memoria e lettura dei dati del controllore. Non cambia mai la modalità di funzionamento del PLC,
  il suo orologio né il suo programma.

## Buono a sapersi {#good-to-know}

- In UDP la stazione manda ogni richiesta da una porta propria e il PLC risponde a quella porta, che
  è come sono impostate di fabbrica le porte Ethernet di Omron. Un'unità Ethernet impostata sulla
  conversione di indirizzo statica risponde invece alla porta 9600 della stazione, dove il driver
  non ascolta: leggi un PLC così in TCP.
- Una rete FINS diversa da 0 si raggiunge attraverso le tabelle di routing impostate nei PLC; la
  stazione da sola non instrada nulla.
- Un controllore NJ/NX viene interrogato prima sul percorso CIP `1,0` e, quando questo non ottiene
  risposta, su 18 seguito dall'indirizzo IP del controllore stesso, come `18,192.168.250.1`; il
  percorso che ha risposto viene provato per primo la volta successiva. Non c'è un campo per il
  percorso.
- Ogni tag FINS è una richiesta a sé, e un dispositivo ne manda una alla volta, quindi il tempo di
  un giro di letture cresce con il numero dei suoi tag.
