# Omron

> Omron-Steuerungen anbinden, CJ, CS und CP über die Speicheradresse per FINS (UDP, TCP oder Host Link auf einer seriellen Leitung) und NJ, NX und NY über den Variablennamen per EtherNet/IP; die FINS-Einstellungen, die Adressformen, die Datentypen, Lesen, Schreiben und die Gerätesuche.

Der Treiber **Omron** spricht mit Omron-Steuerungen in einer ihrer beiden Sprachen, die je Gerät
gewählt wird. Eine CJ-, CS- oder CP-Steuerung, ebenso eine NJ oder NX im CJ-Speichermodus, wird
über FINS mit der Speicheradresse gelesen, so geschrieben, wie Omrons Programmiersoftware sie
schreibt: `D100`, `W0.01`, `CIO100.05`. Eine NJ-, NX- oder NY-Steuerung wird über EtherNet/IP mit
dem Namen einer Variable gelesen, die sie im Netzwerk veröffentlicht, etwa `Level` oder
`Motor.Speed`. Eine Station liest beide Arten nebeneinander unter dem einen Treiber. Legen Sie im
[Connector](connector) ein Gerät unter dem Treiber Omron an und wählen Sie sein **Protokoll**; der
Bereich zeigt nur die Felder, die dieses Protokoll verwendet.

## Protokolle {#protocols}

| Protokoll | Steuerungen | Tags werden adressiert über | Port |
| --- | --- | --- | --- |
| **FINS** | CJ1, CJ2, CS1, CP1 und die anderen CJ-, CS- und CP-Steuerungen mit Ethernet-Port oder Ethernet-Einheit; eine NJ oder NX im CJ-Speichermodus | **Speicheradresse**, etwa `D100` oder `W0.01` | standardmäßig 9600 |
| **NJ/NX-Tags nach Name** | NJ-, NX- und NY-Steuerungen, etwa NJ501, NJ301, NJ101, NX1P2, NX102, NX502, NX701 und NY5 | **Variablenname**, etwa `Level` oder `Motor.Speed` | keiner: EtherNet/IP antwortet auf seinem Standardport 44818 |

FINS ist der Standard, und ein neues Gerät beginnt damit. Das Protokoll ist eine Einstellung des
Geräts, eine CJ2 und eine NX1P2 stehen also unter demselben Treiber, jede in ihrer eigenen Sprache
gelesen. Ein Wechsel des Protokolls behält die FINS-Einstellungen so, wie sie zurückgelassen wurden,
für den Fall, dass FINS zurückkommt, und jedes Tag des Geräts liest seine Adresse von da an im neuen
Protokoll: Sein **Datentyp** stellt sich auf einen ein, den die Adresse dort zulässt, und eine
Adresse, die das neue Protokoll nicht lesen kann, bleibt auf der Seite des Tags markiert, bis sie
korrigiert ist.

## Verbindung {#connection}

| Feld | Bedeutung | Standard |
| --- | --- | --- |
| **Hostadresse** | IP-Adresse oder Hostname des Ethernet-Ports oder der Ethernet-Einheit der Steuerung. | leer |
| **Protokoll** | **FINS** oder **NJ/NX-Tags nach Name**. Die Zeile darunter sagt, was das geltende Protokoll liest: "Speicherbereiche von CJ-, CS- und CP-Steuerungen und einer NJ/NX im CJ-Speichermodus." oder "Variablen, die eine NJ-, NX- oder NY-Steuerung im Netzwerk veröffentlicht, nach Name über EtherNet/IP gelesen." | FINS |
| **Port** | Nur FINS: der Port, auf dem die Steuerung FINS beantwortet, derselbe über UDP und über TCP, 1 bis 65535. Ein leeres Feld zeigt 9600 grau, und das Gerät wird über diesen Port angewählt. Ein über Tag-Namen gelesenes Gerät hat kein Portfeld. | 9600 |
| **Abfrageintervall (ms)** | Leseperiode des ganzen Geräts für Tags, die sie nicht überschreiben. | 1.000 |

