Skip to main content

61970-456_StateVariables-AP-Con-Complex-SolvedMAS-SHACL

sv456sol:SvPowerFlow

Severity: sh:Violation

Targets:

  • targetClass: cim:ConformLoad
  • targetClass: cim:EquivalentInjection
  • targetClass: cim:NonlinearShuntCompensator
  • targetClass: cim:ExternalNetworkInjection
  • targetClass: cim:PowerElectronicsConnection
  • targetClass: cim:NonConformLoad
  • targetClass: cim:EnergyConsumer
  • targetClass: cim:LinearShuntCompensator
  • targetClass: cim:StaticVarCompensator
  • targetClass: cim:EnergySource
  • targetClass: cim:SynchronousMachine
  • targetClass: cim:AsynchronousMachine
  • targetClass: cim:StationSupply

Nested Properties:

sv456sol:SvPowerFlow-instance

Path: rdf:type
As a minimum there shall be an instance of SvPowerFlow associated with the Terminal for all the following classes and their specialisation (subclass) that is part of an energized TopologicalIsland: RotatingMachine, EnergyConsumer, EquivalentInjection, ShuntCompensator, StaticVarCompensator, ExternalNetworkInjection, PowerElectronicsConnection and EnergySource. Additional instances of SvPowerFlow may optionally be available for other in service (SvStatus.inService=true) and energised equipment (equipment connected to a TopologicalNode part of the TopologicalIsland).

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>

SELECT $this ?value
WHERE {
$this ^cim:SvStatus.ConductingEquipment/cim:SvStatus.inService true .
$this ^cim:Terminal.ConductingEquipment/cim:Terminal.ConnectivityNode/cim:ConnectivityNode.TopologicalNode/^cim:TopologicalIsland.TopologicalNodes ?topologicalisland .
$this rdf:type ?value .
#OPTIONAL {$this ^cim:Terminal.ConductingEquipment/cim:Terminal.ConnectivityNode/cim:ConnectivityNode.TopologicalNode/^cim:TopologicalIsland.TopologicalNodes ?topologicalisland }.
#OPTIONAL {$this ^cim:SvStatus.ConductingEquipment/cim:SvStatus.inService ?svstatus} .
OPTIONAL {$this ^cim:Terminal.ConductingEquipment/^cim:SvPowerFlow.Terminal ?svpowerflow }.
#FILTER (bound(?topologicalisland) && bound(?svstatus) && ?svstatus=true && !bound(?svpowerflow)).
FILTER (!bound(?svpowerflow)).
}
  • Messages: ["SvPowerFlow is not instantiated for the required instances of energized (SvStatus.inService=true and the connected ToplogicalNode is part of the TopologicalIsland) equipment."]

sv456sol:SvPowerFlow-SynchronousMachine

Severity: sh:Violation

Targets:

  • targetClass: cim:SynchronousMachine

Nested Properties:

sv456sol:SvPowerFlow.p-synchronousMachine

Path: rdf:type
The SvPowerFlow.p that is given by the steady state power flow solution for a SynchronousMachine shall normally be within the capability of the machine defined in the ReactiveCapabilityCurve or GeneratingUnit.maxOperatingP and GeneratingUnit.minOperatingP when ReactiveCapabilityCurve is not present. Active power can be outside the capability as part of start-up or shutdown of the generator. CIM cannot represent different operation mode so this constraint will only give a warning. Note that different data exchange processes can assign more restrictive severity depending on the business needs and power flow algorithm applied by the business process.

Severity: sh:Warning

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Warning)
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>

