Driver Overview
A complete list of the industrial protocols supported by PlantPulse Edge.
Each driver is implemented in the plantpulse.driver.protocol.<proto> package inside plantpulse-edge-driver.jar,
and ProtocolDriverFactory.createDriver(opc_type) creates an instance based on the APP_OPC.OPC_TYPE string.
Implementations fall into two broad categories.
- Native Java implementations (the majority): In addition to LS, EIP, ADS, OP, FINS, MEWTOCOL, FATEK, NMEA, MBUS, HART, DNP3, IEC61850 and SECSGEM, the Modbus family (TCP/UDP/RTU), PROFINET, AB-ETH, BACnet, KNXnet and CANopen were also rewritten natively as of 2026-07 (all legacy Apache PLC4j delegation removed — the PLC4X dependency itself has been deleted). Protocol framing is written directly on plain Java sockets, with no external native/JNI dependencies.
- HW-master-dependent stubs (guidance only): DALI, IO-Link, DeltaV. Instead of reading inside the gateway, the recommended configuration bridges through a higher-level protocol (OPC UA / Modbus / PROFINET / DeltaV OPC UA), which is documented. (ROS 2 has graduated to a full rosbridge WebSocket implementation — see Connection Types.)
Beyond these, GE/MELSEC/S7 use the iot-communication (xingshuangs) library as-is, OPC UA is based on Eclipse Milo, and a proprietary HTTP client rounds out the secondary track.
Supported Protocol List
General-Purpose PLC / Common Protocols
opc_type | Protocol | Library | Status | Page |
|---|---|---|---|---|
LS | LS XGI/XBC/XBM (FEnet) | Native Java | Stable | LS |
GE | GE SRTP / GE Fanuc | iot-communication (xingshuangs) | Stable | (planned) |
MELSEC | Mitsubishi MELSEC (MC) | iot-communication (xingshuangs) | Stable | MELSEC |
S7 | Siemens S7-300/400/1200/1500 | iot-communication (xingshuangs) | Stable | S7 |
MODBUS | Modbus TCP | Native Java | Stable (read+write) | Modbus |
MODBUSUDP | Modbus UDP | Native Java (MBAP-over-UDP) | Stable (read+write) | Modbus |
MODBUS_RTU | Modbus RTU | Native Java (RTU-over-TCP) | Stable (read+write) | Modbus RTU |
OPCUA | OPC Unified Architecture | Eclipse Milo | Stable | OPC-UA |
US PLC Family
opc_type | Protocol | Library | Status | Page |
|---|---|---|---|---|
EIP | EtherNet/IP CIP (Allen-Bradley Logix) | Native Java (based on the etherip design, pure Java) | Stable (read+write) | EIP |
AB-ETH | Allen-Bradley PLC-5/SLC-500 | Native Java (CSP/PCCC) | Stable (read-only, TCP/2222) | AB-ETH |
Europe / Building Automation
opc_type | Protocol | Library | Status | Page |
|---|---|---|---|---|
ADS | Beckhoff TwinCAT/ADS | Native Java (AMS/ADS) | Stable (read+write) | ADS |
PROFINET | PROFINET (acyclic record) | Native Java (DCE/RPC Read-Implicit) | Stable (read-only, UDP/34964 — cyclic RT not supported) | PROFINET |
BACNET | BACnet/IP (HVAC/building) | Native Java (ReadProperty) | Stable (read-only, UDP/47808) | BACnet |
KNXNET | KNXnet/IP (lighting/shading) | Native Java (UDP tunneling) | Stable (read+write, UDP/3671) | KNXnet |
Japanese PLC Family
opc_type | Protocol | Library | Status | Page |
|---|---|---|---|---|
FINS | OMRON FINS over TCP | Native Java | Stable (initial read) | (planned) |
MEWTOCOL | Panasonic MEWTOCOL | Native Java | Stable (initial read) | (planned) |
FATEK | FATEK FBs | Native Java | Stable (initial read) | (planned) |
Industrial Communication / Domain-Specific
opc_type | Protocol | Library | Status | Page |
|---|---|---|---|---|
OP | Atlas Copco Open Protocol (tightening results) | Native Java (OpenProtocolJavaDriver) | Stable — Node.js runner fully replaced | (planned) |
NMEA | NMEA 0183 (marine/vessel) | Native Java | Stable (read-only, sentence caching) | (planned) |
MBUS | M-Bus (EN 13757, meters) | Native Java | Stable (initial read) | (planned) |
HART | HART-IP (HCF, 4-20mA + digital) | Native Java | Stable (initial read, cmd 0/1/3/13) | (planned) |
DNP3 | DNP3 (IEEE 1815, power utility) | Native Java | Stable (initial read, G1/G30) | (planned) |
IEC61850 | IEC 61850 MMS (substation) | Native Java (full ISO stack) | Stable (read+write + BRCB/URCB reporting) | IEC 61850 |
SECSGEM | SECS/GEM HSMS (semiconductor) | Native Java | Initial (HSMS handshake — SECS-II body in a later phase) | (planned) |
CANOPEN | CANopen (machinery) | Native Java (SDO expedited, CAN-over-TCP) | Stable (read-only, TCP/20200) | CANopen |
DALI | DALI (lighting, building) | (HW master dependent — stub) | Guidance only (OPC UA / Modbus bridge recommended) | DALI |
IO_LINK | IO-Link (sensor master) | (HW master dependent — stub) | Guidance only (PROFINET/EtherNet-IP bridge) | IO-Link |
Other / External Interfaces
opc_type | Protocol | Library | Status | Page |
|---|---|---|---|---|
HTTP | HTTP (external push or polling) | Proprietary | Stable, write supported | HTTP |
MOTOR_SENSE | KOPENS Motor Sense | Proprietary (separate jar, loaded by reflection) | Stable | HTTP / Motor Sense |
ROS2 | ROS 2 (robots/AGV) | rosbridge_suite (JSON over WebSocket) | Topic subscription read (full implementation) | ROS 2 |
DELTAV | Emerson DeltaV (DCS) | (proprietary — stub) | Guidance only (must go through DeltaV OPC UA) | DeltaV |
Category summary — General-purpose PLC 8 / US 2 / Europe & building 4 / Japan 3 / Industrial communication & domain 10 / Other 4 = 29
opc_type. Pages marked "(planned)" will be split out into separate driver documents later; for now, theplc_address/formatrules are covered by the developer notes and the javadoc of theprotocol/<proto>/package in the source.
Common OPC Registration Form
Fields shared by every protocol when registering from the UI or via POST /api/v1/opc:
| Field | Meaning | Example |
|---|---|---|
opc_id | Unique ID within the gateway | OPC_UA_Kepware |
opc_name | Display name | Kepware OPC-UA |
opc_type | Protocol type (see table above) | OPCUA |
opc_agent_ip | Target host IP | 192.168.0.40 |
opc_agent_port | Target port | 49320 |
site_id | Site ID | SITE_00001 (auto-filled) |
auto_collect | Auto-start on boot | true/false |
timecycle | Collection interval (ms) | 1000 |
options | Protocol-specific extra options (Map) | {"username":"kopens","password":"***"} |
The key names in options differ per protocol. A detailed key table is provided on each driver page.
Common Tag Registration Form
Single-entry registration fields for tag_list[] or POST /api/v1/opc/{opcId}/tag:
| Field | Meaning | Example |
|---|---|---|
tag_id | Unique tag ID (usually <OPC_ID>_TAG_<n>) | OPC_LS_XBM_0001_TAG_00001 |
tag_name | Display name | Pump1.RPM |
plc_address | Actual PLC address (format varies by protocol) | D00309 (LS) / ns=2;s=Sine1 (OPCUA) |
data_type | Free-form edge string (Float, Integer, Boolean, String, etc.) | Integer |
format | Memory width / representation format (optional) | DW (LS) / STR[10] |
description | Description | 펌프 회전수 |
fomula | Post-processing formula (optional, e.g. x * 0.1) | x / 10 |
Detailed plc_address and format rules are covered on each driver page.