Die Kopfzeile des Geräts zeigt den zusammengesetzten Endpunkt. Ein FINS-Gerät schreibt alle seine
Einstellungen hinein, wobei ein Knoten 0 für automatisch steht, zum Beispiel
`omron://192.168.250.1:9600?protocol=fins&transport=udp&network=0&node=0&unit=0&source=0&timeoutMs=2000`.
Ein über Tag-Namen gelesenes Gerät nennt nur seinen Host und sein Protokoll, `omron://192.168.250.1?protocol=njnx`.
Jedes Tag kann ein eigenes **Abfrageintervall (ms)** setzen; der Wert 0 am Tag fällt auf das
Intervall des Geräts zurück.

## Die Steuerung vorbereiten {#prepare-the-controller}

Eine NJ-, NX- oder NY-Steuerung, die über den Namen gelesen wird, stellt nur die globalen Variablen
bereit, die sie im Netzwerk veröffentlicht. Das Veröffentlichen ist ein Attribut jeder Variable, in
Sysmac Studio gesetzt und in die Steuerung übertragen. Eine über FINS gelesene Steuerung braucht
keine solche Einstellung.

| Einstellung | Wo in Sysmac Studio | Ohne sie |
| --- | --- | --- |
| **Network Publish** auf **Publish Only** (oder Input bzw. Output für eine Variable, die auch eine Tag-Datenverbindung nutzt), an jeder globalen Variable, die die Station liest oder schreibt | **Programming > Data > Global Variables**, die Spalte **Network Publish** der Variable. Übertragen Sie das Projekt in die Steuerung (**Controller > Synchronize**). | Die Steuerung antwortet, dass sie keine Variable mit diesem Namen bereitstellt, genau wie bei einem Namen, den es nicht gibt. Das Tag liest schlechte Qualität, und die anderen Tags des Geräts lesen weiter. |

Die Variable eines Programms, eine lokale Variable, lässt sich nicht veröffentlichen: Deklarieren Sie
sie unter den globalen Variablen oder kopieren Sie sie im Programm in eine globale Variable.

Antwortet die Steuerung, dass sie keine Variable mit dem Namen eines Tags bereitstellt, nennt die
Seite des Geräts die Variable und die Tags, die sie lesen, mit beiden Ursachen (ein Name, den es nicht
gibt, oder eine Variable, die nicht veröffentlicht ist) und diesen Schritten, in einem Hinweis, der
von selbst verschwindet, sobald die Variable liest; die Seite des Tags trägt denselben Hinweis. Das
Journal und der Agent lesen dieselben Schritte.

## Die Karte FINS {#the-fins-card}

Ein über FINS gelesenes Gerät trägt unter seiner Karte Verbindung eine Karte **FINS**: worin seine
Anfragen reisen, an wen sie sich richten und wie lange jede auf ihre Antwort wartet. Ein über
Tag-Namen gelesenes Gerät hat diese Karte nicht.

| Feld | Bedeutung | Standard |
| --- | --- | --- |
| **Transportprotokoll** | **UDP**: "Ein Datagramm je Anfrage, beantwortet an den Port, von dem es kam: die Voreinstellung der Ethernet-Ports von Omron." **TCP**: "Eine Verbindung, in der die Steuerung dieser Station ihren FINS-Knoten zuweist." | UDP |
| **Netzwerk** | "Das FINS-Netzwerk der Steuerung: 0 für das Netzwerk dieser Station, 1 bis 127 über die Routing-Tabellen der Steuerungen." | 0 |
| **SPS-Knoten** | Der FINS-Knoten der Steuerung, 1 bis 254. Leer zeigt das Feld "Automatisch": über UDP die letzte Zahl der IP-Adresse der Steuerung (eine Steuerung unter `192.168.250.1` ist Knoten 1), über TCP der Knoten, den die Steuerung beim Öffnen der Verbindung meldet. | Automatisch |
| **Einheit** | "Die Einheit in der Steuerung, die antwortet: 0 für die CPU-Einheit." Bis 255. | 0 |
| **Knoten der Station** | Nur UDP: der FINS-Knoten dieser Station, 1 bis 254. Leer zeigt das Feld "Automatisch": die letzte Zahl der IP-Adresse dieser Station in dem Netzwerk, über das sie die Steuerung erreicht. Über TCP wird das Feld nicht gezeichnet, weil die Steuerung den Knoten in der Verbindung zuweist. | Automatisch |
| **Zeitlimit für die Antwort (ms)** | "Wie lange eine FINS-Anfrage auf ihre Antwort wartet." 100 bis 60.000. | 2.000 |