SELECT $this ?value
WHERE {
$this ^cim:Terminal.ConductingEquipment/^cim:SvPowerFlow.Terminal/cim:SvPowerFlow.p ?value .
$this cim:RotatingMachine.GeneratingUnit ?gu .
?gu cim:GeneratingUnit.minOperatingP ?minp .
?gu cim:GeneratingUnit.maxOperatingP ?maxp .
OPTIONAL {$this cim:SynchronousMachine.InitialReactiveCapabilityCurve ?rcc } .

{
SELECT $this (MAX(?xvalue) AS ?maxxvalue) (MIN(?xvalue) AS ?minxvalue)
WHERE {
#OPTIONAL {?rcc1 ^cim:SynchronousMachine.InitialReactiveCapabilityCurve $this } .
OPTIONAL {?rcc1 ^cim:SynchronousMachine.InitialReactiveCapabilityCurve $this .
?rcc1 ^cim:CurveData.Curve ?curvedata .
?curvedata rdf:type ?cdtype .
?curvedata cim:CurveData.xvalue ?xvalue .
} .
#?rcc1 ^cim:SynchronousMachine.InitialReactiveCapabilityCurve $this .
#?rcc1 ^cim:CurveData.Curve ?curvedata .
#?curvedata rdf:type ?cdtype .
#?curvedata cim:CurveData.xvalue ?xvalue .
#FILTER (bound(?rcc1) && ?cdtype=cim:CurveData ) .
}
GROUP BY $this ?cdtype
}

#FILTER ( (!bound(?rcc) && !(?value>=?minp && ?value<=?maxp)) || (bound(?rcc) && !(?value>=?minxvalue && ?value<=?maxxvalue))).
FILTER ( (!bound(?rcc) && ((?value!=0 && (-?value<?minp || -?value>?maxp)) || (?value=0 && (?value<?minp || ?value>?maxp))) ) || (bound(?rcc) && ((?value!=0 && (-?value<?minxvalue || -?value>?maxxvalue)) || (?value=0 && (?value<?minxvalue || ?value>?maxxvalue))))).
}
  • Messages: ["The value is outside of the range defined by the ReactiveCapabilityCurve or [GeneratingUnit.minOperatingP, GeneratingUnit.maxOperatingP] when the curve is not present."]

sv456sol:SvPowerFlow.q-synchronousMachine

Path: rdf:type
The SvPowerFlow.q that is given by the steady state power flow solution for a SynchronousMachine shall normally be within the capability of the machine defined in the ReactiveCapabilityCurve or SynchronousMachine.maxQ, SynchronousMachine.minQ when ReactiveCapabilityCurve is not present. Reactive power can be outside the capability if powerflow excludes reactive restriction. CIM cannot represent this so this contains will also give a warning. Note that different data exchange processes can assign more restrictive severity depending on the business needs and power flow algorithm applied by the business process.

Severity: sh:Warning

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Warning)
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>

SELECT $this ?value
WHERE {
$this ^cim:Terminal.ConductingEquipment/^cim:SvPowerFlow.Terminal/cim:SvPowerFlow.q ?value .
OPTIONAL {$this cim:SynchronousMachine.minQ ?minq }.
OPTIONAL {$this cim:SynchronousMachine.maxQ ?maxq }.
OPTIONAL {$this cim:SynchronousMachine.InitialReactiveCapabilityCurve ?rcc } .

{
SELECT $this (MAX(?y2value) AS ?my2value) (MIN(?y1value) AS ?my1value)
WHERE {
#OPTIONAL {?rcc1 ^cim:SynchronousMachine.InitialReactiveCapabilityCurve $this } .
OPTIONAL {?rcc1 ^cim:SynchronousMachine.InitialReactiveCapabilityCurve $this.
?rcc1 ^cim:CurveData.Curve ?curvedata .
?curvedata rdf:type ?cdtype .
?curvedata cim:CurveData.y1value ?y1value .
?curvedata cim:CurveData.y2value ?y2value .
}.
#FILTER (bound(?rcc1) && ?cdtype=cim:CurveData ) .
}
GROUP BY $this ?cdtype
}

FILTER ( (!bound(?rcc) && bound(?minq) && bound(?maxq) && ((?value!=0 && (-?value<?minq || -?value>?maxq)) || (?value=0 && (?value<?minq || ?value>?maxq)))) || (bound(?rcc) && ((?value!=0 && (-?value<?my1value || -?value>?my2value)) || (?value=0 && (?value<?my1value || ?value>?my2value))))).
}
  • Messages: ["The value is outside of the range defined by the ReactiveCapabilityCurve or [SynchronousMachine.minQ, SynchronousMachine.maxQ] when the curve is not present."]

sv456sol:SvShuntCompensatorSections

Severity: sh:Violation

Targets:

  • targetClass: cim:SvShuntCompensatorSections

Nested Properties:

sv456sol:SvShuntCompensatorSections.sections-value

