KNXnet/IP ドライバ
概要
KNXnet/IP — ビルオートメーション(照明 / ブラインド / 空調)で標準化された KNX バスを IP 上でトンネリングします。2026-07 ネイティブ再実装 — 旧 Apache PLC4j knxnet-ip への委譲は削除されました(2026-07 P2 移管)。現在は plantpulse-plc-protocol の独自実装(KnxNetIpClient UDP 3671 tunneling + KnxGroupAddress + KnxDpt)を使用します。
| 項目 | 値 |
|---|---|
opc_type | KNXNET |
| 実装クラス | plantpulse.driver.protocol.knxnet.KNXnetDriver |
| ライブラリ | 独自ネイティブ(plantpulse-plc-protocol の knx — UDP tunneling) |
| 継承 | BaseProtocolDriver(PLC4j ではありません) |
getProtocol() | "knxnet-ip"(旧 PLC4X scheme 表記を維持 — ログ/診断の互換性のため) |
| デフォルトポート | 3671(UDP) |
| 状態 | 安定(TUNNELING) |
| read | OK(GroupValueRead) |
| write | OK(GroupValueWrite — DPT サフィックス必須) |
| セキュリティ | なし(KNX Secure 非対応) |
ネイティブクライアントは TUNNELING(ユニキャスト) のみをサポートします。マルチキャスト ROUTING は非対応です — connection-type=routing を指定した場合は警告ログを出力した後、tunneling で処理を継続します。
クラス構成
BaseProtocolDriver
└── KNXnetDriver — connect() 에서 KnxNetIpClient(host, port) tunneling 세션 수립
ワイヤ動作: CONNECT_REQUEST(0x0205) → RESPONSE(channelId) → TUNNELING_REQUEST(cEMI L_Data.req GroupValueRead) → ACK → ゲートウェイからの L_Data.ind GroupValueResponse(+ACK 返信) → CONNECTIONSTATE ハートビート(30s) → DISCONNECT。read 通信が失敗した場合はソケットを無効化(connected=false)し、Edge に再接続を促します。
OPC 登録オプション
| フィールド | 意味 | デフォルト |
|---|---|---|
opc_agent_ip | KNX/IP ゲートウェイ IP | 192.168.1.10 |
opc_agent_port | UDP ポート | 3671(通常は固定) |
options.request-timeout | 応答タイムアウト(ms) | 2000(旧 PLC4X のデフォルトと同一) |
options.connection-type | tunneling のみサポート | tunneling |
タグ plc_address 形式(既存の契約を維持)
<main>/<middle>/<sub>[:<DPT>] 예) 1/0/5:DPT_Switch / 3/2/0:9.001 / 1/2/10
<main>/<sub>[:<DPT>] 2-level (main 0-31 / sub 0-2047)
DPT サフィックスは PLC4X 名(DPT_Switch / DPT_Scaling / DPT_Value_Temp / DPT_Value_Length …)または数値(1.001 / 5.001 / 9.001 / 14.056 …)のいずれも使用できます。
| 表記 | 意味 |
|---|---|
1/0/5:DPT_Switch | 1-bit boolean(DPT 1.001) |
2/1/3:DPT_Scaling | 0..100 %(DPT 5.001) |
3/2/0:DPT_Value_Temp | 2-byte float(DPT 9.001) |
3/2/0:9.001 | 同一(数値 DPT) |
1/2/10 | DPT 省略 — 長さベースの unsigned(RAW) として解釈 |
対応デコード: DPT1 bool / 5.001 %scale / 5.x u8 / 7.x u16 / 9.x 2-byte float / 12・13.x u32 / 14.x float32 / 16.x string。DPT を省略した場合は長さベースの unsigned(RAW) 解釈となります — 正確な値が必要な場合は ETS プロジェクトに基づく DPT を明示してください。
support / 非対応
- read: GroupValueRead → GroupValueResponse — OK。
- write: GroupValueWrite — OK。DPT サフィックス必須 — RAW ではエンコードできず、エンコード方式は DPT が決定します(
data_typeとは無関係)。 - ROUTING(マルチキャスト、224.0.23.12): 非対応(TUNNELING 専用)。
- KNX Secure(IP / Data): 非対応。
- ETS プロジェクト(
.knxproj)import による自動マッピング: 非対応 — Group Address を直接入力してください。(旧フォームのknxproj-file-path/knxproj-password/group-address-num-levelsオプションはネイティブでは無視されます — 削除済み。) - KNX TP/PL/RF への直接接続: 非対応 — IP ゲートウェイ経由が前提です。
参考
- KNX Standard ISO/IEC 14543-3。
- コード:
plantpulse-edge-driver/src/plantpulse/driver/protocol/knxnet/KNXnetDriver.java+plantpulse-plc-protocolのknxパッケージ。 - 運用: ゲートウェイ(Gira / ABB / Siemens N146)の Tunneling スロット数の制限に注意 — 同時接続は 1〜5 個が一般的です。