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.
| Punkt | Wert |
|---|---|
opc_type | FATEK |
| Implementierungsklasse | plantpulse.driver.protocol.fatek.FatekDriver |
| Bibliothek | (keine — Eigenimplementierung. FATEK FBs Handbuch) |
| read | gut (cmd 44 / 46) |
| write | gut (cmd 45 / 47) |
| Standardport | 500 |
| Sicherheit | keine |
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
| cmd | Funktion |
|---|---|
40 | Read system status |
41 | Get PLC run/stop/error/break status (für Hello) |
42 | Run/Stop PLC |
44 | Read data from registers (aufeinanderfolgende Wörter) |
45 | Write data to registers (aufeinanderfolgende Wörter) |
46 | Read individual data (einzelnes Bit / gemischt) |
47 | Write 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üssel | Bedeutung | Standard |
|---|---|---|
station | PLC station ID (0~255) | 1 |
connect-timeout | ms | 3000 |
read-timeout | ms | 3000 |
Format der Tag-Adressen
| Notation | Bedeutung | bit/word |
|---|---|---|
R0 / R100 | General register | word |
D100 | Data register | word |
WX10 / WY0 / WM10 | Input/Output/Internal word | word |
M100 | Internal relay | bit |
X0 / Y0 / S0 | Input / Output / Step | bit |
T0 / C0 | Aktueller Wert Timer / Counter | word (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_type | Anzahl Wörter | Bemerkung |
|---|---|---|
W / WORD / UI / UW | 1 | signed/unsigned 16 |
B / BYTE | 1 | (16-Bit-Antwort unverändert) |
DW / DWORD / Int32 | 2 | signed 32 |
UDW / UInt32 | 2 | unsigned 32 |
REAL / FLOAT / Float | 2 | IEEE 32-bit |
LREAL / DOUBLE / Double | 4 | IEEE 64-bit |
LW / LWORD / Int64 | 4 | signed 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/
| Klasse | Anzahl Tests |
|---|---|
FatekDriverTest | 48 |
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