iec60909/part4/
section6.rs

1extern crate self as iec60909;
2
3use anyhow::Result;
4
5use iec60909::*;
6
7// IEC60909_4_6 returns the a.c. system from Section 6 of IEC60909-4.
8pub fn iec60909_4_6() -> Result<ACSystem<&'static str>> {
9    let b1 = busbar!(380, "1-T3", "1-Q1", "1-T4"); // CMax: 1.1
10    let b2 = busbar!(110, "2-T3", "2-T4", "2-L3");
11    let b3 = busbar!(110, "3-T2", "3-L1", "3-L4");
12    let b4 = busbar!(110, "4-T1", "4-L2", "4-L5");
13    let b5 = busbar!(110, "5-L4", "5-L3", "5-L5", "5-T5", "5-Q2", "5-T6");
14    let b6 = busbar!(10, "6-G3", "6-L6");
15    let b7 = busbar!(10, "7-M1", "7-L6", "7-M2");
16    let b8 = busbar!(30, "8");
17    //busbar!(30);
18    //busbar!(21);
19    //busbar!(10);
20
21    let g1 = SynchronousGenerator::new()
22        .node("G1")
23        .ur(21)
24        .sr(150_000)
25        .xdpp(0.14)
26        .xdsat(1.8)
27        .cos_phi(0.85)
28        .r(0.002) // operated only in the overexcited region
29        .build()?;
30    let t1 = NetworkTransformer::new()
31        .node_lv("G1")
32        .node_hv("4-T1")
33        .ur_hv(115)
34        .ur_lv(21)
35        .sr(150_000)
36        .ukr(16)
37        .urr(0.5)
38        .p(12) // YNd5 with on-load tap-changer
39        .x0x(0.95)
40        .r0r(1.0)
41        .build()?;
42
43    let g2 = SynchronousGenerator::new()
44        .node("G2")
45        .ur(10.5)
46        .sr(100_000)
47        .p(7.5)
48        .xdpp(0.16)
49        .xdsat(2.0)
50        .cos_phi(0.9)
51        .r(0.005)
52        .build()?;
53    let t2 = NetworkTransformer::new()
54        .node_lv("G2")
55        .node_hv("3-T2")
56        .ur_hv(120.0)
57        .ur_lv(10.5)
58        .sr(100e3)
59        .ukr(12.0)
60        .urr(0.5) // YNd5 without tap-changer or off-load taps
61        .x0x(1.0)
62        .r0r(1.0)
63        .build()?;
64
65    let g3 = SynchronousGenerator::new()
66        .node("6-G3")
67        .ur(10.5)
68        .sr(10_000)
69        .p(5.0) // For the calculation a constant value UG=UrG is assumed.
70        .xdpp(0.1)
71        .xdsat(1.8)
72        .cos_phi(0.8)
73        .r(0.018)
74        .build()?;
75
76    // Three-winding network transformers YNyn,d5 with on-load tap-changer
77    // at the high-voltage side, pT = ±16%. Starpoint earthing:
78    // - T3 at the high-voltage side,
79    // - T4 at the medium-voltage side.
80    let t3 = ThreeWindingTransformer::new()
81        .node_hv("1-T3")
82        .node_mv("2-T3")
83        .node_lv("8")
84        .ur_hv(400)
85        .ur_mv(120)
86        .ur_lv(30)
87        .sr_hv_mv(350_000)
88        .sr_mv_lv(50_000)
89        .sr_hv_lv(50_000)
90        .ukr_hv_mv(21)
91        .ukr_hv_lv(10)
92        .ukr_mv_lv(7)
93        .urr_hv_mv(0.26)
94        .urr_hv_lv(0.16)
95        .urr_mv_lv(0.16)
96        //X0MvXMvHv: 2.1, R0MvRMvLv: 1.0,
97        .build()?;
98    let t4 = ThreeWindingTransformer::new()
99        .node_hv("1-T4")
100        .node_mv("2-T4")
101        .node_lv("9")
102        .ur_hv(400)
103        .ur_mv(120)
104        .ur_lv(30)
105        .sr_hv_mv(350_000)
106        .sr_mv_lv(50_000)
107        .sr_hv_lv(50_000)
108        .ukr_hv_mv(21)
109        .ukr_hv_lv(10)
110        .ukr_mv_lv(7)
111        .urr_hv_mv(0.26)
112        .urr_hv_lv(0.16)
113        .urr_mv_lv(0.16)
114        //X0MvXMvHv: 2.1, R0MvRMvLv: 1.0,
115        .build()?;
116    /*let t4_2 = NetworkTransformer{
117        node_hv: "1-T4",
118        node_lv: "2-T4",
119        ur_hv:   400,
120        ur_lv:   120,
121        sr:     350e3,
122        ukr:    21,
123        urr:    0.26,
124    }*/
125
126    // Three-winding network transformer YNyn,d5, treated here as a two-winding
127    // transformer, i.e. ukr = ukr_HvMv
128    let t5 = NetworkTransformer::new()
129        .node_hv("5-T5")
130        .node_lv("6-G3")
131        .ur_hv(115)
132        .ur_lv(10.5)
133        .sr(31_500)
134        .ukr(12.0)
135        .urr(0.5)
136        .build()?;
137    let t6 = NetworkTransformer::new()
138        .node_hv("5-T6")
139        .node_lv("6-L6")
140        .ur_hv(115)
141        .ur_lv(10.5)
142        .sr(31_500)
143        .ukr(12.0)
144        .urr(0.5)
145        .build()?;
146
147    let q1 = NetworkFeeder::new()
148        //.c_max(1.1)
149        .node("1-Q1")
150        .ur(380)
151        .ikss(38)
152        .rx(0.1)
153        .x0x(3.0)
154        .r0x(0.15)
155        .tr(t3.ur_hv / t3.ur_mv)
156        .build()?;
157    let q2 = NetworkFeeder::new()
158        .node("5-Q2")
159        .ur(110)
160        .ikss(16)
161        .rx(0.1)
162        .x0x(3.3)
163        .r0x(0.20)
164        .build()?;
165
166    let m1 = AsynchronousMotor::new()
167        .node("7-M1")
168        .ur(10)
169        .pr(5e3)
170        .cos_phi(0.88)
171        .eta(97.5)
172        .ilr_ir(5.0)
173        .p(1)
174        .build()?;
175    // Two parallel motors with PrM = 2MW each.
176    let m2 = AsynchronousMotor::new()
177        .node("7-M2")
178        .ur(10)
179        .pr(2_000)
180        .cos_phi(0.89)
181        .eta(96.8)
182        .ilr_ir(5.2)
183        .p(2)
184        .n(2)
185        .build()?;
186
187    let r1 = Reactor::new().xr(22.0).build()?; // R << X (short-circuit limiting reactor)
188
189    // Arc-suppression coil for the 10 kV network with resonance neutral earthing.
190    let r6 = Reactor::new().ukr(10.0).build()?;
191
192    let l1 = OverheadLine::new()
193        .node_i("2-T3")
194        .node_j("3-L1")
195        .l(20)
196        .rl(0.12)
197        .xl(0.39)
198        .r0(0.32)
199        .x0(1.26)
200        .build()?;
201    let l2 = OverheadLine::new()
202        .node_i("3-L1")
203        .node_j("4-L2")
204        .l(10)
205        .rl(0.12)
206        .xl(0.39)
207        .r0(0.32)
208        .x0(1.26)
209        .build()?;
210    let l3 = OverheadLine::new()
211        .node_i("2-L3")
212        .node_j("5-L3")
213        .l(5)
214        .rl(0.12)
215        .xl(0.39)
216        .r0(0.52)
217        .x0(1.86)
218        .parallel(2) // double line
219        .build()?;
220    let l4 = OverheadLine::new()
221        .node_i("5-L4")
222        .node_j("3-L4")
223        .l(10)
224        .rl(0.096)
225        .xl(0.388)
226        .r0(0.22)
227        .x0(1.10)
228        .build()?;
229    let l5 = OverheadLine::new()
230        .node_i("5-L5")
231        .node_j("4-L5")
232        .l(15)
233        .rl(0.12)
234        .xl(0.386)
235        .r0(0.22)
236        .x0(1.10)
237        .build()?;
238
239    let l6 = Cable::new()
240        .node_i("6-L6")
241        .node_j("7-L6")
242        .ur(10)
243        .l(1)
244        .rl(0.082)
245        .xl(0.086)
246        .build()?;
247
248    let ac_system = ACSystem::new()
249        .frequency(50)
250        .busbars([b1, b2, b8, b5, b6, b7, b3, b4])
251        .feeders([q1, q2])
252        .power_station(PowerStationUnit {
253            generator: g1,
254            transformer: t1,
255        })
256        .power_station(PowerStationUnit {
257            generator: g2,
258            transformer: t2,
259        })
260        .generator(g3)
261        .three_winding_transformers([t3, t4])
262        .transformers([t5, t6])
263        .motors([m1, m2])
264        .reactors([r1, r6])
265        .lines([l1, l2, l3, l4, l5])
266        .cable(l6)
267        .build()?;
268
269    Ok(ac_system)
270}