1.重新组织了文件。
2.准备试试把所有元素都读入内存中。 Signed-off-by: facat@lab.com <facat@lab.com>
This commit is contained in:
390
core/topology.cpp
Normal file
390
core/topology.cpp
Normal file
@@ -0,0 +1,390 @@
|
||||
#include "head.h"
|
||||
#include <QStringRef>
|
||||
|
||||
//extern vector<QString> ResContainer;
|
||||
//extern vector<QString> Notfound;
|
||||
//extern QString cn;
|
||||
//extern int bus_no;
|
||||
//extern int balance_node;
|
||||
//extern int k;
|
||||
#include "qt_readxml.h"
|
||||
void Qt_readxml::XmlReaderTopologyAnalyse()
|
||||
|
||||
{
|
||||
k=0;
|
||||
bus_no=busbar_section.size();
|
||||
int terminal_no=terminal.size();
|
||||
ResContainer.clear();
|
||||
Notfound.clear();
|
||||
for (int i=0;i<terminal_no;i++ )
|
||||
{
|
||||
ResContainer.push_back(terminal[i].ConductingEquipment_res[0]);
|
||||
ResContainer.push_back(terminal[i].ConnectivityNode_res[0]);
|
||||
QString type;
|
||||
int res_no=ResContainer.size();
|
||||
for (int j=0;j<res_no;j++)
|
||||
{
|
||||
std::vector<List>::iterator it = find_if(list1.begin(), list1.end(), vector_finder(ResContainer[0].remove(0,1))); //得到与ID号相对应的元素
|
||||
if(it!=list1.end())
|
||||
{
|
||||
QString a;
|
||||
type=it->name;
|
||||
if (type=="busbar_section")
|
||||
{
|
||||
busbar_section[it->no].Terminal_res.push_back(terminal[i].ID);
|
||||
}
|
||||
else if (type=="substation")
|
||||
{
|
||||
substation[it->no].Terminal_res.push_back(terminal[i].ID);
|
||||
}
|
||||
else if (type=="connectivity_node")
|
||||
{
|
||||
connectivity_node[it->no].Terminal_res.push_back(terminal[i].ID);
|
||||
}
|
||||
else if (type=="acline_segment")
|
||||
{
|
||||
acline_segment[it->no].Terminal_res.push_back(terminal[i].ID);
|
||||
}
|
||||
else if (type=="disconnector")
|
||||
{
|
||||
disconnector[it->no].Terminal_res.push_back(terminal[i].ID);
|
||||
}
|
||||
else if (type=="power_transformer")
|
||||
{
|
||||
power_transformer[it->no].Terminal_res.push_back(terminal[i].ID);
|
||||
}
|
||||
else if (type=="transformer_winding")
|
||||
{
|
||||
transformer_winding[it->no].Terminal_res.push_back(terminal[i].ID);
|
||||
}
|
||||
else if (type=="ground_disconnector")
|
||||
{
|
||||
ground_disconnector[it->no].Terminal_res.push_back(terminal[i].ID);
|
||||
}
|
||||
else if (type=="composite_switch")
|
||||
{
|
||||
composite_switch[it->no].Terminal_res.push_back(terminal[i].ID);
|
||||
}
|
||||
else if (type=="circuit")
|
||||
{
|
||||
circuit[it->no].Terminal_res.push_back(terminal[i].ID);
|
||||
}
|
||||
else if (type=="bay")
|
||||
{
|
||||
bay[it->no].Terminal_res.push_back(terminal[i].ID);
|
||||
}
|
||||
else if (type=="connector")
|
||||
{
|
||||
connector[it->no].Terminal_res.push_back(terminal[i].ID);
|
||||
}
|
||||
else if (type=="fuse")
|
||||
{
|
||||
fuse[it->no].Terminal_res.push_back(terminal[i].ID);
|
||||
}
|
||||
else if (type=="pole")
|
||||
{
|
||||
pole[it->no].Terminal_res.push_back(terminal[i].ID);
|
||||
}
|
||||
else if (type=="load_break_switch")
|
||||
{
|
||||
load_break_switch[it->no].Terminal_res.push_back(terminal[i].ID);
|
||||
}
|
||||
else if (type=="breaker")
|
||||
{
|
||||
breaker[it->no].Terminal_res.push_back(terminal[i].ID);
|
||||
}
|
||||
}
|
||||
//else if(ResContainer[0].left(2)=="CN")
|
||||
else
|
||||
{
|
||||
ConnectivityNode CN;
|
||||
CN.ID = ResContainer[0];
|
||||
CN.Terminal_res.push_back(terminal[i].ID);
|
||||
CN.flag = 0;
|
||||
connectivity_node.push_back(CN);
|
||||
QString name="connectivity_node";
|
||||
XmlReaderFormList(i5,name,CN.ID);
|
||||
i5++;
|
||||
Notfound.push_back(ResContainer[0]);
|
||||
}
|
||||
|
||||
ResContainer.erase(ResContainer.begin());
|
||||
}
|
||||
}
|
||||
int i=0;
|
||||
if (!bus_no)
|
||||
{
|
||||
BusbarSection T1;
|
||||
T1.flag=0;
|
||||
T1.BaseVoltage_res.push_back(acline_segment[i].BaseVoltage_res[0]);
|
||||
T1.Terminal_res.push_back(acline_segment[i].Terminal_res[0]);
|
||||
T1.busSequence=0;
|
||||
busbar_section.push_back(T1);
|
||||
bus_no++;
|
||||
}
|
||||
int ac_no=acline_segment.size();
|
||||
|
||||
for (int i=0;i<ac_no;i++)
|
||||
{
|
||||
std::vector<AC_kind>::iterator it = find_if(ac_kind.begin(), ac_kind.end(), ac_finder(acline_segment[i].GIS_ID)); //得到与ID号相对应的元素
|
||||
if(it==ac_kind.end())
|
||||
{
|
||||
AC_kind A;
|
||||
A.GIS_ID=acline_segment[i].GIS_ID;
|
||||
A.quantity=1;
|
||||
A.calculateTimes=0;
|
||||
ac_kind.push_back(A);
|
||||
}
|
||||
else
|
||||
{
|
||||
(it->quantity)++;
|
||||
}
|
||||
}
|
||||
|
||||
int j=0;
|
||||
for (i=0;i<bus_no;i++)
|
||||
{
|
||||
if (!busbar_section[i].flag && busbar_section[i].Terminal_res.size())
|
||||
{
|
||||
j++; //拓扑岛编号
|
||||
int n=1; //节点编号
|
||||
busbar_section[i].flag=1;
|
||||
busbar_section[i].island=j;
|
||||
int sign=0; //sign=0表示有对线路或变压器编号
|
||||
int res_no=busbar_section[i].Terminal_res.size();
|
||||
for (int m=0;m<res_no;m++)
|
||||
{
|
||||
ResContainer.push_back(busbar_section[i].Terminal_res[m]);
|
||||
}
|
||||
sign=XmlReaderFindResource(j,n,sign);
|
||||
while (nextBus.size())
|
||||
{
|
||||
ResContainer.push_back(nextBus[0]);
|
||||
nextBus.erase(nextBus.begin());
|
||||
n=n+1-sign;
|
||||
sign=1;
|
||||
sign=XmlReaderFindResource(j,n,sign);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int Qt_readxml::XmlReaderFindResource(int j, int n,int sign)
|
||||
{
|
||||
QString type;
|
||||
int res_no=ResContainer.size();
|
||||
for (int i=0;i<res_no;i++)
|
||||
{
|
||||
std::vector<List>::iterator it = find_if(list1.begin(), list1.end(), vector_finder(ResContainer[0])); //得到与ID号相对应的元素
|
||||
ResContainer.erase(ResContainer.begin());
|
||||
if(it!=list1.end())
|
||||
{
|
||||
type=it->name;
|
||||
if (type=="terminal" && !terminal[it->no].flag)
|
||||
{
|
||||
terminal[it->no].flag=n;
|
||||
terminal[it->no].island=j;
|
||||
ResContainer.push_back(terminal[it->no].ConductingEquipment_res[0].remove(0,1));
|
||||
ResContainer.push_back(terminal[it->no].ConnectivityNode_res[0].remove(0,1));
|
||||
}
|
||||
|
||||
else if (type=="connectivity_node" && !connectivity_node[it->no].flag)
|
||||
{
|
||||
connectivity_node[it->no].flag=n;
|
||||
connectivity_node[it->no].island = j;
|
||||
int no1=connectivity_node[it->no].Terminal_res.size();
|
||||
if (no1)
|
||||
{
|
||||
for (int m=0;m<no1;m++)
|
||||
{
|
||||
ResContainer.push_back(connectivity_node[it->no].Terminal_res[m]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else if (type=="acline_segment")
|
||||
{
|
||||
isAcnode = 0;
|
||||
acline_segment[it->no].island=j;
|
||||
if (!acline_segment[it->no].link_from)
|
||||
{
|
||||
acline_segment[it->no].link_from=n;
|
||||
nextBus.push_back(acline_segment[it->no].ID);
|
||||
sign=0;
|
||||
}
|
||||
else if (!acline_segment[it->no].link_to)
|
||||
{
|
||||
int no1=acline_segment[it->no].Terminal_res.size();
|
||||
if (no1)
|
||||
{
|
||||
for (int m=0;m<no1;m++)
|
||||
{
|
||||
ResContainer.push_back(acline_segment[it->no].Terminal_res[m]);
|
||||
}
|
||||
}
|
||||
acline_segment[it->no].link_to=n;
|
||||
sign=0;
|
||||
std::vector<AC_kind>::iterator ac = find_if(ac_kind.begin(), ac_kind.end(), ac_finder(acline_segment[it->no].GIS_ID));
|
||||
(ac->calculateTimes)++;
|
||||
}
|
||||
}
|
||||
|
||||
else if (type=="load_break_switch" && !load_break_switch[it->no].flag)
|
||||
{
|
||||
load_break_switch[it->no].flag=n;
|
||||
load_break_switch[it->no].island=j;
|
||||
int no1=load_break_switch[it->no].Terminal_res.size();
|
||||
if (no1)
|
||||
{
|
||||
for (int m=0;m<no1;m++)
|
||||
{
|
||||
ResContainer.push_back(load_break_switch[it->no].Terminal_res[m]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
else if (type=="disconnector" && !disconnector[it->no].flag)
|
||||
{
|
||||
disconnector[it->no].flag=n;
|
||||
disconnector[it->no].island=j;
|
||||
int no1=disconnector[it->no].Terminal_res.size();
|
||||
if (no1)
|
||||
{
|
||||
for (int m=0;m<no1;m++)
|
||||
{
|
||||
ResContainer.push_back(disconnector[it->no].Terminal_res[m]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else if (type=="transformer_winding"&& !transformer_winding[it->no].flag)
|
||||
{
|
||||
isAcnode = 0;
|
||||
int a=transformer_winding[it->no].MemberOf_PowerTransformer_res[0].length();
|
||||
QString b=transformer_winding[it->no].MemberOf_PowerTransformer_res[0];
|
||||
std::vector<List>::iterator trans = find_if(list1.begin(), list1.end(), vector_finder(b.right(a-1)));
|
||||
transformer_winding[it->no].island = j;
|
||||
transformer_winding[it->no].flag = n;
|
||||
if (!power_transformer[trans->no].link_1)
|
||||
{
|
||||
power_transformer[trans->no].link_1=n;
|
||||
power_transformer[trans->no].island=j;
|
||||
sign=0;
|
||||
//isAcnode = 0;
|
||||
if (transformer_winding[it->no].description=="低压侧绕组")
|
||||
{
|
||||
power_transformer[trans->no].low=n;
|
||||
}
|
||||
int winding_no=transformer_winding.size();
|
||||
for (int m=0;m<winding_no;m++)
|
||||
{
|
||||
if (transformer_winding[m].MemberOf_PowerTransformer_res[0]==b && m!=(it->no))
|
||||
{
|
||||
nextBus.push_back(transformer_winding[m].ID);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (!power_transformer[trans->no].link_2&&power_transformer[trans->no].link_1!=n)
|
||||
{
|
||||
power_transformer[trans->no].link_2=n;
|
||||
sign=0;
|
||||
//isAcnode = 0;
|
||||
if (transformer_winding[it->no].description=="低压侧绕组")
|
||||
{
|
||||
power_transformer[trans->no].low=n;
|
||||
}
|
||||
if (transformer_winding[it->no].Terminal_res.size())
|
||||
{
|
||||
ResContainer.push_back(transformer_winding[it->no].Terminal_res[0]);
|
||||
}
|
||||
}
|
||||
else if (!power_transformer[trans->no].link_3&&power_transformer[trans->no].link_2!=n &&power_transformer[trans->no].link_1!=n)
|
||||
{
|
||||
power_transformer[trans->no].link_3=n;
|
||||
sign=0;
|
||||
//isAcnode = 0;
|
||||
if (transformer_winding[it->no].description=="低压侧绕组")
|
||||
{
|
||||
power_transformer[trans->no].low=n;
|
||||
}
|
||||
if (transformer_winding[it->no].Terminal_res.size())
|
||||
{
|
||||
ResContainer.push_back(transformer_winding[it->no].Terminal_res[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else if (type=="connector" && !connector[it->no].flag)
|
||||
{
|
||||
connector[it->no].link_from=n;
|
||||
connector[it->no].island=j;
|
||||
int no1=connector[it->no].Terminal_res.size();
|
||||
if (no1)
|
||||
{
|
||||
for (int m=0;m<no1;m++)
|
||||
{
|
||||
ResContainer.push_back(connector[it->no].Terminal_res[m]);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
else if (type=="fuse" && !fuse[it->no].flag)
|
||||
{
|
||||
fuse[it->no].flag=n;
|
||||
fuse[it->no].island=j;
|
||||
int no1=fuse[it->no].Terminal_res.size();
|
||||
if (no1)
|
||||
for (int m=0;m<no1;m++)
|
||||
{
|
||||
ResContainer.push_back(fuse[it->no].Terminal_res[m]);
|
||||
}
|
||||
}
|
||||
|
||||
else if (type=="ground_disconnector" && !ground_disconnector[it->no].flag)
|
||||
{
|
||||
ground_disconnector[it->no].flag=n;
|
||||
ground_disconnector[it->no].island=j;
|
||||
int no1=ground_disconnector[it->no].Terminal_res.size();
|
||||
for (int m=0;m<no1;m++)
|
||||
{
|
||||
ResContainer.push_back(ground_disconnector[it->no].Terminal_res[m]);
|
||||
}
|
||||
}
|
||||
|
||||
else if (type=="breaker" && !breaker[it->no].flag)
|
||||
{
|
||||
breaker[it->no].flag=n;
|
||||
breaker[it->no].island=j;
|
||||
int no1=breaker[it->no].Terminal_res.size();
|
||||
if (no1)
|
||||
{
|
||||
for (int m=0;m<no1;m++)
|
||||
{
|
||||
ResContainer.push_back(breaker[it->no].Terminal_res[m]);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (type=="busbar_section" && !busbar_section[it->no].flag)
|
||||
{
|
||||
int no1=busbar_section[it->no].Terminal_res.size();
|
||||
if (no1)
|
||||
{
|
||||
for (int m=0;m<no1;m++)
|
||||
{
|
||||
ResContainer.push_back(busbar_section[it->no].Terminal_res[m]);
|
||||
}
|
||||
}
|
||||
busbar_section[it->no].flag=n;
|
||||
busbar_section[it->no].island=j;
|
||||
//balance_node=n;
|
||||
}
|
||||
}
|
||||
}
|
||||
while (ResContainer.size())
|
||||
{
|
||||
XmlReaderFindResource(j,n,sign);
|
||||
}
|
||||
return sign;
|
||||
}
|
||||
Reference in New Issue
Block a user