Southbound Drivers

Device Drivers

Design docs, test reports, and optimization notes for edgeCore southbound drivers — Modbus, BACnet, OPC UA, S7, EtherNet/IP, Omron FINS, SNMP, IEC 104, DL/T645, Mitsubishi MC, Profinet IO, KNXnet/IP, and more.

Driver Support Matrix

Protocol Registry Key Status Read Write Scan / Discover ConnectionManager Unit Tests (-short cov)
Modbus TCP/RTU modbus-tcp, modbus-rtu, modbus-rtu-over-tcp Production Yes Yes Yes 65.9%
BACnet IP bacnet-ip Production Yes Yes Scan + ScanObjects Partial 66.1%
OPC UA Client opc-ua Production Yes Yes Scan + ScanObjects Yes 47.9%
Siemens S7 s7 Production Yes Yes Yes 61.3%
EtherNet/IP ethernet-ip Production Yes Yes Yes 62.2%
Omron FINS omron-fins Production Yes Yes Yes 43.3%
SNMP v2c/v3 snmp Production Yes Yes ScanObjects Yes 63.7%
IEC 60870-5-104 iec60870-5-104 M1 delivered Yes Yes (single command) Yes 60.2%
DL/T645-2007 dlt645 Production Yes Yes Yes 76.5%
Mitsubishi SLMP mitsubishi-slmp Production Yes Yes Yes 70.7%
Profinet IO profinet-io Production Yes Yes Yes 55.9%
KNXnet/IP knxnet-ip Production Ready Yes Yes Gateway Discovery Yes 77.2%
EtherCAT ethercat M1 Delivered PDO + SDO PDO + SDO Yes Yes 87.8%

ConnectionManager (shared component): 87.4% · Main driver package 22/22 PASS (2026-07-12)


Key Configuration Parameters

Driver Main Config Keys
Modbus ip, port, slaveId, timeout, connection type (TCP/RTU/RTU-over-TCP)
BACnet ip, port, deviceId, broadcast interface, object instance
OPC UA endpoint, security policy/mode, credentials, subscription interval
S7 ip, port, rack, slot, PLC model (200Smart/1200/1500/300/400)
EtherNet/IP ip, port, slot, tag path, connection type
Omron FINS plcIP/ip, plcPort/port, timeout, src/dst node addresses, TCP/UDP mode
Mitsubishi MC ip, port, frame_type, network_no, station_no, timeout
Profinet IO local_interface, timeout, simulation; device ip, port, slot, subslot
KNXnet/IP ip, port, mode (TCP/UDP), discovery, discovery_timeout, discovery_multicast
SNMP snmpVersion, targetIP, community (v2c), USM auth/priv (v3), maxBulkSize
DLT645 connectionType (serial/tcp), port, ip, baudRate, timeout, meter address + DI
IEC 104 ip, port, commonAddress, T0–T3 timers, general call interval

Connection Management (2026-06)

Shared ConnectionManager (internal/driver/connection_manager.go):

  • State machine: Disconnected → Connecting → Connected → Retrying → Dead
  • Exponential backoff with jitter and cooldown (max 1 hour)
  • Collection health: successful read = healthy; no separate heartbeat
  • Low-frequency probe when scan interval exceeds 3× threshold

Supported: S7, Modbus, EtherNet/IP, OPC UA, FINS, SNMP, DL/T645, Profinet IO, KNXnet/IP


Test Coverage

Full report: Southbound Driver Test Report

CGO_ENABLED=0 go test ./internal/driver/modbus ./internal/driver/bacnet ... -count=1 -cover

Last run (2026-07-04): all 21 main driver packages PASS under -short; extended coverage_test.go across drivers. Integration/manual tags documented in the test report.