SmartGridware® Java MMS Stack SDK
MMS Protocol Stack Java Software Development Kit for IEC 61850
Product Overview
The SmartGridware® Java MMS Stack SDK is a standalone platform-independent software development kit and API which implements the core message set from the Manufacturing Message Specification (MMS) required for implementation of most client and server MMS applications for IEC 61850. The API provides fine grained control over MMS messaging for protocol level application development. May be used to develop protocol test tools and simple query applications up to full functioned IEC 61850 client and server applications.
Product Features
Some of the general features of the SmartGridware® Java MMS Stack SDK are:
- 100% Java (Java 1.4 SDK or newer, uses no JNI)
- intuitive, easy to use API
- Supports both client and server MMS application development
- Supports both initiator/responder connection modes
- Runs in the application space (no separate stack processes)
- Inter-operable with all 3rd party OSI over RFC1006 based stacks
- Includes the OSI stack, no 3rd party stack required
Supported Standards
The functionality provided by the SmartGridware® Java MMS Stack SDK is implemented in compliance with the following standards (click to view):
IEC 61850 Upper Layer Protocol Support
- IEC 61850-8-1 Client/Server Services (MMS) (6.2.1)
- IEC 61850-8-1 Client/Server A-Profile (6.2.2)
- IEC 61850-8-1 TCP/IP T-Profile (RFC1006) (6.2.3)
Manufacturing Message Specification (MMS) Standards
- ISO 9506-1: Manufacturing Message Specification - Service Definitions
- ISO 9506-2: Manufacturing Message Specification - Protocol Definitions
OSI Stack and Lower Layer Standards
- RFC 1006: OSI over TCPIP (CMIP/OSI over TCP/IP)
- ITU-T X.214 | ISO/IEC 8072: OSI - Transport Service Definition
- ITU-T X.224 | ISO/IEC 8073: OSI - Transport Protocol Specification
- ITU-T X.215 | ISO/IEC 8326: OSI - Session Service Definition
- ITU-T X.225 | ISO/IEC 8327: OSI - Session Protocol Specification
- ITU-T X.216 | ISO/IEC 8822: OSI - Presentation Service Definition
- ITU-T X.226 | ISO/IEC 8823-1: OSI - Presentation Protocol Specification
- ITU-T X.217 | ISO/IEC 8649: ACSE Service
- ITU-T X.227 | ISO/IEC 8650-1: ACSE Protocol
- ITU-T X.680 | ISO/IEC 8824-1..4: Abstract Syntax Notation One (ASN.1)
- ITU-T X.690 | ISO/IEC 8825-1: ASN.1 Encoding Rules (BER/DER/CER)
MMS Stack Examples
The following examples show some common usage scenarios of the SmartGridware® Java MMS Stack API (click to view):
MMS Stack API Client Initialization and Connect
// -- // -- Create the MMS API // -- MMSAPI mms_api = new MMSAPI(); //-- uri format: // rfc1006://host[:port]/tsel/ssel/psel/ap-title/aeq[?auth={auth-str} String remote_uri =
"rfc1006://" + host_port +
"/0x0001/0x0001/0x00000001/1,1,999,1,1/12" + "?auth=-user#me,-pass#mypass"; System.out.println("CONNECTING TO: " + remote_uri); // -- // -- connect to the remote MMS server // -- MMS mms = mms_api.connect(remote_uri);
MMS GetNameList Example
List name_list = new Vector(); // -- get the names of all LDs in the IED MMS_GetNameList_Req request = new MMS_GetNameList_Req(ObjectClass.domain, ObjectScope.vmdSpecific); do { // -- send the request MMS_GetNameList_PendingRequest pr = mms.send(request, 30); // -- wait for the response and return it MMS_GetNameList_Rsp rsp = pr.rsp(); // -- add names t name_list.addAll(rsp.getIdentifiers()); // -- returns a non-null request if isMore is true request = pr.newContinuationRequest(); } while(request != null);
MMS Read Example
// -- ObjectName target for LD/VariableName ObjectName obj_name = ObjectName.Domain("DynDevice", "LLN0$NamPlt"); // -- create the MMS-Read request for the target LD/variable MMS_Read_Req read_req = new MMS_Read_Req(target); // -- send the request, 30 second timeout MMS_Read_PendingRequest pr = mms.send(read_req, 30); // -- block for and return the MMS-Read response MMS_Read_Rsp rsp = pr.rsp(); // -- check for error if (!rsp.isResult()) { // -- handle the error return; } // -- now get the actual Data instance from the response List<AccessResult> result_list = rsp.getAccessResultList(); AccessResult result = result_list.get(0); Data data = result.getData(); // -- Now you can access the data retrieved for tha variable
MMS GetDataDefinitions Example
// -- Create the target object name ObjectName target = ObjectName.Domain("DynDevice1", "LLN0"); // -- Create the request to get the data definitions MMS_GetVariableAccessAttributes_Req var_request = new MMS_GetVariableAccessAttributes_Req(target); // -- send the request, block, and return the response MMS_GetVariableAccessAttributes_Rsp var_rsp = mms.send(var_request, 30).rsp(); // -- check to verify valid result if (!var_rsp.isResult()) { System.out.println("ERROR: " + var_rsp); return; } // -- TypeDesc structure contains the type definition TypeDesc type_desc = var_rsp.getTypeDescription(); System.out.println(target + " == " + type_desc);
Platform Requirements
Java Platform Requirements:
- Java 1.5: JDK 1.5 or newer
Operating System Requirements:
Any operating system which supports the Java versions listed in the Java Platform Requirements section above. Some of the operating systems commonly used with SmartGridware® products are:
- Microsoft Windows (95,98,XP,NT,2000,7,8)
- Linux (Redhat, etc)
- Hewlett Packard HP-UX
- Sun Solaris (SPARC & x86)
- IBM AIX
- Apple MacOS X
Hardware Requirements:
Minimum Hardware
- Physical memory (RAM): 256MB
- Disk space: 10MB (distribution package size)