FATEK FBs ドライバ
概要
FATEK FACON FBs シリーズ PLC の ASCII 通信。FBs Series Communication Protocol Manual の公開仕様に基づく独自実装。外部ライブラリ / GitHub コードへの依存はありません。
| 項目 | 値 |
|---|---|
opc_type | FATEK |
| 実装クラス | 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 | 動作 |
|---|---|
40 | Read system status |
41 | Get PLC run/stop/error/break status (ヘロー用) |
42 | Run/Stop PLC |
44 | Read data from registers (連続ワード) |
45 | Write data to registers (連続ワード) |
46 | Read individual data (単一ビット / 混在) |
47 | Write individual data |
sendAndReceive() で応答の error code が '0' でない場合は IOException (例: '2' illegal value、'4' illegal command、'5' checksum、'6' illegal address、'A' PLC password locked)。
OPC 登録オプション (options)
| キー | 意味 | デフォルト |
|---|---|---|
station | PLC station ID (0~255) | 1 |
connect-timeout | ms | 3000 |
read-timeout | ms | 3000 |
タグアドレス形式
| 表記 | 意味 | 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 | Timer / 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 / UW | 1 | signed/unsigned 16 |
B / BYTE | 1 | (16-bit 応答そのまま) |
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 |
対応 / 非対応
- ✅ 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/
| クラス | テスト数 |
|---|---|
FatekDriverTest | 48 |
計 48 テスト — LRC、buildRequest、アドレスパーサ、ワードのエンコード/デコード、error code。
参考
- FATEK FBs Series Communication Protocol Manual (ベンダー公開)
- コード:
src/plantpulse/driver/protocol/fatek/FatekDriver.java