Zum Hauptinhalt springen

IEC 61850 MMS Treiber

Überblick

IEC 61850 MMS (Manufacturing Message Specification) — internationaler Standard für die Automatisierung von Kraftwerken, Umspannwerken, ESS und Windparks. Läuft auf dem vollständigen ISO-Stack (TPKT → COTP → ISO Session → ISO Presentation → ACSE → MMS). Eigene Java-ASN.1/BER-Implementierung (keine externen Abhängigkeiten).

PositionWert
opc_typeIEC61850
Implementierungsklasseplantpulse.driver.protocol.iec61850.IEC61850Driver
BibliothekEigene Java-Implementierung (keine externen Abhängigkeiten, ASN.1 BER selbst geschrieben)
VererbungBaseProtocolDriver
readOK (ReadRequest → AccessResult(MmsValue), Polling)
writeOK (isWriteSupported() = true)
Sicherheitkeine (IEC 62351 nicht implementiert)
Standardport102 (TCP)
Report-Unterstützung (BRCB/URCB)

Zusätzlich zum Polling-read wird für die über report-control-blocks angegebenen RCBs bei jeder Verbindung RptEna=true (+ optional GI=true) per MMS write gesetzt und so das Report-Abonnement automatisch wiederhergestellt. InformationReport (unsolicited push) wird über den lastReportByVariable-Cache verarbeitet; read liefert nur Cache-Einträge, die innerhalb der TTL (report-cache-ttl-ms) frisch sind — bei Ablauf erfolgt ein Polling-Fallback.


Klassenstruktur (von oben nach unten)

TCP
└ ISO TPKT (RFC 1006) — Tpkt.java
└ ISO COTP (Class 0) — Cotp.java
└ ISO Session — IsoSession.java
└ ISO Presentation — IsoPresentation.java
└ ACSE — Acse.java
└ MMS (ASN.1 BER) — MmsPdu.java + Asn1.java + MmsAddress.java

Verbindungssequenz (connect()): COTP CR → CC → Session CONNECT (Kapselung von Presentation CP / ACSE AARQ / MMS Initiate-Request) → AARE → Dekodierung und Prüfung der MMS Initiate-Response. Konstante DEFAULT_TPDU_SIZE = 0x0B (2048 Byte, IEC 61850-Empfehlung). Es wird nur eine Sitzung verwendet — transact() serialisiert Transaktionen über synchronized und prüft die invokeID der Antwort (Abweichung = stale reject + Socket-Invalidierung).


OPC-Registrierungsoptionen

SchlüsselStandardBeschreibung
opc_agent_ip / opc_agent_port102 bei Port 0IED-IP / Port
options.connect-timeout5000 msTCP-Connect-Timeout
options.read-timeout5000 msread-SO-Timeout
options.enable-information-reportfalseBRCB/URCB-Reports aktivieren
options.report-control-blocks(keiner)kommagetrennte Liste von RCB-Referenzen — z. B. LD0/LLN0$BR$brcb01 (Punktnotation zulässig)
options.report-gitruedirekt nach RCB-Aktivierung General Interrogation per GI=true write (vollständiger erneuter Empfang der aktuellen Werte)
options.report-cache-ttl-ms30000 msFrischigkeits-TTL des Report-Caches — bei Ablauf Polling-Fallback. <=0 deaktiviert den Ablauf

Format von Tag plc_address

MmsAddress akzeptiert sowohl die LD/LN.DO.DA[$FC]-Notation als auch die Wire-Notation (LD/LN$FC$DO$DA). Der Schrägstrich (/) trennt Domain und Item, der Punkt (.) wird bei der Wire-Umwandlung durch $ ersetzt.

NotationBedeutung
IED1Server/MMXU1.MX.A.phsADomain IED1Server / Item MMXU1$MX$A$phsA
IED1Server/MMXU1$MX$A$phsAWire-Notation identisch
LD1/LLN0.Mod.stValLD LD1, LN LLN0, DO Mod, DA stVal

Die FC (Functional Constraint) wird entweder über $FC angegeben oder durch Angabe der Standardposition ($MX / $ST usw.) notiert.


Read / Write

  • read: buildReadRequesttransact() (synchronized) → parseReadResponseAccessResult (MmsValue) wird als Zeichenkette zurückgegeben. Trifft ein InformationReport interleaved während des Wartens auf die Antwort ein, wird er im Cache abgelegt und weiter gewartet. Nach 3 aufeinanderfolgenden read-Fehlern (READ_FAIL_STREAK_LIMIT) fällt connected ab — die Edge-Wiederherstellung (PLCRecovery) wird ausgelöst.
  • write: isWriteSupported() = true. Mapping data_type → MmsValue:
Alias data_typeMmsValue
boolean / boolbool
integer / int / long / short / byteinteger (long-Parsing)
unsigned / uint / ulongunsigned
float / double / real / floating-pointfloating
octet-string / octet / bytesoctet
visible-string / string / "" / varcharvisible
mms-string / utf8mmsString
sonstigevisible (Fallback)

Der data-access-error-Code wird als WriteResponse.errorCode ausgegeben.


Nicht unterstützte Bereiche

  • GOOSE / Sampled Values (Multicast) — erfordert einen separaten Raw-Ethernet-Stack.
  • SCL-Parsing (.icd / .scd) — keine automatische Erkennung des Datenmodells, manuelle Eingabe durch den Benutzer erforderlich.
  • IEC 62351-3/-6 — kein TLS, keine Authentifizierung, kein Integritätsschutz.
Reifegrad auf Fixture-Niveau

Die ASN.1-BER-Dienstprogramme dieser Implementierung sind spezifikationsgenau, die vollständige Wire-Level-Kompatibilität mit realen IEDs ist jedoch einer späteren Phase vorbehalten. Vor dem Produktiveinsatz wird eine ausreichende Verifizierung empfohlen.


Referenzen

  • IEC 61850-7-2 (ACSI), -8-1 (Mapping auf MMS), ISO 9506 (MMS). ASN.1 BER — ITU-T X.690.
  • Code: plantpulse-edge-driver/src/plantpulse/driver/protocol/iec61850/.