Skip to main content

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.
Write support varies by driver

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_typeProtocol / EquipmentImplementationWriteDefault PortPage
LSLS XGI/XBC/XBM (FEnet)In-house Java✅—LS
MELSECMitsubishi MELSEC (MC)iot-communication✅—MELSEC
S7Siemens S7-300/400/1200/1500iot-communication✅—S7
MODBUSModbus TCPIn-house Java✅502Modbus
MODBUSUDPModbus UDPIn-house Java (MBAP-over-UDP)✅502Modbus
MODBUS_RTUModbus RTUIn-house Java (RTU-over-TCP)✅502Modbus RTU
OPCUAOPC UAEclipse Milo 1.1.8✅—OPC UA

US PLC Series​

opc_typeProtocol / EquipmentImplementationWriteDefault PortPage
GEGE SRTP / GE FanucIn-house Java (Pure Socket)✅18245GE
EIPEtherNet/IP · CIP (Symbolic Tag)In-house Java (ENIP/CIP)✅44818EtherNet/IP
LOGIXAB ControlLogix / CompactLogixEIP Alias — Same driver✅44818EtherNet/IP
AB-ETHAllen-Bradley CSP/PCCC (SLC·PLC-5)In-house Java❌2222AB-ETH

Europe / Building Automation​

opc_typeProtocol / EquipmentImplementationWriteDefault PortPage
PROFINETPROFINET (acyclic Read-Implicit)In-house Java❌34964PROFINET
ADSBeckhoff TwinCAT ADSIn-house Java✅48898ADS
BACNETBACnet/IP (ReadProperty)In-house Java❌47808BACnet
KNXNETKNXnet/IP (tunneling)In-house Java✅3671KNXnet
CANOPENCANopen (SDO)In-house Java❌20200CANopen
MBUSM-Bus (Meter)In-house Java⚠10001M-Bus
IEC61850IEC 61850 MMS (Power)In-house Java (full ISO stack)✅102IEC 61850
DALIDALI Lightingstub❌—DALI
IO_LINKIO-Link Masterstub❌—IO-Link
DELTAVEmerson DeltaVstub❌—DeltaV

⚠ Writing for M-Bus only processes slave selection commands, not measured values.

Japan · Taiwan PLC Series​

opc_typeProtocol / EquipmentImplementationWriteDefault PortPage
FINSOmron FINSIn-house Java✅9600FINS
MEWTOCOLPanasonic MEWTOCOLIn-house Java✅9094MEWTOCOL
FATEKFatekIn-house Java✅500Fatek
KEYENCE_KVKeyence KV-7500/8000 Host LinkIn-house Java (ASCII)✅8501Connection Type
CCLINK_IECC-Link IE Fieldstub❌—CC-Link IE
Keyence KV is not yet verified with actual equipment

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_typeProtocol / EquipmentImplementationWriteDefault PortPage
SECSGEMSEMI SECS/GEM (HSMS)In-house Java✅5000SECS/GEM
HARTHART-IPIn-house Java✅5094HART
DNP3DNP3 (unsolicited support)In-house Java✅20000DNP3
IEC104IEC 60870-5-104 Power TelecontrolIn-house Java❌2404Connection Type
FOCASFANUC CNC (FOCAS)Native Bridge + C++ collector❌8193FOCAS
MTCONNECTMTConnect CNC / Machine ToolIn-house Java (HTTP/XML)❌5000Connection Type
OPOpen Protocol (Tightening Tool)Pure Java✅4545Open Protocol
NMEANMEA 0183 (Ship/GPS)In-house Java❌10110NMEA
IEC61162_450Marine Bridge NMEA over UDP MulticastIn-house Java❌60004 (UDP)Connection Type
MOTOR_SENSEMotorSense Vibration/Current SensorHTTPS REST (Separate jar)❌—Connection Type

Messaging / External Interface​

opc_typeProtocol / EquipmentImplementationWriteDefault PortPage
HTTPHTTP Reception (Cache bind)In-house Java(Via bind)—HTTP
WEBSOCKETWebSocketIn-house Java✅80 / 443WebSocket
MQTT_CLIENTMQTT ClientEclipse Paho✅1883 / 8883MQTT Client
SPARKPLUG_BSparkplug BIn-house protobuf✅1883Sparkplug B
KAFKAApache Kafkakafka-clients 4.1.2✅9092Kafka
COAPCoAPCalifornium 3.13.0✅5683 / 5684CoAP
ROS2ROS 2 (rosbridge WebSocket)In-house Java❌9090 / 9443ROS 2
SNMPSNMP 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:

FieldMeaningExample
opc_idUnique ID within gatewayOPC_UA_Kepware
opc_nameDisplay NameKepware OPC-UA
opc_typeProtocol Type (Refer to table above)OPCUA
opc_agent_ipTarget Host IP192.168.0.40
opc_agent_portTarget Port49320
site_idSite IDSITE_00001 (Auto-filled)
auto_collectAuto-start on boottrue/false
timecyclecollection period (ms)1000
optionsAdditional 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:

FieldMeaningExample
tag_idTag Unique ID (Usually <OPC_ID>_TAG_<n>)OPC_LS_XBM_0001_TAG_00001
tag_nameDisplay NamePump1.RPM
plc_addressActual PLC address (Protocol-specific format)D00309 (LS) / ns=2;s=Sine1 (OPCUA)
data_typeEdge free string (Float, Integer, Boolean, String, etc.)Integer
formatMemory width / Representation format (Optional)DW (LS) / STR[10]
descriptionDescription펌프 회전수
fomulaPost-processing formula (Optional, e.g., x * 0.1)x / 10

Detailed plc_address and format rules are covered on each driver page.


Registration Flow (REST)​