Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
S
sparrowzz
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
sgool
sparrowzz
Commits
04ad946d
Commit
04ad946d
authored
Jul 19, 2024
by
wzc-a
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
完成Y形接线三相潮流,并测试通过了导线模型
parent
d0f44ec6
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
303 行增加
和
88 行删除
+303
-88
data/dsntp/ieeeds/case13/dev/cns_ieee13.csv
+6
-2
data/dsntp/ieeeds/case13/dev/meas_def_ieee13.csv
+24
-2
data/dsntp/ieeeds/case13/dev/resources_ieee13.csv
+13
-8
data/dsntp/ieeeds/case13/meas_value_ieee13.csv
+24
-2
data/dsntp/ieeeds/case13/points_ieee13.csv
+24
-2
mems/examples/ds-3phase-pf/src/nlp.rs
+211
-72
mems/examples/ds-dev-ohm-cal/src/lib.rs
+1
-0
没有找到文件。
data/dsntp/ieeeds/case13/dev/cns_ieee13.csv
查看文件 @
04ad946d
...
...
@@ -31,4 +31,8 @@ CN,Terminal
671,30
675,31
692,32
611,33
\ No newline at end of file
611,33
680,34
632,35
633,36
684,37
\ No newline at end of file
data/dsntp/ieeeds/case13/dev/meas_def_ieee13.csv
查看文件 @
04ad946d
...
...
@@ -27,4 +27,26 @@ Index,ID,Point ID,Dev ID,Terminal ID,Desc
26,26,1000026,21,32,C
27,27,1000027,21,32,C
28,28,1000028,22,33,C
29,29,1000029,22,33,C
\ No newline at end of file
29,29,1000029,22,33,C
30,30,1000030,23,34,A
31,31,1000031,23,34,A
32,32,1000032,23,34,B
33,33,1000033,23,34,B
34,34,1000034,23,34,C
35,35,1000035,23,34,C
36,36,1000036,24,35,A
37,37,1000037,24,35,A
38,38,1000038,24,35,B
39,39,1000039,24,35,B
40,40,1000040,24,35,C
41,41,1000041,24,35,C
42,42,1000042,25,36,A
43,43,1000043,25,36,A
44,44,1000044,25,36,B
45,45,1000045,25,36,B
46,46,1000046,25,36,C
47,47,1000047,25,36,C
48,48,1000048,26,37,A
49,49,1000049,26,37,A
50,50,1000050,26,37,C
51,51,1000051,26,37,C
\ No newline at end of file
data/dsntp/ieeeds/case13/dev/resources_ieee13.csv
查看文件 @
04ad946d
...
...
@@ -13,11 +13,15 @@ Index,ID,Device Define Id,Name,Description,Terminal,Container,Name,ID,Property I
12,12,3,switch,开关,20;21,,ieee,12,2,false,,,,
13,13,2,line9,,22;23,,ieee,13,3,605,4,300,,
14,14,2,line10,,24;25,,ieee,14,3,606,4,500,,
15,15,4,Load,负荷,26,,ieee,15,,,,,,
16,16,4,Load,,27,,ieee,16,,,,,,
17,17,4,Load,,28,,ieee,17,,,,,,
18,18,4,Load,,29,,ieee,18,,,,,,
19,19,4,Load,,30,,ieee,19,,,,,,
20,20,4,Load,,31,,ieee,20,,,,,,
21,21,4,Load,,32,,ieee,21,,,,,,
22,22,4,Load,,33,,ieee,22,,,,,,
15,15,4,Load1,634,26,,ieee,15,,,,,,
16,16,4,Load2,645,27,,ieee,16,,,,,,
17,17,4,Load3,646,28,,ieee,17,,,,,,
18,18,4,Load4,652,29,,ieee,18,,,,,,
19,19,4,Load5,671,30,,ieee,19,,,,,,
20,20,4,Load6,675,31,,ieee,20,,,,,,
21,21,4,Load7,692,32,,ieee,21,,,,,,
22,22,4,Load8,611,33,,ieee,22,,,,,,
23,23,4,Load9,680,34,,ieee,,,,,,,
24,24,4,LinkNode10,632,35,,ieee,,,,,,,
25,25,4,LinkNode11,633,36,,ieee,,,,,,,
26,26,4,LinkNode12,684,37,,ieee,,,,,,,
\ No newline at end of file
data/dsntp/ieeeds/case13/meas_value_ieee13.csv
查看文件 @
04ad946d
...
...
@@ -27,4 +27,26 @@ Index,Point ID,Value
26,1000026,170
27,1000027,151
28,1000028,170
29,1000029,80
\ No newline at end of file
29,1000029,80
30,1000030,0
31,1000031,0
32,1000032,0
33,1000033,0
34,1000034,0
35,1000035,0
36,1000036,0
37,1000037,0
38,1000038,0
39,1000039,0
40,1000040,0
41,1000041,0
42,1000042,0
43,1000043,0
44,1000044,0
45,1000045,0
46,1000046,0
47,1000047,0
48,1000048,0
49,1000049,0
50,1000050,0
51,1000051,0
\ No newline at end of file
data/dsntp/ieeeds/case13/points_ieee13.csv
查看文件 @
04ad946d
...
...
@@ -27,4 +27,26 @@ Index,ID,Name,Alias,Is Discrete,Is Computing,Expression,Trans Expr,Inv Trans Exp
26,1000026,C相有功692,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsC
27,1000027,C相无功692,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsC
28,1000028,C相有功611,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsC
29,1000029,C相无功611,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsC
\ No newline at end of file
29,1000029,C相无功611,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsC
30,1000030,A相有功680,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsA
31,1000031,A相无功680,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsA
32,1000032,B相有功680,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsB
33,1000033,B相无功680,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsB
34,1000034,C相有功680,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsC
35,1000035,C相无功680,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsC
36,1000036,A相有功632,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsA
37,1000037,A相无功632,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsA
38,1000038,B相有功632,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsB
39,1000039,B相无功632,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsB
40,1000040,C相有功632,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsC
41,1000041,C相无功632,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsC
42,1000042,A相有功633,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsA
43,1000043,A相无功633,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsA
44,1000044,B相有功633,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsB
45,1000045,B相无功633,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsB
46,1000046,C相有功633,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsC
47,1000047,C相无功633,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsC
48,1000048,A相有功684,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsA
49,1000049,A相无功684,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsA
50,1000050,C相有功684,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsC
51,1000051,C相无功684,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsC
\ No newline at end of file
mems/examples/ds-3phase-pf/src/nlp.rs
查看文件 @
04ad946d
use
std
::
collections
::
HashMap
;
use
ndarray
::{
Array
,
Array2
,
Ix2
};
use
ndarray
::{
Array
,
array
,
Array2
,
Ix2
};
use
num_complex
::{
Complex64
,
ComplexFloat
};
use
eig_domain
::
DataUnit
;
use
mems
::
model
::
dev
::
MeasPhase
;
pub
fn
get_pf_nlp_constraints
(
tns
:
&
[
u64
],
// cn, tn
dyn_topo
:
Vec
<
Vec
<
u64
>>
,
// terminal, cn, tn, dev
...
...
@@ -18,44 +19,109 @@ pub fn get_pf_nlp_constraints(
input_values
:
Vec
<
f64
>
)
->
Option
<
Vec
<
String
>>
{
let
mut
constraint
=
Vec
::
with_capacity
(
dyn_topo
.len
());
// 每个tn的节点注入功率表达式
for
tn1
in
tns
{
let
mut
power_exp
=
HashMap
::
new
();
let
connect_tn_devs
=
get_connect_tn_devs
(
*
tn1
,
&
dev_topo
);
if
connect_tn_devs
.len
()
==
0
{
continue
;
}
for
tn_dev
in
connect_tn_devs
{
let
tn2
=
tn_dev
[
0
];
let
dev
=
tn_dev
[
1
];
let
matrix
=
dev_matrix
.get
(
&
dev
)
.unwrap
();
let
r
=
matrix
[
0
]
.clone
();
let
x
=
matrix
[
1
]
.clone
();
let
r_x
=
array!
[
[
Complex64
::
new
(
r
[[
0
,
0
]],
x
[[
0
,
0
]]),
Complex64
::
new
(
r
[[
0
,
1
]],
x
[[
0
,
1
]]),
Complex64
::
new
(
r
[[
0
,
2
]],
x
[[
0
,
2
]])],
[
Complex64
::
new
(
r
[[
1
,
0
]],
x
[[
1
,
0
]]),
Complex64
::
new
(
r
[[
1
,
1
]],
x
[[
1
,
1
]]),
Complex64
::
new
(
r
[[
1
,
2
]],
x
[[
1
,
2
]])],
[
Complex64
::
new
(
r
[[
2
,
0
]],
x
[[
2
,
0
]]),
Complex64
::
new
(
r
[[
2
,
1
]],
x
[[
2
,
1
]]),
Complex64
::
new
(
r
[[
2
,
2
]],
x
[[
2
,
2
]])]
];
let
(
exps
,
mode
)
=
get_pq_of_acline
(
r_x
,
*
tn1
,
tn2
)
.unwrap
();
extend_exp_pq_of_acline
(
&
mut
power_exp
,
exps
,
mode
);
}
get_node_pq_load_constraints
(
&
mut
constraint
,
power_exp
,
*
tn1
);
}
for
i
in
0
..
input_tns
.len
()
{
let
tn
=
input_tns
[
i
];
let
v
=
input_values
[
i
];
match
input_types
[
i
]
{
DataUnit
::
k
W
=>
{
DataUnit
::
W
=>
{
let
mut
active_exp
=
String
::
new
();
constraint
.push
(
active_exp
);
match
input_phases
[
i
]
{
MeasPhase
::
Total
=>
{}
MeasPhase
::
A
=>
{}
MeasPhase
::
B
=>
{}
MeasPhase
::
C
=>
{}
MeasPhase
::
A0
=>
{}
MeasPhase
::
B0
=>
{}
MeasPhase
::
C0
=>
{}
MeasPhase
::
CT
=>
{}
MeasPhase
::
PT
=>
{}
MeasPhase
::
Unknown
=>
return
None
,
MeasPhase
::
A
=>
active_exp
=
format!
(
"P_{tn}_A-{v:.4}:[0/0]"
),
MeasPhase
::
B
=>
active_exp
=
format!
(
"P_{tn}_B-{v:.4}:[0/0]"
),
MeasPhase
::
C
=>
active_exp
=
format!
(
"P_{tn}_C-{v:.4}:[0/0]"
),
_
=>
continue
,
}
constraint
.push
(
active_exp
);
}
DataUnit
::
k
Var
=>
{
DataUnit
::
Var
=>
{
let
mut
reactive_exp
=
String
::
new
();
match
input_phases
[
i
]
{
MeasPhase
::
A
=>
reactive_exp
=
format!
(
"Q_{tn}_A-{v:.4}:[0/0]"
),
MeasPhase
::
B
=>
reactive_exp
=
format!
(
"Q_{tn}_B-{v:.4}:[0/0]"
),
MeasPhase
::
C
=>
reactive_exp
=
format!
(
"Q_{tn}_C-{v:.4}:[0/0]"
),
_
=>
continue
,
}
constraint
.push
(
reactive_exp
);
}
DataUnit
::
kV
=>
{}
DataUnit
::
V
=>
{
match
input_phases
[
i
]
{
MeasPhase
::
Total
=>
{
let
v_p
=
v
/
3.0f64
.sqrt
();
constraint
.push
(
format!
(
"V_{tn}_A-{v_p:.4}:[0/0]"
));
constraint
.push
(
format!
(
"D_{tn}_A-0:[0/0]"
));
constraint
.push
(
format!
(
"V_{tn}_B-{v_p:.4}:[0/0]"
));
constraint
.push
(
format!
(
"D_{tn}_B--2/3*pi:[0/0]"
));
constraint
.push
(
format!
(
"V_{tn}_C-{v_p:.4}:[0/0]"
));
constraint
.push
(
format!
(
"D_{tn}_C-2/3*pi:[0/0]"
));
},
MeasPhase
::
A
=>
constraint
.push
(
format!
(
"V_{tn}_A-{v:.4}:[0/0]"
)),
MeasPhase
::
B
=>
constraint
.push
(
format!
(
"V_{tn}_B-{v:.4}:[0/0]"
)),
MeasPhase
::
C
=>
constraint
.push
(
format!
(
"V_{tn}_C-{v:.4}:[0/0]"
)),
_
=>
continue
,
}
}
_
=>
{}
}
}
Some
(
constraint
)
}
// 找到连接tn的设备
pub
fn
get_connect_tn_devs
(
tn
:
u64
,
dev_topo
:
&
Vec
<
Vec
<
u64
>>
)
->
Vec
<
Vec
<
u64
>>
{
let
mut
connect_devs
=
Vec
::
new
();
for
topo
in
dev_topo
{
if
topo
[
2
]
==
tn
{
connect_devs
.push
(
topo
[
3
]);
}
}
// tn, dev
let
mut
connect_tn_devs
=
Vec
::
new
();
for
topo
in
dev_topo
{
if
connect_devs
.contains
(
&
topo
[
3
])
{
if
topo
[
2
]
!=
tn
{
connect_tn_devs
.push
(
vec!
[
topo
[
2
],
topo
[
3
]]);
}
}
}
connect_tn_devs
}
pub
fn
get_pf_nlp_variables
(
tns
:
&
[
u64
])
->
String
{
let
mut
variable
=
String
::
new
();
// 生成变量名
for
tn
in
tns
{
variable
.push_str
(
&
format!
(
"V_{tn}_A:[0/2],D_{tn}_A:[-3.2/3.2],V_{tn}_B:[0/2],D_{tn}_B:[-3.2/3.2],V_{tn}_C:[0/2],D_{tn}_C:[-3.2/3.2]"
));
variable
.push_str
(
&
format!
(
"V_{tn}_A:[0/20000],D_{tn}_A:[-3.2/3.2],
\
V_{tn}_B:[0/20000],D_{tn}_B:[-3.2/3.2],V_{tn}_C:[0/20000],D_{tn}_C:[-3.2/3.2],
\
P_{tn}_A:[-200000/200000],P_{tn}_B:[-200000/200000],P_{tn}_C:[-200000/200000],
\
Q_{tn}_A:[-200000/200000],Q_{tn}_B:[-200000/200000],Q_{tn}_C:[-200000/200000],"
));
}
variable
}
// 没有办法处理Delta连接的情况,因为Delta load只能先由相电压计算相电流,再推导线电流。即不能用节点三相功率平衡方程。
fn
get_pq_of_acline
(
r_x
:
Array
<
Complex64
,
Ix2
>
,
tn1
:
u64
,
tn2
:
u64
)
->
Option
<
(
Vec
<
String
>
,
u32
)
>
{
let
mut
mode
:
u32
=
0
;
//判断相位的模式
if
r_x
[[
0
,
0
]]
!=
Complex64
::
new
(
0.0
,
0.0
)
{
...
...
@@ -80,11 +146,11 @@ fn get_pq_of_acline(r_x: Array<Complex64, Ix2>, tn1: u64, tn2: u64) -> Option<(V
// = -V1a*(V1a*b+V2a*(g*sin(t1a-t2a)-b*cos(t1a-t2a)))
//P_A
result
.push
(
format!
(
"V_{tn1}_A*(V_{tn1}_A*{g:.4}-V_{tn2}_A*({g:.4}*cos(D_{tn1}_A-D_{tn2}_A)+{b:.4}*sin(D_{tn1}_A-D_{tn2}_A)))"
,
)
format!
(
"V_{tn1}_A*(V_{tn1}_A*{g:.4}-V_{tn2}_A*({g:.4}*cos(D_{tn1}_A-D_{tn2}_A)+{b:.4}*sin(D_{tn1}_A-D_{tn2}_A)))"
)
);
//Q_A
result
.push
(
format!
(
"-V_{tn1}_A*(V_{tn1}_A*{b:.4}+V_{tn2}_A*({g:.4}*sin(D_{tn1}_A-D_{tn2}_A)-{b:.4}*cos(D_{tn1}_A-D_{tn2}_A)))"
,
),
format!
(
"-V_{tn1}_A*(V_{tn1}_A*{b:.4}+V_{tn2}_A*({g:.4}*sin(D_{tn1}_A-D_{tn2}_A)-{b:.4}*cos(D_{tn1}_A-D_{tn2}_A)))"
),
)
}
2
=>
{
...
...
@@ -93,11 +159,11 @@ fn get_pq_of_acline(r_x: Array<Complex64, Ix2>, tn1: u64, tn2: u64) -> Option<(V
let
b
=
gb
.im
();
//P_B
result
.push
(
format!
(
"V_{tn1}_B*(V_{tn1}_B*{g:.4}-V_{tn2}_B*({g:.4}*cos(D_{tn1}_B-D_{tn2}_B)+{b:.4}*sin(D_{tn1}_B-D_{tn2}_B)))"
,
),
format!
(
"V_{tn1}_B*(V_{tn1}_B*{g:.4}-V_{tn2}_B*({g:.4}*cos(D_{tn1}_B-D_{tn2}_B)+{b:.4}*sin(D_{tn1}_B-D_{tn2}_B)))"
),
);
//Q_B
result
.push
(
format!
(
"-V_{tn1}_B*(V_{tn1}_B*{b:.4}+V_{tn2}_B*({g:.4}*sin(D_{tn1}_B-D_{tn2}_B)-{b:.4}*cos(D_{tn1}_B-D_{tn2}_B)))"
,
),
format!
(
"-V_{tn1}_B*(V_{tn1}_B*{b:.4}+V_{tn2}_B*({g:.4}*sin(D_{tn1}_B-D_{tn2}_B)-{b:.4}*cos(D_{tn1}_B-D_{tn2}_B)))"
),
)
}
4
=>
{
...
...
@@ -106,11 +172,11 @@ fn get_pq_of_acline(r_x: Array<Complex64, Ix2>, tn1: u64, tn2: u64) -> Option<(V
let
b
=
gb
.im
();
//P_C
result
.push
(
format!
(
"V_{tn1}_C*(V_{tn1}_C*{g:.4}-V_{tn2}_C*({g:.4}*cos(D_{tn1}_C-D_{tn2}_C)+{b:.4}*sin(D_{tn1}_C-D_{tn2}_C)))"
,
),
format!
(
"V_{tn1}_C*(V_{tn1}_C*{g:.4}-V_{tn2}_C*({g:.4}*cos(D_{tn1}_C-D_{tn2}_C)+{b:.4}*sin(D_{tn1}_C-D_{tn2}_C)))"
),
);
//Q_C
result
.push
(
format!
(
"-V_{tn1}_C*(V_{tn1}_C*{b:.4}+V_{tn2}_C*({g:.4}*sin(D_{tn1}_C-D_{tn2}_C)-{b:.4}*cos(D_{tn1}_C-D_{tn2}_C)))"
,
),
format!
(
"-V_{tn1}_C*(V_{tn1}_C*{b:.4}+V_{tn2}_C*({g:.4}*sin(D_{tn1}_C-D_{tn2}_C)-{b:.4}*cos(D_{tn1}_C-D_{tn2}_C)))"
),
)
}
// AB
...
...
@@ -128,32 +194,32 @@ fn get_pq_of_acline(r_x: Array<Complex64, Ix2>, tn1: u64, tn2: u64) -> Option<(V
format!
(
"V_{tn1}_A*V_{tn1}_A*{g_aa:.4}
\
-V_{tn1}_A*V_{tn2}_A*({g_aa:.4}*cos(D_{tn1}_A-D_{tn2}_A)+{b_aa:.4}*sin(D_{tn1}_A-D_{tn2}_A))
\
+V_{tn1}_A*
(V_{tn1}_B*({g_ab:.4}*cos(D_{tn1}_A-D_{tn1}_B)+{b_ab:.4}*sin(D_{tn1}_A-D_{tn1}_B)
))
\
-V_{tn1}_A*
(V_{tn2}_B*({g_ab:.4}*cos(D_{tn1}_A-D_{tn2}_B)+{b_ab:.4}*sin(D_{tn1}_A-D_{tn2}_B))"
,
),
+V_{tn1}_A*
V_{tn1}_B*({g_ab:.4}*cos(D_{tn1}_A-D_{tn1}_B)+{b_ab:.4}*sin(D_{tn1}_A-D_{tn1}_B
))
\
-V_{tn1}_A*
V_{tn2}_B*({g_ab:.4}*cos(D_{tn1}_A-D_{tn2}_B)+{b_ab:.4}*sin(D_{tn1}_A-D_{tn2}_B))"
),
);
//Q_A
result
.push
(
format!
(
"-V_{tn1}_A*V_{tn1}_A*{b_aa:.4}
\
+V_{tn1}_A*V_{tn2}_A*({b_aa:.4}*cos(D_{tn1}_A-D_{tn2}_A)-{g_aa:.4}*sin(D_{tn1}_A-D_{tn2}_A))
\
+V_{tn1}_A*
(V_{tn1}_B*({g_ab:.4}*sin(D_{tn1}_A-D_{tn1}_B)-{b_ab:.4}*cos(D_{tn1}_A-D_{tn1}_B)
))
\
+V_{tn1}_A*
(V_{tn2}_B*({b_ab:.4}*cos(D_{tn1}_A-D_{tn2}_B)-{g_ab:.4}*sin(D_{tn1}_A-D_{tn2}_B))"
,
),
+V_{tn1}_A*
V_{tn1}_B*({g_ab:.4}*sin(D_{tn1}_A-D_{tn1}_B)-{b_ab:.4}*cos(D_{tn1}_A-D_{tn1}_B
))
\
+V_{tn1}_A*
V_{tn2}_B*({b_ab:.4}*cos(D_{tn1}_A-D_{tn2}_B)-{g_ab:.4}*sin(D_{tn1}_A-D_{tn2}_B))"
),
);
//P_B
result
.push
(
format!
(
"V_{tn1}_B*V_{tn1}_B*{g_bb:.4}
\
-V_{tn1}_B*V_{tn2}_B*({g_bb:.4}*cos(D_{tn1}_B-D_{tn2}_B)+{b_bb:.4}*sin(D_{tn1}_B-D_{tn2}_B))
\
+V_{tn1}_B*
(V_{tn1}_A*({g_ba:.4}*cos(D_{tn1}_B-D_{tn1}_A)+{b_ba:.4}*sin(D_{tn1}_B-D_{tn1}_A)
))
\
-V_{tn1}_B*
(V_{tn2}_A*({g_ba:.4}*cos(D_{tn1}_B-D_{tn2}_A)+{b_ba:.4}*sin(D_{tn1}_B-D_{tn2}_A))"
,
),
+V_{tn1}_B*
V_{tn1}_A*({g_ba:.4}*cos(D_{tn1}_B-D_{tn1}_A)+{b_ba:.4}*sin(D_{tn1}_B-D_{tn1}_A
))
\
-V_{tn1}_B*
V_{tn2}_A*({g_ba:.4}*cos(D_{tn1}_B-D_{tn2}_A)+{b_ba:.4}*sin(D_{tn1}_B-D_{tn2}_A))"
),
);
//Q_B
result
.push
(
format!
(
"-V_{tn1}_B*V_{tn1}_B*{b_bb:.4}
\
+V_{tn1}_B*V_{tn2}_B*({b_bb:.4}*cos(D_{tn1}_B-D_{tn2}_B)-{g_bb:.4}*sin(D_{tn1}_B-D_{tn2}_B))
\
+V_{tn1}_B*
(V_{tn1}_A*({g_ba:.4}*sin(D_{tn1}_B-D_{tn1}_A)-{b_ba:.4}*cos(D_{tn1}_B-D_{tn1}_A)
))
\
+V_{tn1}_B*
(V_{tn2}_A*({b_ba:.4}*cos(D_{tn1}_B-D_{tn2}_A)-{g_ba:.4}*sin(D_{tn1}_B-D_{tn2}_A))"
,
),
+V_{tn1}_B*
V_{tn1}_A*({g_ba:.4}*sin(D_{tn1}_B-D_{tn1}_A)-{b_ba:.4}*cos(D_{tn1}_B-D_{tn1}_A
))
\
+V_{tn1}_B*
V_{tn2}_A*({b_ba:.4}*cos(D_{tn1}_B-D_{tn2}_A)-{g_ba:.4}*sin(D_{tn1}_B-D_{tn2}_A))"
),
);
}
// AC
...
...
@@ -171,32 +237,32 @@ fn get_pq_of_acline(r_x: Array<Complex64, Ix2>, tn1: u64, tn2: u64) -> Option<(V
format!
(
"V_{tn1}_A*V_{tn1}_A*{g_aa:.4}
\
-V_{tn1}_A*V_{tn2}_A*({g_aa:.4}*cos(D_{tn1}_A-D_{tn2}_A)+{b_aa:.4}*sin(D_{tn1}_A-D_{tn2}_A))
\
+V_{tn1}_A*
(V_{tn1}_C*({g_ac:.4}*cos(D_{tn1}_A-D_{tn1}_C)+{b_ac:.4}*sin(D_{tn1}_A-D_{tn1}_C)
))
\
-V_{tn1}_A*
(V_{tn2}_C*({g_ac:.4}*cos(D_{tn1}_A-D_{tn2}_C)+{b_ac:.4}*sin(D_{tn1}_A-D_{tn2}_C))"
,
),
+V_{tn1}_A*
V_{tn1}_C*({g_ac:.4}*cos(D_{tn1}_A-D_{tn1}_C)+{b_ac:.4}*sin(D_{tn1}_A-D_{tn1}_C
))
\
-V_{tn1}_A*
V_{tn2}_C*({g_ac:.4}*cos(D_{tn1}_A-D_{tn2}_C)+{b_ac:.4}*sin(D_{tn1}_A-D_{tn2}_C))"
),
);
//Q_A
result
.push
(
format!
(
"-V_{tn1}_A*V_{tn1}_A*{b_aa:.4}
\
+V_{tn1}_A*V_{tn2}_A*({b_aa:.4}*cos(D_{tn1}_A-D_{tn2}_A)-{g_aa:.4}*sin(D_{tn1}_A-D_{tn2}_A))
\
+V_{tn1}_A*
(V_{tn1}_C*({g_ac:.4}*sin(D_{tn1}_A-D_{tn1}_C)-{b_ac:.4}*cos(D_{tn1}_A-D_{tn1}_C)
))
\
+V_{tn1}_A*
(V_{tn2}_C*({b_ac:.4}*cos(D_{tn1}_A-D_{tn2}_C)-{g_ac:.4}*sin(D_{tn1}_A-D_{tn2}_C))"
,
),
+V_{tn1}_A*
V_{tn1}_C*({g_ac:.4}*sin(D_{tn1}_A-D_{tn1}_C)-{b_ac:.4}*cos(D_{tn1}_A-D_{tn1}_C
))
\
+V_{tn1}_A*
V_{tn2}_C*({b_ac:.4}*cos(D_{tn1}_A-D_{tn2}_C)-{g_ac:.4}*sin(D_{tn1}_A-D_{tn2}_C))"
),
);
//P_C
result
.push
(
format!
(
"V_{tn1}_C*V_{tn1}_C*{g_cc:.4}
\
-V_{tn1}_C*V_{tn2}_C*({g_cc:.4}*cos(D_{tn1}_C-D_{tn2}_C)+{b_cc:.4}*sin(D_{tn1}_C-D_{tn2}_C))
\
+V_{tn1}_C*
(V_{tn1}_A*({g_ca:.4}*cos(D_{tn1}_C-D_{tn1}_A)+{b_ca:.4}*sin(D_{tn1}_C-D_{tn1}_A)
))
\
-V_{tn1}_C*
(V_{tn2}_A*({g_ca:.4}*cos(D_{tn1}_C-D_{tn2}_A)+{b_ca:.4}*sin(D_{tn1}_C-D_{tn2}_A))"
,
),
+V_{tn1}_C*
V_{tn1}_A*({g_ca:.4}*cos(D_{tn1}_C-D_{tn1}_A)+{b_ca:.4}*sin(D_{tn1}_C-D_{tn1}_A
))
\
-V_{tn1}_C*
V_{tn2}_A*({g_ca:.4}*cos(D_{tn1}_C-D_{tn2}_A)+{b_ca:.4}*sin(D_{tn1}_C-D_{tn2}_A))"
),
);
//Q_C
result
.push
(
format!
(
"-V_{tn1}_C*V_{tn1}_C*{b_cc:.4}
\
+V_{tn1}_C*V_{tn2}_C*({b_cc:.4}*cos(D_{tn1}_C-D_{tn2}_C)-{g_cc:.4}*sin(D_{tn1}_C-D_{tn2}_C))
\
+V_{tn1}_C*
(V_{tn1}_A*({g_ca:.4}*sin(D_{tn1}_C-D_{tn1}_A)-{b_ca:.4}*cos(D_{tn1}_C-D_{tn1}_A)
))
\
+V_{tn1}_C*
(V_{tn2}_A*({b_ca:.4}*cos(D_{tn1}_C-D_{tn2}_A)-{g_ca:.4}*sin(D_{tn1}_C-D_{tn2}_A))"
,
),
+V_{tn1}_C*
V_{tn1}_A*({g_ca:.4}*sin(D_{tn1}_C-D_{tn1}_A)-{b_ca:.4}*cos(D_{tn1}_C-D_{tn1}_A
))
\
+V_{tn1}_C*
V_{tn2}_A*({b_ca:.4}*cos(D_{tn1}_C-D_{tn2}_A)-{g_ca:.4}*sin(D_{tn1}_C-D_{tn2}_A))"
),
);
}
// BC
...
...
@@ -214,32 +280,32 @@ fn get_pq_of_acline(r_x: Array<Complex64, Ix2>, tn1: u64, tn2: u64) -> Option<(V
format!
(
"V_{tn1}_B*V_{tn1}_B*{g_bb:.4}
\
-V_{tn1}_B*V_{tn2}_B*({g_bb:.4}*cos(D_{tn1}_B-D_{tn2}_B)+{b_bb:.4}*sin(D_{tn1}_B-D_{tn2}_B))
\
+V_{tn1}_B*
(V_{tn1}_C*({g_bc:.4}*cos(D_{tn1}_B-D_{tn1}_C)+{b_bc:.4}*sin(D_{tn1}_B-D_{tn1}_C)
))
\
-V_{tn1}_B*
(V_{tn2}_C*({g_bc:.4}*cos(D_{tn1}_B-D_{tn2}_C)+{b_bc:.4}*sin(D_{tn1}_B-D_{tn2}_C))"
,
),
+V_{tn1}_B*
V_{tn1}_C*({g_bc:.4}*cos(D_{tn1}_B-D_{tn1}_C)+{b_bc:.4}*sin(D_{tn1}_B-D_{tn1}_C
))
\
-V_{tn1}_B*
V_{tn2}_C*({g_bc:.4}*cos(D_{tn1}_B-D_{tn2}_C)+{b_bc:.4}*sin(D_{tn1}_B-D_{tn2}_C))"
),
);
//Q_B
result
.push
(
format!
(
"-V_{tn1}_B*V_{tn1}_B*{b_bb:.4}
\
+V_{tn1}_B*V_{tn2}_B*({b_bb:.4}*cos(D_{tn1}_B-D_{tn2}_B)-{g_bb:.4}*sin(D_{tn1}_B-D_{tn2}_B))
\
+V_{tn1}_B*
(V_{tn1}_C*({g_bc:.4}*sin(D_{tn1}_B-D_{tn1}_C)-{b_bc:.4}*cos(D_{tn1}_B-D_{tn1}_C)
))
\
+V_{tn1}_B*
(V_{tn2}_C*({b_bc:.4}*cos(D_{tn1}_B-D_{tn2}_C)-{g_bc:.4}*sin(D_{tn1}_B-D_{tn2}_C))"
,
),
+V_{tn1}_B*
V_{tn1}_C*({g_bc:.4}*sin(D_{tn1}_B-D_{tn1}_C)-{b_bc:.4}*cos(D_{tn1}_B-D_{tn1}_C
))
\
+V_{tn1}_B*
V_{tn2}_C*({b_bc:.4}*cos(D_{tn1}_B-D_{tn2}_C)-{g_bc:.4}*sin(D_{tn1}_B-D_{tn2}_C))"
),
);
//P_C
result
.push
(
format!
(
"V_{tn1}_C*V_{tn1}_C*{g_cc:.4}
\
-V_{tn1}_C*V_{tn2}_C*({g_cc:.4}*cos(D_{tn1}_C-D_{tn2}_C)+{b_cc:.4}*sin(D_{tn1}_C-D_{tn2}_C))
\
+V_{tn1}_C*
(V_{tn1}_B*({g_cb:.4}*cos(D_{tn1}_C-D_{tn1}_B)+{b_cb:.4}*sin(D_{tn1}_C-D_{tn1}_B)
))
\
-V_{tn1}_C*
(V_{tn2}_B*({g_cb:.4}*cos(D_{tn1}_C-D_{tn2}_B)+{b_cb:.4}*sin(D_{tn1}_C-D_{tn2}_B))"
,
),
+V_{tn1}_C*
V_{tn1}_B*({g_cb:.4}*cos(D_{tn1}_C-D_{tn1}_B)+{b_cb:.4}*sin(D_{tn1}_C-D_{tn1}_B
))
\
-V_{tn1}_C*
V_{tn2}_B*({g_cb:.4}*cos(D_{tn1}_C-D_{tn2}_B)+{b_cb:.4}*sin(D_{tn1}_C-D_{tn2}_B))"
),
);
//Q_C
result
.push
(
format!
(
"-V_{tn1}_C*V_{tn1}_C*{b_cc:.4}
\
+V_{tn1}_C*V_{tn2}_C*({b_cc:.4}*cos(D_{tn1}_C-D_{tn2}_C)-{g_cc:.4}*sin(D_{tn1}_C-D_{tn2}_C))
\
+V_{tn1}_C*
(V_{tn1}_B*({g_cb:.4}*sin(D_{tn1}_C-D_{tn1}_B)-{b_cb:.4}*cos(D_{tn1}_C-D_{tn1}_B)
))
\
+V_{tn1}_C*
(V_{tn2}_B*({b_cb:.4}*cos(D_{tn1}_C-D_{tn2}_B)-{g_cb:.4}*sin(D_{tn1}_C-D_{tn2}_B))"
,
),
+V_{tn1}_C*
V_{tn1}_B*({g_cb:.4}*sin(D_{tn1}_C-D_{tn1}_B)-{b_cb:.4}*cos(D_{tn1}_C-D_{tn1}_B
))
\
+V_{tn1}_C*
V_{tn2}_B*({b_cb:.4}*cos(D_{tn1}_C-D_{tn2}_B)-{g_cb:.4}*sin(D_{tn1}_C-D_{tn2}_B))"
),
);
}
// ABC
...
...
@@ -263,67 +329,110 @@ fn get_pq_of_acline(r_x: Array<Complex64, Ix2>, tn1: u64, tn2: u64) -> Option<(V
format!
(
"V_{tn1}_A*V_{tn1}_A*{g_aa:.4}
\
-V_{tn1}_A*V_{tn2}_A*({g_aa:.4}*cos(D_{tn1}_A-D_{tn2}_A)+{b_aa:.4}*sin(D_{tn1}_A-D_{tn2}_A))
\
+V_{tn1}_A*
(
V_{tn1}_B*({g_ab:.4}*cos(D_{tn1}_A-D_{tn1}_B)+{b_ab:.4}*sin(D_{tn1}_A-D_{tn1}_B))
\
-V_{tn1}_A*
(
V_{tn2}_B*({g_ab:.4}*cos(D_{tn1}_A-D_{tn2}_B)+{b_ab:.4}*sin(D_{tn1}_A-D_{tn2}_B))
\
+V_{tn1}_A*
(V_{tn1}_C*({g_ac:.4}*cos(D_{tn1}_A-D_{tn1}_C)+{b_ac:.4}*sin(D_{tn1}_A-D_{tn1}_C)
))
\
-V_{tn1}_A*
(V_{tn2}_C*({g_ac:.4}*cos(D_{tn1}_A-D_{tn2}_C)+{b_ac:.4}*sin(D_{tn1}_A-D_{tn2}_C))"
,
),
+V_{tn1}_A*V_{tn1}_B*({g_ab:.4}*cos(D_{tn1}_A-D_{tn1}_B)+{b_ab:.4}*sin(D_{tn1}_A-D_{tn1}_B))
\
-V_{tn1}_A*V_{tn2}_B*({g_ab:.4}*cos(D_{tn1}_A-D_{tn2}_B)+{b_ab:.4}*sin(D_{tn1}_A-D_{tn2}_B))
\
+V_{tn1}_A*
V_{tn1}_C*({g_ac:.4}*cos(D_{tn1}_A-D_{tn1}_C)+{b_ac:.4}*sin(D_{tn1}_A-D_{tn1}_C
))
\
-V_{tn1}_A*
V_{tn2}_C*({g_ac:.4}*cos(D_{tn1}_A-D_{tn2}_C)+{b_ac:.4}*sin(D_{tn1}_A-D_{tn2}_C))"
),
);
//Q_A
result
.push
(
format!
(
"-V_{tn1}_A*V_{tn1}_A*{b_aa:.4}
\
+V_{tn1}_A*V_{tn2}_A*({b_aa:.4}*cos(D_{tn1}_A-D_{tn2}_A)-{g_aa:.4}*sin(D_{tn1}_A-D_{tn2}_A))
\
+V_{tn1}_A*
(
V_{tn1}_B*({g_ab:.4}*sin(D_{tn1}_A-D_{tn1}_B)-{b_ab:.4}*cos(D_{tn1}_A-D_{tn1}_B))
\
+V_{tn1}_A*
(
V_{tn2}_B*({b_ab:.4}*cos(D_{tn1}_A-D_{tn2}_B)-{g_ab:.4}*sin(D_{tn1}_A-D_{tn2}_B))
\
+V_{tn1}_A*
(
V_{tn1}_C*({g_ac:.4}*sin(D_{tn1}_A-D_{tn1}_C)-{b_ac:.4}*cos(D_{tn1}_A-D_{tn1}_C))
\
+V_{tn1}_A*
(V_{tn2}_C*({b_ac:.4}*cos(D_{tn1}_A-D_{tn2}_C)-{g_ac:.4}*sin(D_{tn1}_A-D_{tn2}_C))"
,
),
+V_{tn1}_A*V_{tn1}_B*({g_ab:.4}*sin(D_{tn1}_A-D_{tn1}_B)-{b_ab:.4}*cos(D_{tn1}_A-D_{tn1}_B))
\
+V_{tn1}_A*V_{tn2}_B*({b_ab:.4}*cos(D_{tn1}_A-D_{tn2}_B)-{g_ab:.4}*sin(D_{tn1}_A-D_{tn2}_B))
\
+V_{tn1}_A*V_{tn1}_C*({g_ac:.4}*sin(D_{tn1}_A-D_{tn1}_C)-{b_ac:.4}*cos(D_{tn1}_A-D_{tn1}_C))
\
+V_{tn1}_A*
V_{tn2}_C*({b_ac:.4}*cos(D_{tn1}_A-D_{tn2}_C)-{g_ac:.4}*sin(D_{tn1}_A-D_{tn2}_C))"
),
);
//P_B
result
.push
(
format!
(
"V_{tn1}_B*V_{tn1}_B*{g_bb:.4}
\
-V_{tn1}_B*V_{tn2}_B*({g_bb:.4}*cos(D_{tn1}_B-D_{tn2}_B)+{b_bb:.4}*sin(D_{tn1}_B-D_{tn2}_B))
\
+V_{tn1}_B*
(
V_{tn1}_A*({g_ba:.4}*cos(D_{tn1}_B-D_{tn1}_A)+{b_ba:.4}*sin(D_{tn1}_B-D_{tn1}_A))
\
-V_{tn1}_B*
(
V_{tn2}_A*({g_ba:.4}*cos(D_{tn1}_B-D_{tn2}_A)+{b_ba:.4}*sin(D_{tn1}_B-D_{tn2}_A))
\
+V_{tn1}_B*
(V_{tn1}_C*({g_bc:.4}*cos(D_{tn1}_B-D_{tn1}_C)+{b_bc:.4}*sin(D_{tn1}_B-D_{tn1}_C)
))
\
-V_{tn1}_B*
(V_{tn2}_C*({g_bc:.4}*cos(D_{tn1}_B-D_{tn2}_C)+{b_bc:.4}*sin(D_{tn1}_B-D_{tn2}_C))"
,
),
+V_{tn1}_B*V_{tn1}_A*({g_ba:.4}*cos(D_{tn1}_B-D_{tn1}_A)+{b_ba:.4}*sin(D_{tn1}_B-D_{tn1}_A))
\
-V_{tn1}_B*V_{tn2}_A*({g_ba:.4}*cos(D_{tn1}_B-D_{tn2}_A)+{b_ba:.4}*sin(D_{tn1}_B-D_{tn2}_A))
\
+V_{tn1}_B*
V_{tn1}_C*({g_bc:.4}*cos(D_{tn1}_B-D_{tn1}_C)+{b_bc:.4}*sin(D_{tn1}_B-D_{tn1}_C
))
\
-V_{tn1}_B*
V_{tn2}_C*({g_bc:.4}*cos(D_{tn1}_B-D_{tn2}_C)+{b_bc:.4}*sin(D_{tn1}_B-D_{tn2}_C))"
),
);
//Q_B
result
.push
(
format!
(
"-V_{tn1}_B*V_{tn1}_B*{b_bb:.4}
\
+V_{tn1}_B*V_{tn2}_B*({b_bb:.4}*cos(D_{tn1}_B-D_{tn2}_B)-{g_bb:.4}*sin(D_{tn1}_B-D_{tn2}_B))
\
+V_{tn1}_B*
(
V_{tn1}_A*({g_ba:.4}*sin(D_{tn1}_B-D_{tn1}_A)-{b_ba:.4}*cos(D_{tn1}_B-D_{tn1}_A))
\
+V_{tn1}_B*
(
V_{tn2}_A*({b_ba:.4}*cos(D_{tn1}_B-D_{tn2}_A)-{g_ba:.4}*sin(D_{tn1}_B-D_{tn2}_A))
\
+V_{tn1}_B*
(
V_{tn1}_C*({g_bc:.4}*sin(D_{tn1}_B-D_{tn1}_C)-{b_bc:.4}*cos(D_{tn1}_B-D_{tn1}_C))
\
+V_{tn1}_B*
(V_{tn2}_C*({b_bc:.4}*cos(D_{tn1}_B-D_{tn2}_C)-{g_bc:.4}*sin(D_{tn1}_B-D_{tn2}_C))"
,
),
+V_{tn1}_B*V_{tn1}_A*({g_ba:.4}*sin(D_{tn1}_B-D_{tn1}_A)-{b_ba:.4}*cos(D_{tn1}_B-D_{tn1}_A))
\
+V_{tn1}_B*V_{tn2}_A*({b_ba:.4}*cos(D_{tn1}_B-D_{tn2}_A)-{g_ba:.4}*sin(D_{tn1}_B-D_{tn2}_A))
\
+V_{tn1}_B*V_{tn1}_C*({g_bc:.4}*sin(D_{tn1}_B-D_{tn1}_C)-{b_bc:.4}*cos(D_{tn1}_B-D_{tn1}_C))
\
+V_{tn1}_B*
V_{tn2}_C*({b_bc:.4}*cos(D_{tn1}_B-D_{tn2}_C)-{g_bc:.4}*sin(D_{tn1}_B-D_{tn2}_C))"
),
);
//P_C
result
.push
(
format!
(
"V_{tn1}_C*V_{tn1}_C*{g_cc:.4}
\
-V_{tn1}_C*V_{tn2}_C*({g_cc:.4}*cos(D_{tn1}_C-D_{tn2}_C)+{b_cc:.4}*sin(D_{tn1}_C-D_{tn2}_C))
\
+V_{tn1}_C*
(
V_{tn1}_A*({g_ca:.4}*cos(D_{tn1}_C-D_{tn1}_A)+{b_ca:.4}*sin(D_{tn1}_C-D_{tn1}_A))
\
-V_{tn1}_C*
(
V_{tn2}_A*({g_ca:.4}*cos(D_{tn1}_C-D_{tn2}_A)+{b_ca:.4}*sin(D_{tn1}_C-D_{tn2}_A))
\
+V_{tn1}_C*
(V_{tn1}_B*({g_cb:.4}*cos(D_{tn1}_C-D_{tn1}_B)+{b_cb:.4}*sin(D_{tn1}_C-D_{tn1}_B)
))
\
-V_{tn1}_C*
(V_{tn2}_B*({g_cb:.4}*cos(D_{tn1}_C-D_{tn2}_B)+{b_cb:.4}*sin(D_{tn1}_C-D_{tn2}_B))"
,
),
+V_{tn1}_C*V_{tn1}_A*({g_ca:.4}*cos(D_{tn1}_C-D_{tn1}_A)+{b_ca:.4}*sin(D_{tn1}_C-D_{tn1}_A))
\
-V_{tn1}_C*V_{tn2}_A*({g_ca:.4}*cos(D_{tn1}_C-D_{tn2}_A)+{b_ca:.4}*sin(D_{tn1}_C-D_{tn2}_A))
\
+V_{tn1}_C*
V_{tn1}_B*({g_cb:.4}*cos(D_{tn1}_C-D_{tn1}_B)+{b_cb:.4}*sin(D_{tn1}_C-D_{tn1}_B
))
\
-V_{tn1}_C*
V_{tn2}_B*({g_cb:.4}*cos(D_{tn1}_C-D_{tn2}_B)+{b_cb:.4}*sin(D_{tn1}_C-D_{tn2}_B))"
),
);
//Q_C
result
.push
(
format!
(
"-V_{tn1}_C*V_{tn1}_C*{b_cc:.4}
\
+V_{tn1}_C*V_{tn2}_C*({b_cc:.4}*cos(D_{tn1}_C-D_{tn2}_C)-{g_cc:.4}*sin(D_{tn1}_C-D_{tn2}_C))
\
+V_{tn1}_C*
(
V_{tn1}_A*({g_ca:.4}*sin(D_{tn1}_C-D_{tn1}_A)-{b_ca:.4}*cos(D_{tn1}_C-D_{tn1}_A))
\
+V_{tn1}_C*
(
V_{tn2}_A*({b_ca:.4}*cos(D_{tn1}_C-D_{tn2}_A)-{g_ca:.4}*sin(D_{tn1}_C-D_{tn2}_A))
\
+V_{tn1}_C*
(
V_{tn1}_B*({g_cb:.4}*sin(D_{tn1}_C-D_{tn1}_B)-{b_cb:.4}*cos(D_{tn1}_C-D_{tn1}_B))
\
+V_{tn1}_C*
(V_{tn2}_B*({b_cb:.4}*cos(D_{tn1}_C-D_{tn2}_B)-{g_cb:.4}*sin(D_{tn1}_C-D_{tn2}_B))"
,
),
+V_{tn1}_C*V_{tn1}_A*({g_ca:.4}*sin(D_{tn1}_C-D_{tn1}_A)-{b_ca:.4}*cos(D_{tn1}_C-D_{tn1}_A))
\
+V_{tn1}_C*V_{tn2}_A*({b_ca:.4}*cos(D_{tn1}_C-D_{tn2}_A)-{g_ca:.4}*sin(D_{tn1}_C-D_{tn2}_A))
\
+V_{tn1}_C*V_{tn1}_B*({g_cb:.4}*sin(D_{tn1}_C-D_{tn1}_B)-{b_cb:.4}*cos(D_{tn1}_C-D_{tn1}_B))
\
+V_{tn1}_C*
V_{tn2}_B*({b_cb:.4}*cos(D_{tn1}_C-D_{tn2}_B)-{g_cb:.4}*sin(D_{tn1}_C-D_{tn2}_B))"
),
);
}
_
=>
{
return
None
;
}
};
let
re
=
result
.clone
();
Some
((
result
,
mode
))
}
pub
fn
extend_exp_pq_of_acline
(
power_exp
:
&
mut
HashMap
<&
str
,
String
>
,
exps
:
Vec
<
String
>
,
mode
:
u32
)
{
let
key
=
match
mode
{
1
=>
vec!
[
"P_A"
,
"Q_A"
],
2
=>
vec!
[
"P_B"
,
"Q_B"
],
4
=>
vec!
[
"P_C"
,
"Q_C"
],
3
=>
vec!
[
"P_A"
,
"Q_A"
,
"P_B"
,
"Q_B"
],
5
=>
vec!
[
"P_A"
,
"Q_A"
,
"P_C"
,
"Q_C"
],
6
=>
vec!
[
"P_B"
,
"Q_B"
,
"P_C"
,
"Q_C"
],
7
=>
vec!
[
"P_A"
,
"Q_A"
,
"P_B"
,
"Q_B"
,
"P_C"
,
"Q_C"
],
_
=>
return
,
};
for
i
in
0
..
key
.len
()
{
let
k
=
key
[
i
];
if
let
Some
(
exp
)
=
power_exp
.get
(
k
)
{
power_exp
.insert
(
k
,
format!
(
"{}+{}"
,
exp
,
exps
[
i
]));
}
else
{
power_exp
.insert
(
k
,
format!
(
"{}"
,
exps
[
i
]));
};
}
}
pub
fn
get_node_pq_load_constraints
(
constraint
:
&
mut
Vec
<
String
>
,
power_exp
:
HashMap
<&
str
,
String
>
,
tn
:
u64
)
{
if
let
Some
(
exp
)
=
power_exp
.get
(
"P_A"
)
{
constraint
.push
(
format!
(
"P_{tn}_A+{}:[0/0]"
,
exp
));
}
if
let
Some
(
exp
)
=
power_exp
.get
(
"Q_A"
)
{
constraint
.push
(
format!
(
"Q_{tn}_A+{}:[0/0]"
,
exp
));
}
if
let
Some
(
exp
)
=
power_exp
.get
(
"P_B"
)
{
constraint
.push
(
format!
(
"P_{tn}_B+{}:[0/0]"
,
exp
));
}
if
let
Some
(
exp
)
=
power_exp
.get
(
"Q_B"
)
{
constraint
.push
(
format!
(
"Q_{tn}_B+{}:[0/0]"
,
exp
));
}
if
let
Some
(
exp
)
=
power_exp
.get
(
"P_C"
)
{
constraint
.push
(
format!
(
"P_{tn}_C+{}:[0/0]"
,
exp
));
}
if
let
Some
(
exp
)
=
power_exp
.get
(
"Q_C"
)
{
constraint
.push
(
format!
(
"Q_{tn}_C+{}:[0/0]"
,
exp
));
}
}
// test
#[cfg(test)]
mod
test
{
...
...
@@ -359,4 +468,35 @@ mod test {
let
(
p
,
q
)
=
get_pq_of_acline
(
arr
,
1
,
2
)
.unwrap
();
assert_eq!
(
p
[
0
],
"V_1_C*(V_1_C*0.2875-V_2_C*(0.2875*cos(D_1_C-D_2_C)+-0.8715*sin(D_1_C-D_2_C)))"
);
}
}
\ No newline at end of file
// |source1|.@1@.|line2|.@2@.|load4|
// 1 2 3 4
#[test]
fn
test_get_pf_nlp_constraints
()
{
let
tns
=
vec!
[
1
,
2
];
let
dyn_topo
=
vec!
[
vec!
[
1
,
1
],
vec!
[
2
,
2
]];
let
dev_topo
=
vec!
[
vec!
[
1
,
1
,
1
,
1
],
vec!
[
2
,
1
,
1
,
2
],
vec!
[
3
,
2
,
2
,
2
],
vec!
[
4
,
2
,
2
,
4
]];
let
mut
dev_matrix
=
HashMap
::
new
();
dev_matrix
.insert
(
2
,
vec!
[
array!
[[
0.3465
,
0.1560
,
0.1580
],
[
0.1560
,
0.3375
,
0.1535
],
[
0.1580
,
0.1535
,
0.3414
]],
array!
[[
1.0179
,
0.5017
,
0.4236
],
[
0.5017
,
1.0478
,
0.3849
],
[
0.4236
,
0.3849
,
1.0348
]]]);
// dev_matrix.insert(2, vec![array![[1.3425, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.3414]],
// array![[0.5124, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 1.0348]]]);
// dev_matrix.insert(2, vec![array![[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.3414]],
// array![[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 1.0348]]]);
let
input_tns
=
vec!
[
1
,
2
,
2
,
2
,
2
,
2
,
2
];
let
input_phases
=
vec!
[
MeasPhase
::
Total
,
MeasPhase
::
A
,
MeasPhase
::
A
,
MeasPhase
::
B
,
MeasPhase
::
B
,
MeasPhase
::
C
,
MeasPhase
::
C
];
let
input_types
=
vec!
[
DataUnit
::
V
,
DataUnit
::
W
,
DataUnit
::
Var
,
DataUnit
::
W
,
DataUnit
::
Var
,
DataUnit
::
W
,
DataUnit
::
Var
];
let
input_values
=
vec!
[
200.0
,
1000.0
,
100.0
,
1100.0
,
200.0
,
900.0
,
400.0
];
let
constraints
=
get_pf_nlp_constraints
(
&
tns
,
dyn_topo
,
dev_topo
,
dev_matrix
,
input_tns
,
input_phases
,
input_types
,
input_values
);
assert
!
(
constraints
.is_some
());
let
constraints
=
constraints
.unwrap
();
assert_eq!
(
constraints
.len
(),
24
);
for
c
in
constraints
{
println!
(
"{}"
,
c
);
}
println!
(
"{}"
,
get_pf_nlp_variables
(
&
tns
));
}
}
mems/examples/ds-dev-ohm-cal/src/lib.rs
查看文件 @
04ad946d
...
...
@@ -71,6 +71,7 @@ pub unsafe fn run(ptr: i32, len: u32) -> u64 {
}
}
}
// todo: add other types: transformer\regulator
}
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论