Eine Zahl außerhalb ihres Bereichs wird unter dem Feld abgelehnt, zum Beispiel "Geben Sie eine Zahl zwischen 0 und 127 ein.",
und das Feld kehrt zum geltenden Wert zurück. Ein Wechsel des Transports auf TCP behält den für UDP
eingetragenen Knoten der Station, den das Gerät dann nicht verwendet.

## Host Link auf einer seriellen Leitung {#host-link-on-a-serial-line}

Eine CP1E-, CP1L-, CP1H-, CJ- oder CS-Steuerung, die nur eine serielle Schnittstelle hat (RS-232C, oder RS-485 und RS-422A über eine Optionsplatine oder einen Umsetzer), wird über FINS per Host Link gelesen, über eine serielle Leitung des Omron-Treibers: ein COM-Port, den sich bis zu 32 Steuerungen teilen, von denen jede auf ihre eigene Einheitennummer antwortet. Legen Sie die Leitung mit **Leitung hinzufügen** in der Tabelle Serielle Leitungen auf der Seite des Treibers an, setzen Sie **Serieller Port**, **Baudrate** und **Serielles Format** auf das, was an den seriellen Schnittstellen der Steuerungen eingestellt ist (der Rest der Seite der Leitung steht unter [Serielle Leitungen](connector-lines)), aktivieren Sie sie und fügen Sie dann jede Steuerung mit **Gerät hinzufügen** auf der Seite der Leitung hinzu.

| Einstellung | Wo | Wert |
| --- | --- | --- |
| Modus der Schnittstelle | Das PLC Setup der Steuerung, für die serielle Schnittstelle, an der die Leitung hängt | Host Link |
| Baudrate und Format | Die Leitung | Wie die Schnittstellen der Steuerungen eingestellt sind; eine Host-Link-Schnittstelle kommt ab Werk mit 9600 Baud und `7E2` |
| **Unit-ID** | Die Karte Verbindung des Geräts, neben **Serielle Leitung · fest** | Die Host-Link-Einheitennummer der Steuerung, 0 bis 31, wie ihr PLC Setup sie festlegt. Ein neues Gerät nimmt die erste freie Nummer der Leitung; eine Nummer, die schon eine andere Steuerung der Leitung hat, wird abgelehnt |
| **Zeitlimit für die Antwort (ms)** | Die Karte FINS des Geräts | 100 bis 60.000; 2.000 |

Ein Gerät auf einer Leitung wird für immer über FINS gelesen: Es hat kein Feld **Protokoll**, **Hostadresse** oder **Port**, und seine Karte FINS zeigt nur "FINS über Host Link auf dieser seriellen Leitung, an die Steuerung, deren Einheitennummer (im PLC Setup für ihren seriellen Port eingestellt) die Unit-ID oben ist." und das **Zeitlimit für die Antwort (ms)**, denn die Anfrage geht an die CPU-Einheit der Steuerung, die der Bus adressiert, und kein Netzwerkfeld gilt. Es wechselt nie ins Netzwerk, und ein Netzwerkgerät wechselt nie auf eine Leitung. Seine Tags werden wie über das Netzwerk adressiert (`D100`, `W0.01`), und sein Endpunkt nennt die Leitung und die Einheit, zum Beispiel `omron://serial/<line id>/COM5/9600/7E2?protocol=fins&transport=hostlink&hostLinkUnit=0&timeoutMs=2000`.

