OMRON FINS Treiber
Übersicht
OMRON FINS over TCP. Eigene Java-Implementierung, die allein auf Basis der Wire-Spec der offiziellen OMRON-Handbücher (W342, W421) ohne externe Bibliotheken oder externe Prozesse arbeitet.
| Punkt | Wert |
|---|---|
opc_type | FINS |
| Implementierungsklasse | plantpulse.driver.protocol.fins.FINSDriver |
| Bibliothek | (keine — Eigenimplementierung. OMRON W342/W421) |
| read | Gut (Memory Area Read 0101) |
| write | Gut (Memory Area Write 0102) |
| Standardport | 9600 |
| Sicherheit | keine |
Klassen / Struktur
FINSDriver (BaseProtocolDriver)
├── Socket — host:9600
├── clientNode/serverNode — connect() 의 Auto-Assign 응답에서 획득
├── sid — 0~255 순환 (요청-응답 매칭, 0 회피)
├── ParsedAddr — areaChar, wordAddr, bit
├── putBeInt / beInt — 4-byte big-endian helper
└── memAreaRead / memAreaWrite — synchronized
Bei connect() werden über FINS/TCP Node Address Auto-Assign (CIP cmd=0) Client-/Server-Node bezogen.
Zusammenfassung des Wire-Formats
CIP-Header (16 Byte, Big-Endian)
'F' 'I' 'N' 'S' | length(4) | command(4) | error(4)
command = 0Auto-Assign Request,=1Auto-Assign Response,=2FINS frame sendlength= Anzahl der Bytes abcommandbis zum Ende
FINS-Header (10 Byte)
ICF | RSV | GCT | DNA | DA1 | DA2 | SNA | SA1 | SA2 | SID
0x80 0x00 0x02 <dn> <sn> <du> <sn> <cn> <su> <sid>
ICF=0x80: Antwort angefordert- DA1 = Server-Node, SA1 = Client-Node (Ergebnis des Auto-Assign)
Memory Area Read (MRC=01 SRC=01)
01 01 | area(1) | addrHi addrLo | bit | countHi countLo
Antwort = FINS-Header(10) + 01 01 + MRES(1) SRES(1) + Daten.
Speicherbereichscodes
| Bereich | Word-Code | Bit-Code |
|---|---|---|
| CIO | 0xB0 | 0x30 |
| W (Work) | 0xB1 | 0x31 |
| H (Holding) | 0xB2 | 0x32 |
| A (Auxiliary) | 0xB3 | 0x33 |
| D (DM) | 0x82 | 0x02 |
| Timer / Counter PV | 0x89 | 0x09 (Fertig-Flag) |
wordAreaCode(char) / bitAreaCode(char) übernimmt die Umwandlung.
OPC-Registrierungsoptionen (options)
| Schlüssel | Bedeutung | Standard |
|---|---|---|
dna | Destination Network Address | 0 |
da2 | Destination Unit | 0 |
sna | Source Network Address | 0 |
sa2 | Source Unit | 0 |
connect-timeout | ms | 3000 |
read-timeout | ms | 3000 |
Tag-Adressformat
| Notation | Bedeutung |
|---|---|
D100 | DM 100 (16-Bit-Word) |
D100.05 oder D100/5 | Bit 5 von DM 100 |
H0.05 | Holding-Bit |
CIO10 | CIO-Word |
W50 | Work-Word |
format-Schlüsselwörter (Großbuchstaben):
| format | Bedeutung |
|---|---|
X / BIT | Bit |
W / WORD | signed 16 |
UI / UW / UWORD | unsigned 16 |
DW / DWORD | signed 32 (low word first) |
UDW / DUW / UDWORD | unsigned 32 |
LW / LWORD | signed 64 |
REAL / FLOAT | IEEE 32-bit |
LREAL / DOUBLE | IEEE 64-bit |
BIN[n] | Extraktion des n-ten Bits eines Words |
32/64-Bit-Mehrwortwerte folgen der OMRON-Konvention low word first.
Unterstützt / Nicht unterstützt
- ✅ Memory Area Read / Write (MRC=01 SRC=01/02)
- ✅ Bit / Word / DWord / LWord / Float / Double
- ✅ FINS/TCP Auto-Assign Handshake
- ❌ Multiple Memory Area Read (MRC=01 SRC=04)
- ❌ Program Area / Parameter Area / Clock-Befehle
- ❌ FINS over UDP
Testabdeckung
test/java/plantpulse/driver/protocol/fins/
| Klasse | Anzahl Tests |
|---|---|
FINSDriverTest | 38 |
Insgesamt 38 Tests — Adress-Parsing, Zuordnung der Bereichscodes, Word-Dekodierung, Handshake-Simulation u. a.
Referenzen
- OMRON W342 FINS Communications Reference Manual
- OMRON W421 CS/CJ Series Communications Commands Reference
- Code:
src/plantpulse/driver/protocol/fins/FINSDriver.java