メインコンテンツまでスキップ

FATEK FBs ドライバ

概要

FATEK FACON FBs シリーズ PLC の ASCII 通信。FBs Series Communication Protocol Manual の公開仕様に基づく独自実装。外部ライブラリ / GitHub コードへの依存はありません。

項目
opc_typeFATEK
実装クラスplantpulse.driver.protocol.fatek.FatekDriver
ライブラリ(なし — 独自実装。FATEK FBs マニュアル)
read良好 (cmd 44 / 46)
write良好 (cmd 45 / 47)
デフォルトポート500
セキュリティなし

クラス / 構造

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 검증

connect() の直後に cmd 41 (status) をヘローとして呼び出しますが、失敗しても接続は維持されます (PLC が未対応の場合があるため)。


wire フォーマット概要

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 대문자

主なコマンド

cmd動作
40Read system status
41Get PLC run/stop/error/break status (ヘロー用)
42Run/Stop PLC
44Read data from registers (連続ワード)
45Write data to registers (連続ワード)
46Read individual data (単一ビット / 混在)
47Write individual data

sendAndReceive() で応答の error code が '0' でない場合は IOException (例: '2' illegal value、'4' illegal command、'5' checksum、'6' illegal address、'A' PLC password locked)。


OPC 登録オプション (options)

キー意味デフォルト
stationPLC station ID (0~255)1
connect-timeoutms3000
read-timeoutms3000

タグアドレス形式

表記意味bit/word
R0 / R100General registerword
D100Data registerword
WX10 / WY0 / WM10Input/Output/Internal wordword
M100Internal relaybit
X0 / Y0 / S0Input / Output / Stepbit
T0 / C0Timer / Counter 現在値word (cmd 44 の RT/RC 表記)

formatWordItem() :

  • R/D → <dev>+5자 index (計 6 文字)
  • WX/WY/WM → <dev>+4자 (計 6 文字)
  • T → RT + 4 文字、C → RC + 4 文字

データエンコード / デコード

wordCountFor(dt, fmt) が 1/2/4 ワードを決定します。decodeWords() が変換を行います — FATEK FB のマルチワードは little-endian word order (low word が先)。

format / data_typeワード数備考
W / WORD / UI / UW1signed/unsigned 16
B / BYTE1(16-bit 応答そのまま)
DW / DWORD / Int322signed 32
UDW / UInt322unsigned 32
REAL / FLOAT / Float2IEEE 32-bit
LREAL / DOUBLE / Double4IEEE 64-bit
LW / LWORD / Int644signed 64

対応 / 非対応

  • ✅ cmd 44 / 45 (N ワード連続 read/write)
  • ✅ cmd 46 / 47 (単一ビット read/write)
  • ✅ STX/ETX/LRC フレーム検証 + station/cmd エコー検証
  • ✅ 32 / 64-bit マルチワード、Float、Double
  • ❌ 複数ビットの同時 read/write (cmd 46/47 の mixed 項目)
  • ❌ Run/Stop PLC (cmd 42)
  • ❌ Timer/Counter contact bit の分離 (現在は word のみ)

テストカバレッジ

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

クラステスト数
FatekDriverTest48

計 48 テスト — LRC、buildRequest、アドレスパーサ、ワードのエンコード/デコード、error code。


参考

  • FATEK FBs Series Communication Protocol Manual (ベンダー公開)
  • コード: src/plantpulse/driver/protocol/fatek/FatekDriver.java