SWE CNE File#
Introduction#
The SWE CNE file is the standard RAO output file for the SWE CC process.
The OpenRAO toolbox
allows exporting RAO results in a SWE CNE file using an internal CRAC, a network, an internal RAO result
(containing angle results if the CRAC contains Angle CNECs),
a CimCracCreationContext, and a RAO parameters.
The Java API#
After completing the RAO, the user can export the SWE CNE file using this method of SweCneExporter:
public void exportCne(Crac crac,
CimCracCreationContext cracCreationContext,
RaoResult raoResult, RaoParameters raoParameters,
CneExporterParameters exporterParameters, OutputStream outputStream)
With:
crac: the CRAC object used for the RAO.
cracCreationContext: the CimCracCreationContext object generated during CRAC creation from a native CIM CRAC file.
raoResult: the RaoResult object containing selected remedial actions and flow results, as well as angle results if the CRAC contains Angle CNECs
⚠️ NOTE
The exporter will fail if angle CNECs are present in the CRAC, but the RAO result does not contain angle results.
See how to compute angle results here.raoParameters: the RaoParameters used in the RAO.
exporterParameters: a specific object that the user should define, containing meta-information that will be written in the header of the CNE file:
documentId: document ID to be written in “mRID” field
revisionNumber: integer to be written in “revisionNumber” field
domainId: domain ID to be written in “domain.mRID” field (usually an ENTSO-E EICode)
processType: the ENTSO-E code of the process type, to be written in “process.processType” field:
~~A48~~: Day-ahead capacity determination, used for CORE region (so don’t use it here)
Z01: Day-ahead capacity determination, used for SWE region
senderId: ID of the sender of the CNE document, to be written in “sender_MarketParticipant.mRID” field (usually an ENTSO-E EICode)
senderRole: ENTSO-E code defining the role of the sender of the CNE document, to be written in “sender_MarketParticipant.marketRole.type” field:
A04: system operator
A36: capacity coordinator
A44: regional security coordinator
receiverId: ID of the receiver of the CNE document, to be written in “receiver_MarketParticipant.mRID” field (usually an ENTSO-E EICode)
receiverRole: ENTSO-E code defining the role of the receiver of the CNE document, to be written in “receiver_MarketParticipant.marketRole.type” field. Same value options as senderRole.
timeInterval: time interval of document applicability, to be written in “time_Period.timeInterval” field. It should be formatted as follows: “YYYY-MM-DDTHH:MMZ/YYYY-MM-DDTHH:MMZ” (start date / end date).
Here is a complete example:
// Fetch input data (network, glsk) and parameters
Network network = ...
CimGlskDocument glsk = ...
OffsetDateTime glskOffsetDateTime = ...
LoadFlowParameters loadFlowParameters = ...
RaoParameters raoParameters = ...
// Create CRAC
CimCracCreationContext cracCreationContext = new CimCracCreator().createCrac(...);
Crac crac = cracCreationContext.getCrac();
// Run RAO
RaoResult raoResult = Rao.find(...).run(...)
// Convert glsk to zonal data
ZonalData<'Scalable> scalableZonalData = glsk.getZonalScalable(network);
// Run angle monitoring and update RAO result
MonitoringInput angleMonitoringInput = new MonitoringInput.MonitoringInputBuilder().withCrac(crac).withNetwork(network).withRaoResult(raoResult).withPhysicalParameter(PhysicalParameter.ANGLE).withScalableZonalData(scalableZonalData).build();
RaoResult raoResultWithAngleMonitoring = Monitoring.runAngleAndUpdateRaoResult("OpenLoadFlow", loadFlowParameters, 2, angleMonitoringInput);
// Set CNE header parameters
CneExporterParameters exporterParameters = new CneExporterParameters("DOCUMENT_ID", 1, "DOMAIN_ID",
CneExporterParameters.ProcessType.DAY_AHEAD_CC, "SENDER_ID",
CneExporterParameters.RoleType.REGIONAL_SECURITY_COORDINATOR, "RECEIVER_ID",
CneExporterParameters.RoleType.CAPACITY_COORDINATOR,
"2021-10-30T22:00Z/2021-10-31T23:00Z");
// Export CNE to output stream
OutputStream os = ...
new SweCneExporter().exportCne(crac, cracCreationContext, raoResult, raoParameters, exporterParameters, os);
Contents of the SWE CNE file#
Here is an overview of the general structure of the SWE CNE document, detailed in the following sections:
Header#
The header contains meta-information about the process.
Refer to the JAVA API section for more details.
Example:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<CriticalNetworkElement_MarketDocument xsi:schemaLocation="iec62325-451-n-cne_v2_3.xsd" xmlns="urn:iec62325.351:tc57wg16:451-n:cnedocument:2:3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<mRID>documentId</mRID>
<revisionNumber>3</revisionNumber>
<type>B06</type>
<process.processType>A48</process.processType>
<sender_MarketParticipant.mRID codingScheme="A01">senderId</sender_MarketParticipant.mRID>
<sender_MarketParticipant.marketRole.type>A44</sender_MarketParticipant.marketRole.type>
<receiver_MarketParticipant.mRID codingScheme="A01">receiverId</receiver_MarketParticipant.mRID>
<receiver_MarketParticipant.marketRole.type>A36</receiver_MarketParticipant.marketRole.type>
<createdDateTime>2022-09-28T14:47:09Z</createdDateTime>
<time_Period.timeInterval>
<start>2021-04-02T00:30Z</start>
<end>2021-04-02T01:30Z</end>
</time_Period.timeInterval>
<TimeSeries>
<mRID>CNE_RAO_CASTOR-TimeSeries-1</mRID>
<businessType>B54</businessType>
<curveType>A01</curveType>
<Period>
<timeInterval>
<start>2021-04-02T03:00Z</start>
<end>2021-04-02T04:00Z</end>
</timeInterval>
<resolution>PT60M</resolution>
<Point>
<position>1</position>
...
Remedial action results#
Remedial actions have their own Constraint_Series to report the ones selected by the RAO or by the
monitoring module while using ANGLE as Physical parameter.
The remedial actions’ Constraint_Series all have a B56 businessType.
Example:
<Constraint_Series>
<mRID>542c55e-ac23-49a9-b26f-097081883e7f</mRID>
<businessType>B56</businessType>
<Contingency_Series>
<mRID>Co-1</mRID>
<name>contingency one</name>
</Contingency_Series>
<RemedialAction_Series>
<mRID>RA-19</mRID>
<name>topological remedial action 19</name>
<applicationMode_MarketObjectStatus.status>A20</applicationMode_MarketObjectStatus.status>
</RemedialAction_Series>
<RemedialAction_Series>
<mRID>RA-192@600@</mRID>
<name>HVDC remedial action@600@</name>
<applicationMode_MarketObjectStatus.status>A20</applicationMode_MarketObjectStatus.status>
</RemedialAction_Series>
<RemedialAction_Series>
<mRID>RA-45</mRID>
<name>PST remedial action 45</name>
<applicationMode_MarketObjectStatus.status>A20</applicationMode_MarketObjectStatus.status>
<RegisteredResource>
<mRID codingScheme="A01">pst_in_network@-5@</mRID>
<name>PST remedial action 45</name>
<pSRType.psrType>A06</pSRType.psrType>
<marketObjectStatus.status>A26</marketObjectStatus.status>
<resourceCapacity.defaultCapacity>-5</resourceCapacity.defaultCapacity>
<resourceCapacity.unitSymbol>C62</resourceCapacity.unitSymbol>
<marketObjectStatus.status>A26</marketObjectStatus.status>
</RegisteredResource>
</RemedialAction_Series>
...
mRID#
Random ID, unique in the CNE document.
businessType#
Always B56, to signify that this is a remedial-action Constraint_Series.
Contingency_Series (optional)#
If this tag exists, then this Constraint_Series reports selected automatic or curative remedial actions by the RAO or by the angle monitoring module, after the contingency defined in this tag:
mRID: unique ID of the contingency as it is defined in the native CRAC
name: name of the contingency as it is defined in the native CRAC
RemedialAction_Series#
mRID#
Unique ID of the selected remedial action, as identified in the original CRAC.
💡 NOTE
If it is an HVDC range action, this field is followed by @setpoint@, where “setpoint” is the optimal set-point selected for the HVDC, in megawatts (see example above)
name#
Name of the selected remedial action, as identified in the original CRAC.
💡 NOTE
If it is an HVDC range action, this field is followed by @setpoint@, where “setpoint” is the optimal set-point selected for the HVDC, in megawatts (see example above)
applicationMode_MarketObjectStatus.status#
This tag can have one of these three values:
A18: the remedial action was selected in preventive
A20: the remedial action was selected as automatic
A19: the remedial action was selected in curative
RegisteredResource (optional)#
This tag is only exported for PST remedial actions, to hold their tap values.
mRID#
Unique ID of the remedial action’s PST network element in the network, followed by “@tap@”, where tap is its optimal tap selected by the RAO or by the angle monitoring module.
name#
Name of the selected remedial action, as identified in the original CRAC.
pSRType.psrType#
Only one possible value for now:
A06: remedial action is a PST
resourceCapacity.defaultCapacity#
Optimal tap position for the PST (at instant identified by applicationMode_MarketObjectStatus.status, eventually after contingency identified by Contingency_Series).
resourceCapacity.unitSymbol#
Unit of the tap given in resourceCapacity.defaultCapacity. Only one supported value for now:
C62: dimensionless
marketObjectStatus.status#
Only one supported value for now:
A26: the tap is given in absolute value (not relatively to initial network, nor to previous instant, …)
CNEC results#
CNEC results after RAO are reported in Constraint_Series tags, with businessType value B57.
Example:
<Constraint_Series>
<mRID>0cb4110-02cf-4516-943e-7f717bc1c2b8</mRID>
<businessType>B57</businessType>
<Contingency_Series>
<mRID>Co-175</mRID>
<name>contingency 175</name>
</Contingency_Series>
<AdditionalConstraint_Series>
<mRID>REN-AC-2</mRID>
<businessType>B87</businessType>
<name>Angle-ALTO-LINDOSO-CARTELLE-EXPORT</name>
<quantity.quantity>-39.8</quantity.quantity>
</AdditionalConstraint_Series>
<Monitored_Series>
<mRID>MS-1</mRID>
<name>Branch Paris-Berlin monitored in curative</name>
<RegisteredResource>
<mRID codingScheme="A02">_68c74a71-224a-245f-0b52-eac5045761eb</mRID>
<name>Branch Paris-Berlin</name>
<in_AggregateNode.mRID codingScheme="A02">_7fb8ba77-76a2-7343-b1f9-10d8fb9bdae1</in_AggregateNode.mRID>
<out_AggregateNode.mRID codingScheme="A02">_d5c2a18c-ef2d-10ae-4419-c832c53860b1</out_AggregateNode.mRID>
<Measurements>
<measurementType>A01</measurementType>
<unitSymbol>AMP</unitSymbol>
<positiveFlowIn>A02</positiveFlowIn>
<analogValues.value>270</analogValues.value>
</Measurements>
<Measurements>
<measurementType>A13</measurementType>
<unitSymbol>AMP</unitSymbol>
<positiveFlowIn>A02</positiveFlowIn>
<analogValues.value>2606</analogValues.value>
</Measurements>
</RegisteredResource>
</Monitored_Series>
<Monitored_Series>
<mRID>MS-2</mRID>
<name>Branch Paris-Brussels monitored in curative</name>
...
mRID#
Random ID, unique in the CNE document.
businessType#
One possible value to signify it’s a CNEC result: B57.
Contingency_Series (optional)#
Exists if the CNEC is monitored after a contingency (if the CNEC is preventive, this tag does not exist):
mRID: unique ID of the contingency as it is defined in the native CRAC
name: name of the contingency as it is defined in the native CRAC
⚠️ NOTE
Multiple Contingency_Series can exist, meaning that the following results are valid for all the listed contingencies. Avoiding redundant information allows a more compact file.
Reason (optional)#
When sensitivity computation fails in a given perimeter (in basecase or after a specific contingency identified by Contingency_Series), this tag is present with the following information:
code: “B40”
text: “Load flow divergence”
Then no more results are exported for the failed perimeter.
AdditionalConstraint_Series (optional)#
If angle CNECs are monitored in the actual perimeter (in basecase or after a specific contingency identified by Contingency_Series), this tag contains angle values from the angle monitoring module.
mRID#
Unique ID of the angle CNEC, as defined in the orignal CRAC file.
businessType#
One possible value: B87 (angle monitoring).
name#
Name of the angle CNEC, as defined in the orignal CRAC file.
quantity.quantity#
Phase shift angle value of the CNEC, expressed in degrees.
Monitored_Series#
mRID#
Unique ID of the CNEC as defined in the native CRAC file.
name#
Name of the CNEC as defined in the native CRAC file.
RegisteredResource#
mRID#
Unique ID of the CNEC’s network element, as defined in the native CRAC file and in the network.
name#
The name of the CNEC as defined in the native CRAC file.
in_AggregateNode.mRID#
Unique ID, in the network, of the voltage level on the branch’s left side.
out_AggregateNode.mRID#
Unique ID, in the network, of the voltage level on the branch’s right side.
PTDF_Domain (optional)#
Only in the hypothetical case of a relative margins objective function.
mRID: ENTSO-E EICode of the area
pTDF_Quantity.quantity: value of the PTDF associated to the bidding zone for the critical network element
⚠️ NOTE
This tag is currently not supported in OpenRAO, since the SWE CC process (only process to use the SWE CNE format) does not optimise relative margins
Measurements#
measurementType: type of measurement, possible values are:
A01: flow
A02: PATL in the preventive state (input data)
A07: TATL right after outage (input data)
A12: TATL at auto instant (input data)
A13: PATL in curative (input data)
unitSymbol: unit of measurement. Only supported value is AMP (ampere)
positiveFlowIn: sign of the value, possible values are:
A01: measurement is positive (its actual value is analogValues.value)
A02: measurement is negative (its actual value is -analogValues.value)
analogValues.value: absolute value of the measurement
Depending on whether the Constraint_Series is preventive, some or all of these measurements are expected:
Measurement type |
Measurement |
Unit(s) |
Exported in preventive B57 |
Exported in non-preventive B57 |
---|---|---|---|---|
A01 |
Flow |
AMP |
✔️ |
✔️ |
A02 |
PATL (preventive) |
AMP |
✔️ |
|
A07 |
TATL (outage) |
AMP |
️ |
at least one |
A12 |
TATL (auto) |
AMP |
️ |
of these three |
A13 |
PATL (curative) |
AMP |
️ |
measurements️ |
RemedialAction_Series (optional)#
This tag is used to report remedial actions that were selected by the RAO for the CNEC’s state.
mRID#
Unique ID of the selected remedial action, as identified in the original CRAC.
name#
Name of the selected remedial action, as identified in the original CRAC.
applicationMode_MarketObjectStatus.status#
Three possible values:
A18: the remedial action was selected in preventive
A20: the remedial action was selected as an automaton
A19: the remedial action was selected in curative
Overall status#
The overall status of the RAO computation is exported in a Reason tag. Here are the possible out-comes.
Secure network#
<Reason>
<code>Z13</code>
<text>Network is secure</text>
</Reason>
This means that the RAO completed successfully and that the network is secure (i.e. no flow nor angle constraints remain).
Unsecure network#
<Reason>
<code>Z03</code>
<text>Network is unsecure</text>
</Reason>
This means that the RAO completed successfully but that the network is unsecure (i.e. there remains at least one flow or one angle constraints).
Load-flow divergence#
<Reason>
<code>B40</code>
<text>Load flow divergence</text>
</Reason>
This means that the RAO or the angle monitoring could not be conducted normally because at least one perimeter lead to a load-flow divergence. This perimeter can be identified by looking at the B57 Constraint_Series.