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)해 엣지가 재연결하도록 유도합니다.
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 개가 일반적.