Path: cim:SvShuntCompensatorSections.sections
In cases where RegulatingControl.discrete is true and RegulatingControl.enabled is true, SvShuntCompensatorSections.sections shall be integer.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>

SELECT $this ?value
WHERE {
$this $PATH ?value .
$this cim:SvShuntCompensatorSections.ShuntCompensator/cim:RegulatingCondEq.RegulatingControl ?contr .
#$this cim:SvShuntCompensatorSections.ShuntCompensator ?shuntcomp .
#OPTIONAL {?shuntcomp cim:RegulatingCondEq.RegulatingControl ?contr}.
#?contr cim:RegulatingControl.discrete ?discrete .
#?contr cim:RegulatingControl.enabled ?enabled .
?contr cim:RegulatingControl.enabled true .
?contr cim:RegulatingControl.discrete true .
FILTER (STRENDS(str(?value), ".") && !REGEX(STRAFTER(str(?value), "."), "^[0]$", "i") ) .
#FILTER (STRENDS(str(?value), ".") && !REGEX(STRAFTER(str(?value), "."), "^[0]$", "i") && bound(?contr) && ?discrete=true && ?enabled=true) .
}
  • Messages: ["The value is not integer for an active discrete regulating control."]

sv456sol:SvSwitch

Severity: sh:Violation

Targets:

  • targetClass: cim:Cut
  • targetClass: cim:Switch
  • targetClass: cim:GroundDisconnector
  • targetClass: cim:Disconnector
  • targetClass: cim:Fuse
  • targetClass: cim:Jumper
  • targetClass: cim:Breaker
  • targetClass: cim:LoadBreakSwitch
  • targetClass: cim:DisconnectingCircuitBreaker

Nested Properties:

sv456sol:SvSwitch-instance

Path: rdf:type
SvSwitch shall be exchanged for all switching devices. It is expected that in most cases the SvSwitch.open in SV instance data will be identical with Switch.open in SSH instance data. However, in cases where a regulating control is modifying the connection state of the controlled device a difference between SvSwitch.open and Switch.open can occur.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>

SELECT $this
WHERE {
OPTIONAL {$this ^cim:SvSwitch.Switch ?svswitch } .
FILTER (!bound(?svswitch)) .
}
  • Messages: ["SvSwitch not instantiated."]

sv456sol:SvTapStep

Severity: sh:Violation

Targets:

  • targetClass: cim:SvTapStep

Nested Properties:

sv456sol:SvTapStep.position-value

Path: cim:SvTapStep.position
In cases where RegulatingControl.discrete is true and RegulatingControl.enabled is true, SvTapStep.position shall be integer.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>

SELECT $this ?value
WHERE {
$this $PATH ?value .
$this cim:SvTapStep.TapChanger/cim:TapChanger.TapChangerControl ?contr .
#$this cim:SvTapStep.TapChanger ?tapchanger .
#OPTIONAL {?tapchanger cim:TapChanger.TapChangerControl ?contr}.
?contr cim:RegulatingControl.enabled true .
?contr cim:RegulatingControl.discrete true .
FILTER (STRENDS(str(?value), ".") && !REGEX(STRAFTER(str(?value), "."), "^[0]$", "i")) .
#?contr cim:RegulatingControl.discrete ?discrete .
#?contr cim:RegulatingControl.enabled ?enabled .
#FILTER (STRENDS(str(?value), ".") && !REGEX(STRAFTER(str(?value), "."), "^[0]$", "i") && bound(?contr) && ?discrete=true && ?enabled=true) .
}
  • Messages: ["The value is not integer for an active discrete regulating control."]

sv456sol:SvVoltage

Severity: sh:Violation

Targets:

  • targetClass: cim:SvVoltage

Nested Properties:

sv456sol:SvVoltage.v-limits

Path: rdf:type
The SvVoltage.v shall be less than or equal to VoltageLimit.value associated with OperationalLimitType.limitType=highVoltage and greater than or equal to VoltageLimit.value associated with OperationalLimitType.limitType=lowVoltage.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>

