Panasonic MEWTOCOL ドライバ
概要
Panasonic FP シリーズ (FP0R / FP-X / FPΣ / FP7) の ASCII 通信プロトコル MEWTOCOL-COM。 Panasonic 公開 ユーザーマニュアル (ARCT1F320、ARCT1F313 など) のフレーム / コマンド / デバイスコード / BCC アルゴリズムのみに基づいて 独自に実装。外部 GitHub コードの流用なし。
| 項目 | 値 |
|---|---|
opc_type | MEWTOCOL |
| 実装クラス | plantpulse.driver.protocol.mewtocol.MEWTOCOLDriver |
| ライブラリ | (なし — 独自実装。ARCT1F320) |
| read | 良好 (RD / RC) |
| write | 良好 (WD / WC) |
| デフォルトポート | 9094 (FP-X / FP7 TCP) |
| セキュリティ | なし |
クラス / 構造
MEWTOCOLDriver (BaseProtocolDriver)
├── Socket / InputStream / OutputStream
├── station — "01" 디폴트, 옵션 station 으로 변경
├── ioLock — synchronized exchange()
├── ParsedAddress.parse() — 디바이스/wordIndex/bitIndex 분해
├── computeBcc(byte[]) — '%' ~ ETX 위치 직전 XOR → 2자리 hex
└── decodeRdResponseHex / encodeWords — 16/32/64-bit
wire フォーマット概要
요청 : '%' <station 2> '#' <cmd 2> <data> <BCC 2hex> CR
응답 : '%' <station 2> '$' <cmd 2> <data> <BCC 2hex> CR (정상)
'%' <station 2> '!' <error-2hex> <BCC 2hex> CR (에러)
BCC : '%' 부터 BCC 직전 (= ETX 위치) 까지 XOR
CR : 0x0D (LF 는 무시)
サポートコマンド
| cmd | 動作 | 形式 (data 部) |
|---|---|---|
RD | ワード read (DT/LD/FL/WX/WY/WR) | <dev-1char><start-5digits><end-5digits> |
RC | ビット read (単一、X/Y/R/L/T/C) | RCS<dev-1char><wordAddr4><bit-1hex> |
WD | ワード write | <dev><start5><end5><word1 hex 4>... |
WC | ビット write (単一) | WCS<dev><wordAddr4><bit1><val1> |
ワードの hex はマニュアルの規定どおり LSB バイトが先 (例: 0x1234 ワード → 応答 hex 3412)。
OPC 登録オプション (options)
| キー | 意味 | デフォルト |
|---|---|---|
station | ステーション番号 (2桁) | 01 |
connect-timeout | ms | 3000 |
read-timeout | ms | 3000 |
normalizeStation() は1桁入力 ("1") を "01" へ自動補正します。
タグアドレス形式
| 表記 | 意味 |
|---|---|
DT0 | Data Register 0 (16-bit) |
LD100 | Link Data 100 |
FL10 | File Register 10 |
WX0 / WY0 / WR0 | I/O / Internal word |
R0.5 | Internal Relay word 0 の bit 5 |
R0005 | 4文字 = ワード3桁+ビット1桁 (= R0.5) |
X0.0 / Y0.5 | Input/Output bit |
T0 / C0 | Timer / Counter (単一ビットとして扱う) |
データのエンコード / デコード
wordCountFor(dt, fmt) が 16/32/64-bit を決定 (1/2/4 ワード)。
decodeWords(words, dt, fmt) がマルチワード → 値へ変換:
| format / data_type | ワード数 | 変換 |
|---|---|---|
DW / Int32 | 2 | (words[1]<<16) | words[0] (low word first)、signed |
UDW / UInt32 | 2 | unsigned 32 |
REAL / Float | 2 | Float.intBitsToFloat(...) |
LREAL / Double | 4 | Double.longBitsToDouble(...) |
LW / Int64 | 4 | signed 64 |
| (デフォルト) | 1 | signed 16 |
エラーコードのマッピング
decodeError(code) がマニュアルの代表的なエラーを日本語に変換 (一部):
| code | 説明 |
|---|---|
20 | Relay/register 番号エラー |
21 | Memory 領域超過 |
22 | Latch エラー |
40 | BCC エラー (受信側) |
41 | Format エラー |
42 | 未サポートコマンド |
60 | Parameter エラー |
66 | Address エラー |
サポート / 未サポート
- ✅ RD / WD (ワード N 個連続)
- ✅ RC / WC (ビット単一)
- ✅ 32 / 64-bit マルチワード、Float、Double
- ❌ RC 複数 (RCP — Preset multi)
- ❌ RT / WT (Timer / Counter の EV/SV 個別 read)
- ❌ MEWTOCOL-7 / MEWTOCOL-DAT 拡張
テストカバレッジ
test/java/plantpulse/driver/protocol/mewtocol/
| クラス | テスト数 |
|---|---|
MEWTOCOLDriverTest | 39 |
合計 39 テスト — BCC、フレームビルダー、アドレスパーサー、RD 応答デコード、WC bit、エラーマッピング。
参考
- Panasonic ARCT1F320 FP-X User Manual MEWTOCOL-COM
- Panasonic ARCT1F313 FP Series Programming Manual
- コード:
src/plantpulse/driver/protocol/mewtocol/MEWTOCOLDriver.java