| Auf einer seriellen Leitung | Was geschieht |
| --- | --- |
| Mehrere Steuerungen auf einer Leitung | Eine Anfrage und ihre Antwort nach der anderen für die ganze Leitung; die Antwort einer anderen Einheit oder Störungen auf der Leitung werden übergangen |
| Eine Steuerung, die nicht innerhalb ihres Zeitlimits antwortet | Dieses Gerät verbindet sich neu; die anderen Steuerungen der Leitung lesen weiter |
| Die Steuerung hält den Rahmen für beschädigt und antwortet mit einem Host-Link-Endcode, etwa `13 (FCS error)` | Das Gerät verbindet sich neu |
| Die Schnittstelle fällt aus, etwa wenn der Adapter gezogen wird | Jedes Gerät der Leitung verbindet sich neu; die Schnittstelle wird nach einer Pause von 1 Sekunde wieder geöffnet, die sich bis zu einer Minute verdoppelt |
| Ein Text-Tag | Höchstens 534 Zeichen, so viel trägt ein Host-Link-Rahmen |

Die Gerätesuche durchsucht keine serielle Leitung: Fügen Sie jede Steuerung über ihre Einheitennummer hinzu.

## Adressierung {#addressing}

Ein Tag wird über ein einziges Feld auf seiner Karte Quelle adressiert, benannt nach dem Protokoll
des Geräts: **Speicheradresse** über FINS, **Variablenname** bei einem über Tag-Namen gelesenen
Gerät, mit dem Hinweis des Protokolls darunter. Eine Adresse, die der Treiber nicht lesen kann, wird
auf der Seite des Tags dort abgelehnt, wo sie eingegeben wird, mit dem Grund. Die schreibgeschützte
Zeile **Quelladresse (Bus)** der Karte Quelle zeigt die Adresse, die der Treiber erhält.

### Speicheradressen (FINS) {#memory-addresses-fins}

Eine Speicheradresse besteht aus den Buchstaben des Bereichs, der Wortnummer dezimal und, für ein
einzelnes Bit, einem Punkt und dem Bit, 00 bis 15. Groß- und Kleinschreibung spielt keine Rolle,
und die älteren Schreibweisen werden ebenfalls gelesen.

| Bereich | Beispiele | Wörter | Auch geschrieben als |
| --- | --- | --- | --- |
| CIO | `CIO100`, `CIO100.05`, `100.05` | 0 bis 6143 | eine bloße Zahl, die eine CIO-Adresse ist |
| Arbeitsbereich (W) | `W0`, `W0.01` | 0 bis 511 | `WR` |
| Haltebereich (H) | `H10`, `H10.00` | 0 bis 1535 | `HR` |
| Hilfsbereich (A) | `A100`, `A100.03` | 0 bis 1471 | `AR` |
| Datenspeicher (D) | `D100`, `D100.15` | 0 bis 32767 | `DM` |
| Erweiterter Datenspeicher (E) | `E0_100`, `EA_0`, `E18_0` | 0 bis 32767 | die Bank hexadezimal, 0 bis 18, zwischen dem E und dem Unterstrich |