SELECT $this ?value
WHERE {
$this cim:SvVoltage.v ?value .
$this cim:SvVoltage.ToplogicalNode/^cim:ConnectivityNode.TopologicalNode/^cim:Terminal.ConnectivityNode ?term .

?limith cim:OperationalLimit.OperationalLimitSet/cim:OperationalLimitSet.Terminal ?term .
?limitl cim:OperationalLimit.OperationalLimitSet/cim:OperationalLimitSet.Terminal ?term .
?limith cim:OperationalLimit.OperationalLimitType/cim:OperationalLimitType.direction cim:OperationalLimitDirectionKind.high .
?limitl cim:OperationalLimit.OperationalLimitType/cim:OperationalLimitType.direction cim:OperationalLimitDirectionKind.low .
?limith cim:VoltageLimit.value ?vhigh .
?limitl cim:VoltageLimit.value ?vlow .

#OPTIONAL {?limith cim:OperationalLimit.OperationalLimitSet/cim:OperationalLimitSet.Terminal ?term} .
#OPTIONAL {?limitl cim:OperationalLimit.OperationalLimitSet/cim:OperationalLimitSet.Terminal ?term} .
##OPTIONAL {?limith rdf:type ?limithtype} .
##OPTIONAL {?limitl rdf:type ?limitltype} .
#OPTIONAL {?limith cim:OperationalLimit.OperationalLimitType/cim:OperationalLimitType.direction cim:OperationalLimitDirectionKind.high} .
#OPTIONAL {?limitl cim:OperationalLimit.OperationalLimitType/cim:OperationalLimitType.direction cim:OperationalLimitDirectionKind.low} .
#OPTIONAL {?limith cim:VoltageLimit.value ?vhigh} .
#OPTIONAL {?limitl cim:VoltageLimit.value ?vlow} .

FILTER ( ?value>?vhigh || ?value<?vlow).
#FILTER ( bound(?vhigh) && bound(?vlow) && ?value<=?vhigh && ?value>=?vlow).
}
  • Messages: ["The value is outside the defined limits."]

sv456sol:SvVoltage.v-absoluteLimit

Path: rdf:type
SvVoltage.v shall be greater than 0.4 pu in cases where associated voltage limits are not defining different limit range.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>

SELECT $this ?value
WHERE {
$this cim:SvVoltage.v ?value .
$this cim:SvVoltage.ToplogicalNode/^cim:ConnectivityNode.TopologicalNode/^cim:Terminal.ConnectivityNode ?term .
$this cim:SvVoltage.ToplogicalNode/cim:ToplogicalNode.BaseVoltage/cim:BaseVoltage.nominalVoltage ?nvoltage .
#OPTIONAL {?limith cim:OperationalLimit.OperationalLimitSet/cim:OperationalLimitSet.Terminal ?term} .
#OPTIONAL {?limitl cim:OperationalLimit.OperationalLimitSet/cim:OperationalLimitSet.Terminal ?term} .
##OPTIONAL {?limith rdf:type ?limithtype} .
##OPTIONAL {?limitl rdf:type ?limitltype} .
#OPTIONAL {?limith cim:OperationalLimit.OperationalLimitType/cim:OperationalLimitType.direction cim:OperationalLimitDirectionKind.high} .
#OPTIONAL {?limitl cim:OperationalLimit.OperationalLimitType/cim:OperationalLimitType.direction cim:OperationalLimitDirectionKind.low} .
#OPTIONAL {?limith cim:VoltageLimit.value ?vhigh} .
#OPTIONAL {?limitl cim:VoltageLimit.value ?vlow} .
OPTIONAL {
?limith cim:OperationalLimit.OperationalLimitSet/cim:OperationalLimitSet.Terminal ?term .
?limitl cim:OperationalLimit.OperationalLimitSet/cim:OperationalLimitSet.Terminal ?term .
?limith cim:OperationalLimit.OperationalLimitType/cim:OperationalLimitType.direction cim:OperationalLimitDirectionKind.high .
?limitl cim:OperationalLimit.OperationalLimitType/cim:OperationalLimitType.direction cim:OperationalLimitDirectionKind.low .
?limith cim:VoltageLimit.value ?vhigh .
?limitl cim:VoltageLimit.value ?vlow .
}.


FILTER ( !bound(?vhigh) && !bound(?vlow) && (?value/?nvoltage)<=0.4).
}
  • Messages: ["The value is <=0.4 pu."]