|
7 | 7 | - [ ] Flows (Branch Data :Line, TwoWindingsTransformer, TieLine) |
8 | 8 | - [ ] Transformers (TWT) |
9 | 9 | - [ ] Transformers3W (TWT 3W) |
| 10 | +- Examples |
10 | 11 |
|
11 | | -### ShuntCompensator validation |
| 12 | +### ShuntCompensator validation |
12 | 13 |
|
13 | 14 | #### Doc |
14 | 15 | - core grid model: https://powsybl.readthedocs.io/projects/powsybl-core/en/stable/grid_model/network_subnetwork.html#shunt-compensator |
15 | 16 | - core tool loadflow-validation: https://powsybl.readthedocs.io/projects/powsybl-core/en/stable/user/itools/loadflow-validation.html#shunts |
16 | | -#### Notes (draft) |
17 | | -1. Rule1: **|p| < e** |
| 17 | +#### Notes |
| 18 | +- [ ] Rule1: **|p| < e** |
18 | 19 | - if connected, p must be undefined or 0 |
19 | | -2. Rule2: **| q + #sections * B * v^2 | < e** |
| 20 | +- [x] Rule2: **| q + #sections * B * v^2 | < e** |
20 | 21 | - if connected, q must match expectedQ (within threshold), ( **expectedQ = - #sections * B * v^2** ==> **| q + expectedQ | < e** ) |
21 | 22 | - if LinearModel then #sections = bPerSection else #sections = B |
22 | 23 | - **bPerSection**: the susceptance per section in S |
23 | 24 | - **currentSectionCount** = B (The susceptance of the shunt compensator in its current state) |
24 | | -3. Rule3: if the shunt is disconnected, q should be undefined or 0 |
| 25 | +- [ ] Rule3: if the shunt is disconnected, q should be undefined or 0 |
25 | 26 | #### Summary and actions |
26 | 27 |
|
27 | 28 | | | Documentation | Code (ShuntCompensatorsValidation) | Description | Suggestions (TODO) | |
|
31 | 32 | | Condition3 | - | if (!connected && !Double.isNaN(q) && q != 0) return false | if the shunt is disconnected, q should be undefined or 0 | - `add this rule in the doc` | |
32 | 33 |
|
33 | 34 |
|
34 | | -#### Examples |
35 | | -- Doc: A section of a shunt compensator is an individual capacitor or reactor: if its reactive power (Q) is negative, it is a capacitor; if it is positive, it is a reactor. |
36 | | -1. shunt compensator as **capacitor** |
37 | | - - Example |
38 | | - - bPerSection = 1 > 0 |
39 | | - - currentSectionCount = 1 |
40 | | - - Bus (v = 1) |
41 | | - - Rule: Q = -bPerSection * currentSectionCount * terminalState.v() * terminalState.v(); |
42 | | - - SLD |
43 | | - |
44 | | -  |
45 | | - |
46 | | -2. shunt compensator as **reactor** |
47 | | - - Example |
48 | | - - bPerSection = -1 < 0 |
49 | | - - currentSectionCount = 1 |
50 | | - - Bus (v = 1) |
51 | | - - Rule: Q = -bPerSection * currentSectionCount * terminalState.v() * terminalState.v(); |
52 | | - - SLD |
53 | | - |
54 | | -  |
55 | | - |
56 | 35 | ### Static VAR compensator validation |
57 | 36 |
|
58 | 37 | #### Doc |
59 | 38 | - core grid model: https://powsybl.readthedocs.io/projects/powsybl-core/en/stable/grid_model/network_subnetwork.html#static-var-compensator |
60 | 39 | - core tool loadflow-validation: https://powsybl.readthedocs.io/projects/powsybl-core/en/stable/user/itools/loadflow-validation.html#static-var-compensators |
61 | 40 |
|
62 | | -#### Notes (draft) |
63 | | -* Rule1: if connected and no **p** or **q** then **reactivePowerSetpoint** must be undefined or equal to 0 |
64 | | -* Rule2: if connected and (**p** AND **q**) are defined, Then |
65 | | - * => (p) active power should be equal to 0 (within threshold) ! (TODO to clarify) |
66 | | - * => if **regulationMode = REACTIVE_POWER**, Then |
67 | | - * => (config, reactivePowerSetpoint, qMin, qMax) not defined => OK |
68 | | - * => q must match reactivePowerSetpoint (within threshold) |
69 | | - * => if **regulationMode = VOLTAGE** then |
70 | | - * => (config, qMin, qMax, vControlled, voltageSetpoint) not defined => OK |
71 | | - * => V is lower than voltageSetpoint (within threshold) AND q must match qMax (within threshold) |
72 | | - * => V is higher than voltageSetpoint (within threshold) AND q must match Qmin (within threshold) |
73 | | - * => V is at the controlled bus (within threshold) AND q is bounded within [Qmin=-bMax*V*V, Qmax=-bMin*V*V] |
74 | | - * => if regulating is false then reactive power should be equal to 0 |
| 41 | +#### Notes |
| 42 | +- Regulation : VOLTAGE, REACTIVE_POWER |
| 43 | +- [ ] Rule1: active power (p) (within threshold) should be equal to 0 |
| 44 | +- [ ] Rule2: **reactivePowerSetpoint** must be undefined or equal to 0 if NO (**p** or **q**) |
| 45 | + - TODO (doc states that p should be equal to 0 !, if so **reactivePowerSetpoint** must be undefined or equal to 0 !) |
| 46 | + - Suggestion => check only if (q undefined or equal to 0 then **reactivePowerSetpoint** ~ 0) |
| 47 | +- [x] Rule3: **regulationMode = REACTIVE_POWER** then same condition as generator without voltage regulation |
| 48 | + - Rule3.1: => (config, reactivePowerSetpoint, qMin, qMax) not defined => OK |
| 49 | + - Rule3.2: => q must match reactivePowerSetpoint (within threshold) |
| 50 | +- [x] Rule4: **regulationMode = VOLTAGE** then same condition as generator with voltage regulation |
| 51 | + - Rule4.1: => (config, qMin, qMax, vControlled, voltageSetpoint) not defined => OK |
| 52 | + - Rule4.2: => V is lower than voltageSetpoint (within threshold) AND q must match qMax (within threshold) |
| 53 | + - Rule4.3: => V is higher than voltageSetpoint (within threshold) AND q must match Qmin (within threshold) |
| 54 | + - Rule4.4: => V is at the controlled bus (within threshold) AND q is bounded within [Qmin=-bMax*V*V, Qmax=-bMin*V*V] |
| 55 | +- [ ] Rule5: if regulating is false then reactive power (q) should be equal to 0 |
75 | 56 | ##### Actions TODO |
76 | 57 |
|
77 | | -| | Documentation | Code (StaticVarCompensator) | Description | Suggestions (TODO) | |
78 | | -|:-----------|:----------------------------------------------------------------------------------------------------:|----------------------------:|---------------------------------------------------------------------------------:|-----------------------------:| |
79 | | -| Condition1 | - | | no **p** or **q** then **reactivePowerSetpoint** must be undefined or equal to 0 | | |
80 | | -| Condition2 | - | | **p** AND **q** are defined, then follow regulation mode | | |
81 | | -| Condition3 | doc state `same checks as a generator without voltage regulation` | | regulation mode is **REACTIVE_POWER** | | |
82 | | -| Condition4 | doc state `same checks as a generator with voltage regulation with the following bounds: Qmin, Qmax` | | regulation mode is **VOLTAGE** | | |
83 | | -| Condition4 | - | | if regulating is false then reactive power should be equal to 0 | - `add this rule in the doc` | |
| 58 | +| | Documentation | Code (StaticVarCompensator) | Description | Suggestions (TODO) | |
| 59 | +|:-----------|:------------------------------------------------------------------------------------------:|------------------------------------------:|---------------------------------------------------------------------------------:|-------------------------------------------------------------------------------------------------------------:| |
| 60 | +| Condition1 | `targetP = 0 MW` | if (Math.abs(p) > Threshold) return false | active power should be equal to 0 | ? | |
| 61 | +| Condition2 | - | `checkSVCsNaNValues` | **reactivePowerSetpoint** must be undefined or equal to 0 if NO (**p** or **q**) | - `add this rule in the doc`, - check only if (q undefined or equal to 0 then **reactivePowerSetpoint** ~ 0) | |
| 62 | +| Condition3 | `same checks as a generator without voltage regulation` | `reactivePowerRegulationModeKo` | Rule3.1, Rule3.2 | - | |
| 63 | +| Condition4 | `same checks as a generator with voltage regulation with the following bounds: Qmin, Qmax` | `voltageRegulationModeKo` | Rule4.1, Rule4.2, Rule4.3, Rule4.4 | - | |
| 64 | +| Condition5 | - | `notRegulatingKo` | if regulating is false then reactive power should be equal to 0 | - `add this rule in the doc` | |
84 | 65 |
|
85 | 66 |
|
86 | | -#### Examples |
87 | | -  |
88 | | - |
89 | 67 | ### Generator validation TODO |
90 | 68 |
|
91 | 69 | #### Doc |
|
101 | 79 | * Rule3.4: If |V-targetV| <= threshold, generator (Qgen) must be within [minQ, maxQ] |
102 | 80 |
|
103 | 81 | ##### Actions TODO |
| 82 | + |
| 83 | + |
| 84 | +--- |
| 85 | + |
| 86 | +#### Examples |
| 87 | +##### ShuntCompensator validation |
| 88 | +- Doc: A section of a shunt compensator is an individual capacitor or reactor: if its reactive power (Q) is negative, it is a capacitor; if it is positive, it is a reactor. |
| 89 | +1. shunt compensator as **capacitor** |
| 90 | + - Example |
| 91 | + - bPerSection = 1 > 0 |
| 92 | + - currentSectionCount = 1 |
| 93 | + - Bus (v = 1) |
| 94 | + - Rule: Q = -bPerSection * currentSectionCount * terminalState.v() * terminalState.v(); |
| 95 | + - SLD |
| 96 | +  |
| 97 | + |
| 98 | +2. shunt compensator as **reactor** |
| 99 | + - Example |
| 100 | + - bPerSection = -1 < 0 |
| 101 | + - currentSectionCount = 1 |
| 102 | + - Bus (v = 1) |
| 103 | + - Rule: Q = -bPerSection * currentSectionCount * terminalState.v() * terminalState.v(); |
| 104 | + - SLD |
| 105 | +  |
| 106 | + |
| 107 | +##### Static VAR compensator validation |
| 108 | + |
0 commit comments