Jeder Bereich ist durch den größten begrenzt, den irgendeine CJ-, CS- oder CP-Steuerung hat (eine
CJ2 hat 1.536 Haltewörter und Bänke des erweiterten Datenspeichers bis 18). Ein Wort oder eine
Bank, die eine kleinere Steuerung nicht hat, ist die Antwort dieser Steuerung selbst, ein Fehler
beim ersten Lesen des Tags (siehe [Lesen](#reading)). Was die Seite des Tags bei der Eingabe
ablehnt:

| Sie geben ein | Die Seite des Tags sagt |
| --- | --- |
| Etwas, das kein Bereich, kein Wort und kein Bit ist, etwa `X100` oder `D100.` | "Eine FINS-Speicheradresse ist der Bereich, das Wort und, für ein Bit, ein Punkt und das Bit, zum Beispiel D100, W0.01, CIO100.05, H10, A100 oder E0_100." |
| Ein Wort hinter dem Ende seines Bereichs, etwa `D40000` oder `W512` | "Dieses Wort liegt hinter dem letzten Wort seines Bereichs auf jeder CJ-, CS- oder CP-Steuerung." |
| Ein Bit über 15, etwa `W0.16` | "Das Bit eines Worts ist von 00 bis 15 nummeriert." |
| Eine Bank über 18, etwa `E19_0` | "Die Bänke des erweiterten Datenspeichers sind hexadezimal von 0 bis 18 nummeriert." |

Die Busadresse ist die Adresse in ihrer einen Schreibweise, das Bit zweistellig: `100.5` reist als
`CIO100.05` und `DM100` als `D100`. Ein Text-Tag hängt hinter einem `?` die Zeichen an, die es
belegt; ein Text mit 16 Zeichen in D200 reist also als `D200?16`.

### Variablennamen (NJ/NX) {#variable-names-njnx}

Eine NJ-, NX- oder NY-Steuerung wird über den Namen einer globalen Variable gelesen, die sie im
Netzwerk veröffentlicht, in Sysmac Studio also eine Variable, deren Attribut Network Publish auf
Publish Only, Input oder Output steht (siehe [Die Steuerung vorbereiten](#prepare-the-controller)).
Eine Variable, die die Steuerung nicht veröffentlicht, lässt sich nicht über den Namen lesen. Ein Name besteht aus ASCII-Buchstaben, Ziffern und Unterstrichen,
beginnt nie mit einer Ziffer und hat einen Punkt vor dem Element einer Struktur und einen Index in
eckigen Klammern: `Level`, `Motor.Speed`, `Temps[3]`, `Grid[1,2]`. Jede andere Form lehnt die Seite
des Tags ab: "Ein Variablenname besteht aus Buchstaben, Ziffern und Unterstrichen, beginnt nicht mit einer Ziffer und hat einen Punkt vor einem Element und einen Index in eckigen Klammern, zum Beispiel Level, Motor.Speed oder Temps[3]."
Ein Name in einer anderen Schrift, den Sysmac Studio zulässt, wird ebenso abgelehnt, weil die
EtherNet/IP-Anfrage ihn nicht tragen kann.

Die Steuerung listet ihre Variablen auf eine Weise auf, die dieser Treiber nicht liest; jedes Tag
eines über Tag-Namen gelesenen Geräts wird deshalb von Hand eingetragen. Ob die Steuerung einen
Namen veröffentlicht, ist ihre eigene Antwort, gegeben beim ersten Lesen des Tags. Es gibt kein
Versatzfeld: Ein Element wird für sich benannt, und ein Element eines BOOL-Feldes wird über seinen
eigenen Namen gelesen, etwa `Flags[5]`. Die Busadresse ist der Name, gefolgt von `?0`, zum Beispiel
`Motor.Speed?0`.

## Datentypen {#data-types}

Über FINS folgt der angebotene **Datentyp** der Adresse:

| Die Adresse nennt | Datentyp | Was gelesen wird |
| --- | --- | --- |
| Ein Bit, etwa `W0.01` | Boolean | Nur dieses Bit. |
| Ein Wort, etwa `D100` | Int16 oder UInt16 | Das Wort. |
| Ein Wort und das folgende | Int32, UInt32 oder Float | Zwei Wörter, das niederwertige Wort an der Adresse und das höherwertige danach, so wie Omrons eigene Befehle ein Doppelwort ablegen. Das letzte Wort eines Bereichs beginnt kein Paar und bietet deshalb nur Int16, UInt16 und String an. |
| Ein Wort und die folgenden, als Text | String | Die **Länge (Zeichen, leer = 16)**, die das Tag angibt, 1 bis 1998 Zeichen, zwei je Wort, das erste im höherwertigen Byte. Der Text endet an seinem ersten NUL. Auf einer seriellen Leitung 1 bis 534 Zeichen. |

Die Eingabe einer Adresse, die den Typ des Tags nicht zulässt, ändert den Typ in den, den die
Adresse am natürlichsten liest: ein Boolean für ein Bit, ein Int16 für ein Wort. Ein Typ, den die
Adresse nicht zulässt, wird mit den zulässigen abgelehnt, zum Beispiel "Die Adresse D100 wird als einer dieser Datentypen gelesen: Int16, UInt16, Int32, UInt32, Float, String."
Es gibt keine Option für die Byte- oder Wortreihenfolge: FINS legt jedes Wort mit dem
höherwertigen Byte zuerst ab, und der Treiber kümmert sich darum.

Ein über Tag-Namen gelesenes Gerät bietet jeden atomaren Typ seiner Steuerung an:

| Datentyp | Variablentyp 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 |

Eine WORD-Variable wird als UInt16 gelesen, eine DWORD-Variable als UInt32. STRING-Variablen werden
nicht gelesen, und String wird nicht angeboten. Ein Typ außerhalb der Liste wird mit ihr abgelehnt: "Eine Variable einer NJ/NX-Steuerung wird als einer dieser Datentypen gelesen: Boolean, SByte, Byte, Int16, UInt16, Int32, UInt32, Int64, UInt64, Float, Double."

## Lesen {#reading}

Über FINS führt das Gerät ein einziges Gespräch mit seiner Steuerung und sendet eine Anfrage nach
der anderen, jedes Tag ein Lesen des Speicherbereichs für seine Wörter, und nimmt als Antwort nur
die, die die Nummer genau dieser Anfrage trägt; eine verspätete Antwort wird also nie als die der
nächsten gelesen. Bevor ein Tag gelesen wird, muss die Steuerung ein Lesen der Steuerungsdaten
beantworten, mit einem beliebigen Endcode; das Modell, das sie nennt, wird ins Journal geschrieben.
Was die Steuerung antwortet, entscheidet dann über jeden Lesevorgang:

| Die Steuerung antwortet | Der Lesevorgang |
| --- | --- |
| Normaler Abschluss | Der Wert. |
| Ein Endcode zum Punkt, etwa eine Adresse, die die Steuerung nicht hat | Dieses Tag bleibt ohne Wert, und sein Fehler nennt den Code und seine Bedeutung im Handbuch von Omron, zum Beispiel `end code 0x1103 (address range error)`. Alle anderen Tags des Geräts lesen weiter. |
| Ein Endcode zum Weg zur Steuerung (0x01xx, 0x02xx, 0x03xx, 0x05xx), ein Zwischenknoten, dessen Zeit unterwegs abgelaufen ist, oder nichts innerhalb von **Zeitlimit für die Antwort (ms)** | Das Gerät verbindet sich neu, und seine Tags schlagen beim Lesen fehl, bis die Steuerung wieder antwortet. Die Regel jedes Tags für [ein Gerät, das nicht geantwortet hat](connector-value-pipeline#the-device-did-not-answer), entscheidet, was es zeigt. |

Ein über Tag-Namen gelesenes Gerät wird geprüft, indem die Steuerung nach einer Variable gefragt
wird, die kein Programm deklariert: Die Antwort der Steuerung, dass es diesen Namen nicht gibt, ist
eine Antwort der Steuerung. Seine Anfragen laufen über denselben EtherNet/IP-Code wie die des
Treibers [Rockwell EtherNet/IP](driver-rockwell) und laufen nach 10 Sekunden in eine
Zeitüberschreitung.

## Schreiben {#writes}

Tags, deren **Zugriff** Lesen und schreiben oder Nur schreiben ist, lassen sich schreiben; ein neues
Tag beginnt als Nur lesen. Ein Schreibvorgang wartet in der Warteschlange des Geräts zusammen mit den
Lesevorgängen, bis er an der Reihe ist, und sendet den verlangten Wert und nichts daneben:

| Das Tag liest | Was der Schreibvorgang sendet |
| --- | --- |
| Ein FINS-Bit (`W0.01`) | Nur dieses Bit: Die Steuerung ändert es an Ort und Stelle und lässt die anderen Bits des Worts, wie sie sind. |
| Ein FINS-Wort oder -Doppelwort | Den ganzen Wert, an der Adresse und bei zwei Wörtern im folgenden Wort. |
| Einen FINS-Text | Die ganze angegebene Länge, den Text vorn und NULs dahinter, damit von einem früheren, längeren Text nichts hinter ihm zurückgelesen wird. Ein Text, der nicht in die Länge passt, wird abgelehnt, nie gekürzt. |
| Eine NJ/NX-Variable | Den Wert, an diese Variable über ihren Namen; ein Element eines BOOL-Feldes als nur dieses BOOL. |

| Die Steuerung beantwortet einen FINS-Schreibvorgang mit | Der Schreibvorgang |
| --- | --- |
| Normaler Abschluss | Zugestellt. |
| Ein Endcode, der ihn ablehnt | Abgelehnt, und die Begründung nennt den Code und seine Bedeutung, zum Beispiel `end code 0x2101 (read-only)`. |
| Nichts innerhalb von **Zeitlimit für die Antwort (ms)**, oder ein Zwischenknoten, dessen Zeit unterwegs abgelaufen ist (0x0205) | Keine Antwort. |

Ein FINS-Schreibvorgang, dessen Wert der Typ des Tags nicht fassen kann, wird abgelehnt, bevor
irgendetwas gesendet wird.

## Gerätesuche {#discovery}

Die Seite des Treibers Omron trägt eine Karte **Suchbereich** mit einem einzigen, optionalen Feld, "Adresse der Steuerung für eine FINS-Abfrage, z. B. 192.168.250.1 (leer = nur NJ/NX per Broadcast)".
Geräte suchen stellt dann bis zu zwei Fragen nacheinander:

| Frage | Wann | Was sie anbietet |
| --- | --- | --- |
| Ein Lesen der Steuerungsdaten über FINS und UDP, alle Knoten automatisch, gesendet an die Steuerung im Feld: eine IP-Adresse oder ein Name, mit `:port`, wenn die Steuerung FINS auf einem anderen Port als 9600 beantwortet. Die Fortschrittszeile lautet "192.168.250.1 wird über FINS gebeten, sich zu erkennen zu geben…". | Nur wenn das Feld eine Adresse enthält. | Die Steuerung als FINS-Gerät, benannt nach dem Modell, mit dem sie antwortet, unter `omron://<host>:<port>?protocol=fins&transport=udp&network=0&node=0&unit=0&source=0&timeoutMs=2000`. Eine Steuerung, die nichts antwortet, bietet nichts an. |
| Die EtherNet/IP-Identitätsanfrage, als Rundruf in jedes Netz, in dem dieser Rechner ist. Die Fortschrittszeile nennt diese Netze: "Omron-NJ/NX-Steuerungen werden auf 192.168.0.255 gesucht…". | Jedes Mal. Der Suchlauf hört zu, bis 5 Sekunden ohne neue Antwort vergangen sind. | Jede NJ-, NX- oder NY-Steuerung, die antwortet, als über Tag-Namen gelesenes Gerät, benannt nach ihrem Produktnamen (etwa eine NX1P2). Ein NX-E/A-Koppler, dessen Produktname mit `NX-` beginnt, hält keine Variablen und wird übergangen, wie jedes andere Omron-Produkt. |

Keine der beiden Fragen findet Tags: Eine FINS-Steuerung veröffentlicht keine Liste ihrer Adressen,
und eine NJ/NX listet ihre Variablen auf eine Weise auf, die der Treiber nicht liest; jeder Kandidat zeigt deshalb "Keine Tags gemeldet. Fügen Sie das Gerät hinzu, um die Tags in seinem Editor einzurichten."
Was im Feld kein Host ist, wird darunter abgelehnt, und Geräte suchen wird grau: "Ein Omron-Suchlauf bittet die hier eingetragene Steuerung über FINS, sich zu erkennen zu geben: ihre IP-Adresse oder ihr Name, auf Wunsch mit Port (zum Beispiel 192.168.250.1 oder 192.168.250.1:9600). Leer lassen, um nur per Broadcast nach NJ/NX-Steuerungen zu suchen."
Eine Steuerung in einem Netz, in dem dieser Rechner nicht ist, antwortet nicht auf den Rundruf;
legen Sie sie von Hand an. Der Suchlauf von Rockwell EtherNet/IP hört denselben Rundruf und
überlässt jede Omron-Steuerung diesem. Das übrige Verhalten des Suchlaufs steht unter
[Gerätesuche](connector-discovery).

## Agent-Werkzeuge {#agent-tools}

`driver_capabilities` beschreibt diesen Treiber unter `omron`: seine beiden Protokolle, jedes mit den
Gerätefeldern, den Adressformen und den Datentypen, die es annimmt, die FINS-Transporte und
-Bereiche, das Schreiben und die Gerätesuche. `device_upsert driver=Omron` nimmt `omronProtocol`
(`Fins` oder `NjNx`) und über FINS `finsTransport` (`Udp` oder `Tcp`), `finsNetwork`, `finsNode`
(0 für automatisch), `finsUnit`, `finsSourceNode` (nur UDP, 0 für automatisch) und
`finsResponseTimeoutMs`; ein über Tag-Namen gelesenes Gerät nimmt weder Port noch FINS-Feld.
`tag_upsert` nimmt die Speicheradresse oder den Variablennamen als `address`, den Typ als
`opcUaType` (weggelassen erhält ein Bit Boolean und ein Wort Int16) und die Länge eines FINS-Texts
als `wireQuantity`. `device_discover driver=Omron` startet den Suchlauf, mit `target` für die
FINS-Abfrage. Eine über UDP gelesene CJ2 und eine über Tag-Namen gelesene NX1P2:

```
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
```

Eine Steuerung auf einer seriellen Leitung hängt an einer Leitung dieses Treibers: `serial_line_upsert driver=Omron` legt die Leitung an, und `device_upsert driver=Omron serialLineId=<id>` fügt die Steuerung über Host Link hinzu (`finsTransport=HostLink`, das die Leitung vorgibt), mit `unitId`, ihrer Einheitennummer 0 bis 31 (weggelassen die erste freie), und `finsResponseTimeoutMs`; die Netzwerkfelder werden dort abgelehnt. Eine CP1L mit Einheit 0 an 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
```

Die übrigen Werkzeuge stehen unter [Agent-Werkzeuge](agent-tools).

## Grenzen, die man kennen sollte {#limits-worth-knowing}

- Eine Steuerung, die nur die älteren Host-Link-Befehle des C-Modus spricht, etwa eine CPM1, eine CPM2, eine CQM1 oder eine C200HS, wird nicht gelesen, weder auf einer [seriellen Leitung](#host-link-on-a-serial-line) noch über einen Umsetzer: Der Treiber sendet nur FINS-Befehle.
- Timer und Zähler werden über FINS nicht angeboten: Ihr Istwert liegt je nach Einrichtung der
  Steuerung in BCD oder binär vor, und nichts in einer FINS-Antwort sagt, in welcher Form. Lesen Sie
  einen solchen Wert über ein Wort, in das das Programm ihn kopiert.
- Die Variablen einer NJ/NX-Steuerung werden nie aufgelistet, weder auf der Seite des Tags noch
  durch einen Suchlauf: Jeder Name wird eingetragen.
- Ein über Tag-Namen gelesenes Gerät liest einen atomaren Wert je Tag. STRING-Variablen, eine ganze
  Struktur und ein ganzes Feld werden nicht gelesen; ein Element wird über seinen Namen gelesen.
- Der Treiber sendet drei FINS-Befehle und keinen anderen: Lesen eines Speicherbereichs, Schreiben
  eines Speicherbereichs und Lesen der Steuerungsdaten. Er ändert nie die Betriebsart der Steuerung,
  ihre Uhr oder ihr Programm.

## Gut zu wissen {#good-to-know}

- Über UDP sendet die Station jede Anfrage von einem eigenen Port, und die Steuerung antwortet an
  diesen Port; so sind die Ethernet-Ports von Omron ab Werk eingestellt. Eine Ethernet-Einheit mit
  statischer Adressumsetzung antwortet stattdessen an Port 9600 der Station, auf dem der Treiber
  nicht hört: Lesen Sie eine solche Steuerung über TCP.
- Ein FINS-Netzwerk außer 0 wird über die in den Steuerungen eingestellten Routing-Tabellen
  erreicht; die Station selbst leitet nichts weiter.
- Eine NJ/NX-Steuerung wird zuerst über die CIP-Route `1,0` gefragt und, wenn diese keine Antwort
  bekommt, über 18 gefolgt von der eigenen IP-Adresse der Steuerung, etwa `18,192.168.250.1`; die
  Route, die geantwortet hat, wird beim nächsten Mal zuerst versucht. Es gibt kein Feld für die
  Route.
- Jedes FINS-Tag ist eine eigene Anfrage, und ein Gerät sendet eine nach der anderen; die Dauer
  einer Leserunde wächst also mit der Zahl seiner Tags.
