Driver Overview
This is a list of industrial protocols supported by PlantPulse Edge. There are 44 types based on product specifications opc_type (43 drivers + 1 alias).
Each driver is implemented in the plantpulse.driver.protocol.<proto> package within plantpulse-edge-driver.jar, and ProtocolDriverFactory.createDriver(opc_type) creates an instance by referencing the APP_OPC.OPC_TYPE string.
Implementation Categories
- In-house Java Implementation (Majority) — Protocol framing is written directly on top of pure Java sockets. There are no external native or JNI dependencies. As of 2026-07, the Modbus family, PROFINET, AB-ETH, BACnet, KNXnet, and CANopen were rewritten as native, completely removing the Apache PLC4X dependency.
- External Libraries — MELSEC and S7 use
iot-communication, while OPC UA uses Eclipse Milo. - Native Bridge — For FOCAS, a C++ collector is launched as a child process and read via TCP/JSON.
- 4 Types of Stubs — CC-Link IE, DALI, IO-Link, and DeltaV. These guide configurations where a gateway bridges to a higher-level protocol rather than reading directly. The determination criterion is whether it inherits from
AbstractStubDriver.
The Write column in the table below is the authoritative source. Attempts to write to drivers that do not support writing will be rejected.
Supported Protocols List
General PLC / Common Protocols
opc_type | Protocol / Equipment | Implementation | Write | Default Port | Page |
|---|---|---|---|---|---|
LS | LS XGI/XBC/XBM (FEnet) | In-house Java | ✅ | — | LS |
MELSEC | Mitsubishi MELSEC (MC) | iot-communication | ✅ | — | MELSEC |
S7 | Siemens S7-300/400/1200/1500 | iot-communication | ✅ | — | S7 |
MODBUS | Modbus TCP | In-house Java | ✅ | 502 | Modbus |
MODBUSUDP | Modbus UDP | In-house Java (MBAP-over-UDP) | ✅ | 502 | Modbus |
MODBUS_RTU | Modbus RTU | In-house Java (RTU-over-TCP) | ✅ | 502 | Modbus RTU |
OPCUA | OPC UA | Eclipse Milo 1.1.8 | ✅ | — | OPC UA |
US PLC Series
opc_type | Protocol / Equipment | Implementation | Write | Default Port | Page |
|---|---|---|---|---|---|
GE | GE SRTP / GE Fanuc | In-house Java (Pure Socket) | ✅ | 18245 | GE |
EIP | EtherNet/IP · CIP (Symbolic Tag) | In-house Java (ENIP/CIP) | ✅ | 44818 | EtherNet/IP |
LOGIX | AB ControlLogix / CompactLogix | EIP Alias — Same driver | ✅ | 44818 | EtherNet/IP |
AB-ETH | Allen-Bradley CSP/PCCC (SLC·PLC-5) | In-house Java | ❌ | 2222 | AB-ETH |
Europe / Building Automation
opc_type | Protocol / Equipment | Implementation | Write | Default Port | Page |
|---|---|---|---|---|---|
PROFINET | PROFINET (acyclic Read-Implicit) | In-house Java | ❌ | 34964 | PROFINET |
ADS | Beckhoff TwinCAT ADS | In-house Java | ✅ | 48898 | ADS |
BACNET | BACnet/IP (ReadProperty) | In-house Java | ❌ | 47808 | BACnet |
KNXNET | KNXnet/IP (tunneling) | In-house Java | ✅ | 3671 | KNXnet |
CANOPEN | CANopen (SDO) | In-house Java | ❌ | 20200 | CANopen |
MBUS | M-Bus (Meter) | In-house Java | ⚠ | 10001 | M-Bus |
IEC61850 | IEC 61850 MMS (Power) | In-house Java (full ISO stack) | ✅ | 102 | IEC 61850 |
DALI | DALI Lighting | stub | ❌ | — | DALI |
IO_LINK | IO-Link Master | stub | ❌ | — | IO-Link |
DELTAV | Emerson DeltaV | stub | ❌ | — | DeltaV |
⚠ Writing for M-Bus only processes slave selection commands, not measured values.
Japan · Taiwan PLC Series
opc_type | Protocol / Equipment | Implementation | Write | Default Port | Page |
|---|---|---|---|---|---|
FINS | Omron FINS | In-house Java | ✅ | 9600 | FINS |
MEWTOCOL | Panasonic MEWTOCOL | In-house Java | ✅ | 9094 | MEWTOCOL |
FATEK | Fatek | In-house Java | ✅ | 500 | Fatek |
KEYENCE_KV | Keyence KV-7500/8000 Host Link | In-house Java (ASCII) | ✅ | 8501 | Connection Type |
CCLINK_IE | CC-Link IE Field | stub | ❌ | — | CC-Link IE |
The wire format was implemented based on documentation and has not been confirmed with actual equipment. Compare values via test connection before field application.
Industrial Communication / Domain Specific
opc_type | Protocol / Equipment | Implementation | Write | Default Port | Page |
|---|---|---|---|---|---|
SECSGEM | SEMI SECS/GEM (HSMS) | In-house Java | ✅ | 5000 | SECS/GEM |
HART | HART-IP | In-house Java | ✅ | 5094 | HART |
DNP3 | DNP3 (unsolicited support) | In-house Java | ✅ | 20000 | DNP3 |
IEC104 | IEC 60870-5-104 Power Telecontrol | In-house Java | ❌ | 2404 | Connection Type |
FOCAS | FANUC CNC (FOCAS) | Native Bridge + C++ collector | ❌ | 8193 | FOCAS |
MTCONNECT | MTConnect CNC / Machine Tool | In-house Java (HTTP/XML) | ❌ | 5000 | Connection Type |
OP | Open Protocol (Tightening Tool) | Pure Java | ✅ | 4545 | Open Protocol |
NMEA | NMEA 0183 (Ship/GPS) | In-house Java | ❌ | 10110 | NMEA |
IEC61162_450 | Marine Bridge NMEA over UDP Multicast | In-house Java | ❌ | 60004 (UDP) | Connection Type |
MOTOR_SENSE | MotorSense Vibration/Current Sensor | HTTPS REST (Separate jar) | ❌ | — | Connection Type |
Messaging / External Interface
opc_type | Protocol / Equipment | Implementation | Write | Default Port | Page |
|---|---|---|---|---|---|
HTTP | HTTP Reception (Cache bind) | In-house Java | (Via bind) | — | HTTP |
WEBSOCKET | WebSocket | In-house Java | ✅ | 80 / 443 | WebSocket |
MQTT_CLIENT | MQTT Client | Eclipse Paho | ✅ | 1883 / 8883 | MQTT Client |
SPARKPLUG_B | Sparkplug B | In-house protobuf | ✅ | 1883 | Sparkplug B |
KAFKA | Apache Kafka | kafka-clients 4.1.2 | ✅ | 9092 | Kafka |
COAP | CoAP | Californium 3.13.0 | ✅ | 5683 / 5684 | CoAP |
ROS2 | ROS 2 (rosbridge WebSocket) | In-house Java | ❌ | 9090 / 9443 | ROS 2 |
SNMP | SNMP v2c (Network Equipment/UPS) | In-house Java (BER) | ❌ | 161 (UDP) | Connection Type |
Common OPC Registration Form
Fields shared by all protocols when registering via screen or POST /api/v1/opc:
| Field | Meaning | Example |
|---|---|---|
opc_id | Unique ID within gateway | OPC_UA_Kepware |
opc_name | Display Name | Kepware OPC-UA |
opc_type | Protocol Type (Refer to 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 period (ms) | 1000 |
options | Additional options per protocol (Map) | {"username":"kopens","password":"***"} |
Key names for options vary by protocol. Detailed key tables are provided on each driver page.
Common Tag Registration Form
Single registration fields for tag_list[] or POST /api/v1/opc/{opcId}/tag:
| Field | Meaning | Example |
|---|---|---|
tag_id | Tag Unique ID (Usually <OPC_ID>_TAG_<n>) | OPC_LS_XBM_0001_TAG_00001 |
tag_name | Display Name | Pump1.RPM |
plc_address | Actual PLC address (Protocol-specific format) | D00309 (LS) / ns=2;s=Sine1 (OPCUA) |
data_type | Edge free 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.