본문으로 건너뛰기

IEC 61850 MMS 드라이버

개요

IEC 61850 MMS (Manufacturing Message Specification) — 발전소 / 변전소 / ESS / 풍력단지 자동화의 국제 표준. ISO 풀 스택 (TPKT → COTP → ISO Session → ISO Presentation → ACSE → MMS) 위에서 동작. 자체 자바 ASN.1/BER 구현(외부 의존 없음).

항목
opc_typeIEC61850
구현 클래스plantpulse.driver.protocol.iec61850.IEC61850Driver
라이브러리자체 자바 구현 (외부 의존 없음, ASN.1 BER 자체 작성)
상속BaseProtocolDriver
readOK (ReadRequest → AccessResult(MmsValue), 폴링)
writeOK (isWriteSupported() = true)
보안없음 (IEC 62351 미구현)
기본 포트102 (TCP)
리포트(BRCB/URCB) 지원

폴링 read 에 더해, report-control-blocks 로 지정한 RCB 에 대해 연결 시마다 RptEna=true(+옵션 GI=true)를 MMS write 해 리포트 구독을 자동 복원합니다. InformationReport(unsolicited push)는 lastReportByVariable 캐시로 처리하고, read 는 TTL(report-cache-ttl-ms) 이내의 신선한 캐시만 서빙 — 만료 시 폴링 폴백.


클래스 구조 (위에서 아래로)

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

연결 시퀀스(connect()): COTP CR → CC → Session CONNECT(Presentation CP / ACSE AARQ / MMS Initiate-Request 캡슐화) → AARE → MMS Initiate-Response 디코드 검증. 상수 DEFAULT_TPDU_SIZE = 0x0B(2048 byte, IEC 61850 권장). 세션은 한 개만 사용 — transact() 가 synchronized 로 트랜잭션을 직렬화하고 응답 invokeID 를 검증(불일치 = stale reject + 소켓 무효화).


OPC 등록 옵션

기본설명
opc_agent_ip / opc_agent_portport 0 이면 102IED IP / 포트
options.connect-timeout5000 msTCP connect 타임아웃
options.read-timeout5000 msread SO 타임아웃
options.enable-information-reportfalseBRCB/URCB 리포트 활성화 여부
options.report-control-blocks(없음)콤마 구분 RCB 참조 목록 — 예: LD0/LLN0$BR$brcb01 (점 표기 허용)
options.report-gitrueRCB 활성화 직후 GI=true write 로 general interrogation(최신값 전량 재수신)
options.report-cache-ttl-ms30000 ms리포트 캐시 신선도 TTL — 만료 시 폴링 폴백. <=0 은 만료 비활성

태그 plc_address 형식

MmsAddressLD/LN.DO.DA[$FC] 표기와 wire 표기(LD/LN$FC$DO$DA) 둘 다 허용합니다. 슬래시(/)는 domain/item 구분, 점(.)은 wire 변환 시 $ 로 치환됩니다.

표기의미
IED1Server/MMXU1.MX.A.phsA도메인 IED1Server / Item MMXU1$MX$A$phsA
IED1Server/MMXU1$MX$A$phsAwire 표기 동일
LD1/LLN0.Mod.stValLD LD1, LN LLN0, DO Mod, DA stVal

FC(Functional Constraint)는 $FC 로 명시하거나 표준 위치($MX / $ST 등)를 포함해 표기합니다.


Read / Write

  • read: buildReadRequesttransact()(synchronized) → parseReadResponseAccessResult(MmsValue) 를 문자열로 반환. InformationReport 는 응답 대기 중 인터리브로 들어와도 캐시 처리 후 계속 대기. 연속 read 실패 3회(READ_FAIL_STREAK_LIMIT)면 connected 하강 — 엣지 복구(PLCRecovery) 발동.
  • write: isWriteSupported() = true. data_type → MmsValue 매핑:
data_type 별칭MmsValue
boolean / boolbool
integer / int / long / short / byteinteger (long 파싱)
unsigned / uint / ulongunsigned
float / double / real / floating-pointfloating
octet-string / octet / bytesoctet
visible-string / string / "" / varcharvisible
mms-string / utf8mmsString
그 외visible (폴백)

data-access-error 코드는 WriteResponse.errorCode 로 노출됩니다.


미지원 영역

  • GOOSE / Sampled Values (multicast) — 별도 raw-Ethernet 스택 필요.
  • SCL (.icd / .scd) 파싱 — 데이터 모델 자동 발견 불가, 사용자가 수동 입력.
  • IEC 62351-3/-6 — TLS / 인증 / 무결성 보호 없음.
fixture-level 성숙도

본 구현은 ASN.1 BER 유틸리티가 spec 정확하나, 실 IED 와의 wire-level 완전 호환은 차후 phase 입니다. 운영 적용 전 충분한 검증을 권장합니다.


참고

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