The capability to import and export standard CIM RDF/XML (IEC CIM version 16 / 17) files exists within the software. The "Using Import/Export" articles describe how to operate the import/export functionality, whereas this article has been written to provide a more technical overview of how the CIM data is being handled. CIM data files hold detailed information for electric power transmission and distribution systems, so the aim of this article is to capture the high level requirements, design details and limitations of the CIM PLEXOS tool.
The tool has two core modules, which are:
The following are terms and/or acronyms that are relevant to this document.
Abbreviation | Description |
IEC | International Electro-technical Commission |
CIM | Common Information Model |
RDF | Resource Description Framework |
XML | Xtensible Markup Language |
The following points list the actions of the importer:
The following points highlight important features of the Import tool:
The following points list the actions of the exporter:
The following points highlight aspects of the Export tool:
Currently, the CIM importer has been designed to target and address the transmission data. However, this is customizable by modifying the "mapping" json file, which will be described in more detail below in the advanced section (see below).
The key data that is supported are described here, in a simplified mapping table:
PLEXOS Object | PLEXOS Property | CIM Object | CIM Field |
Node | - | TopologicalNode | - |
Line | - | ACLineSegment | - |
Resistance | r | ||
Reactance | x | ||
Susceptance | bch | ||
Line | - | Line | - |
Line | - | Switch | - |
Region | - | GeographicalRegion | - |
Zone | - | SubGeographicalRegion | - |
Transformer | - | PowerTransformer | - |
Generator | - | HydroGeneratingUnit | - |
Generator | - | NuclearGeneratingUnit | - |
Generator | - | WindGeneratingUnit | - |
Generator | - | ThermalGeneratingUnit | - |
Generator | - | GenerationUnit | - |
Fixed Load | baseP | ||
Heat Rate | efficiency | ||
Initial Generation | initialP | ||
Max Ramp Down | lowerRampRate | ||
Rating | maxEconomicP | ||
Max Capacity | maxOperatingP | ||
Min Down Time | minimumOffTime | ||
Min Stable Level | minOperatingP | ||
Marginal Loss Factor | penaltyFactor | ||
Max Ramp Up | raiseRampRate | ||
Start Cost | startupCost | ||
Start Cost Time | startupTime | ||
UoS Charge | variableCost | ||
Purchaser | - | EnergyConsumer | - |
The table above lists the object and property mappings, but does not indicate that the relevant memberships are also created. For example, the line objects will of course be connected to the appropriate nodes, so these memberships are handled as expected.
The CIM PLEXOS importer/exporter has pre-defined mappings, which are defined in the cimplexos-mappings.json file, located in the installation folder of PLEXOS.
The mapping is largely converted into the following sections:
Note:
The following snippet provides an example of a straight forward CIM->PLEXOS mapping, e.g. Region.
"printOrder": ["Generator","Purchaser","Region","Zone","Node","Line","Transformer"], "mappings":[ { "cim": "GeographicalRegion", "plexos": "Region", "import": true, "export": true, "printOrder":["Property","CustomColumn"] }]
In this example, a single geographical region is defined, but no other properties. Therefore this is classed as a simple class mapping.
The following snippet provides an example of a more advanced mapping of the object and properties, e.g. Generator.
"printOrder": ["Generator","Purchaser","Region","Zone","Node","Line","Transformer"], "mappings":[ { "cim": "GeneratingUnit", "plexos": "Generator", "importHandler": "cimplexos.handler.import.GeneratingUnitHandler", "exportHandler": "cimplexos.handler.export.GeneratingUnitHandler", "import": true, "export": true, "fields":[ { "cim":"GeneratingUnit.baseP", "plexos":"Fixed Load"}, { "cim":"GeneratingUnit.efficiency", "plexos":"Heat Rate"}, { "cim":"GeneratingUnit.initialP", "plexos":"Initial Generation"}, { "cim":"GeneratingUnit.lowerRampRate", "plexos":"Max Ramp Down"}, { "cim":"GeneratingUnit.maxEconomicP", "plexos":"Rating"}, { "cim":"GeneratingUnit.maxOperatingP", "plexos":"Max Capacity"}, { "cim":"GeneratingUnit.minimumOffTime", "plexos":"Min Down Time"}, { "cim":"GeneratingUnit.minOperatingP", "plexos":"Min Stable Level"}, { "cim":"GeneratingUnit.penaltyFactor", "plexos":"Marginal Loss Factor"}, { "cim":"GeneratingUnit.raiseRampRate", "plexos":"Max Ramp Up"}, { "cim":"GeneratingUnit.startupCost", "plexos":"Start Cost"}, { "cim":"GeneratingUnit.startupTime", "plexos":"Start Cost Time"}, { "cim":"GeneratingUnit.variableCost", "plexos":">UoS Charge"} ], "printOrder":["Generator_Nodes","Property","CustomColumn"] }]
This example show the mapping for a generator object, however this has to use a custom "import/export handler", as there is a need to manipulate and generate additional import information. This also details a number of fields, which are directly converted into the PLEXOS equivalent.
The following assumptions and constraints are applicable to this tool: