Zum Hauptinhalt springen

FATEK FBs Treiber

Übersicht

ASCII-Kommunikation für PLCs der Serie FATEK FACON FBs. Eigenimplementierung auf Basis der offenen Spezifikation im FBs Series Communication Protocol Manual. Keine Abhängigkeit von externen Bibliotheken oder GitHub-Code.

PunktWert
opc_typeFATEK
Implementierungsklasseplantpulse.driver.protocol.fatek.FatekDriver
Bibliothek(keine — Eigenimplementierung. FATEK FBs Handbuch)
readgut (cmd 44 / 46)
writegut (cmd 45 / 47)
Standardport500
Sicherheitkeine

Klassen / Struktur

FatekDriver (BaseProtocolDriver)
├── Socket / InputStream / OutputStream
├── station — 0~255 (디폴트 1)
├── synchronized read/write
├── Addr (device, index, bit)
├── parseAddress(raw) — R/D/M/X/Y/T/C/WX/WY/WM
├── formatBitItem / formatWordItem
└── sendAndReceive(cmd, body) — STX/ETX/LRC 검증

Direkt nach connect() wird cmd 41 (status) als Hello abgesetzt; schlägt dies fehl, bleibt die Verbindung dennoch bestehen (die PLC unterstützt den Befehl möglicherweise nicht).


Zusammenfassung des Wire-Formats

Request : STX <station 2hex> <cmd 2hex> <data ASCII> <LRC 2hex> ETX
Response: STX <station 2hex> <cmd 2hex> <error-1char> <data> <LRC 2hex> ETX
STX = 0x02, ETX = 0x03
LRC : STX 다음부터 LRC 직전까지 XOR (ASCII char 단위) → 2자리 hex 대문자

Wichtige Befehle

cmdFunktion
40Read system status
41Get PLC run/stop/error/break status (für Hello)
42Run/Stop PLC
44Read data from registers (aufeinanderfolgende Wörter)
45Write data to registers (aufeinanderfolgende Wörter)
46Read individual data (einzelnes Bit / gemischt)
47Write individual data

Ist in sendAndReceive() der Error Code der Antwort nicht '0', so folgt IOException (z. B. '2' illegal value, '4' illegal command, '5' checksum, '6' illegal address, 'A' PLC password locked).


OPC-Registrierungsoptionen (options)

SchlüsselBedeutungStandard
stationPLC station ID (0~255)1
connect-timeoutms3000
read-timeoutms3000

Format der Tag-Adressen

NotationBedeutungbit/word
R0 / R100General registerword
D100Data registerword
WX10 / WY0 / WM10Input/Output/Internal wordword
M100Internal relaybit
X0 / Y0 / S0Input / Output / Stepbit
T0 / C0Aktueller Wert Timer / Counterword (RT/RC-Notation von cmd 44)

formatWordItem() :

  • R/D → <dev>+5자 index (insgesamt 6 Zeichen)
  • WX/WY/WM → <dev>+4자 (insgesamt 6 Zeichen)
  • T → RT + 4 Zeichen, C → RC + 4 Zeichen

Datenkodierung / -dekodierung

wordCountFor(dt, fmt) bestimmt 1/2/4 Wörter. decodeWords() übernimmt die Konvertierung — FATEK FB Multi-Word verwendet little-endian word order (das Low Word zuerst).

format / data_typeAnzahl WörterBemerkung
W / WORD / UI / UW1signed/unsigned 16
B / BYTE1(16-Bit-Antwort unverändert)
DW / DWORD / Int322signed 32
UDW / UInt322unsigned 32
REAL / FLOAT / Float2IEEE 32-bit
LREAL / DOUBLE / Double4IEEE 64-bit
LW / LWORD / Int644signed 64

Unterstützt / Nicht unterstützt

  • ✅ cmd 44 / 45 (N aufeinanderfolgende Wörter read/write)
  • ✅ cmd 46 / 47 (einzelnes Bit read/write)
  • ✅ STX/ETX/LRC-Frameprüfung + Verifikation von station/cmd echo
  • ✅ 32 / 64-bit Multi-Word, Float, Double
  • ❌ gleichzeitiges read/write mehrerer Bits (mixed-Einträge von cmd 46/47)
  • ❌ Run/Stop PLC (cmd 42)
  • ❌ getrennte Timer/Counter Contact Bits (derzeit nur word)

Testabdeckung

test/java/plantpulse/driver/protocol/fatek/

KlasseAnzahl Tests
FatekDriverTest48

Insgesamt 48 Tests — LRC, buildRequest, Adressparser, Wort-Enkodierung/-Dekodierung, Error Code.


Referenzen

  • FATEK FBs Series Communication Protocol Manual (vom Hersteller veröffentlicht)
  • Code: src/plantpulse/driver/protocol/fatek/FatekDriver.java