parent
1f9734d727
commit
d1ac696c1e
|
|
@ -58,6 +58,8 @@ void CIMExporter::add(const QPair<QString,QString>& fromTo,DG* dg)
|
|||
|
||||
void CIMExporter::exportTo(const QString& path,const QString &rootID)
|
||||
{
|
||||
char seperator='\t';
|
||||
QString endLine="\r\n";
|
||||
//输出到文件
|
||||
QFile fd(path);
|
||||
if(fd.open(QFile::WriteOnly))
|
||||
|
|
@ -91,11 +93,27 @@ void CIMExporter::exportTo(const QString& path,const QString &rootID)
|
|||
this->idToNumber(this->sw);
|
||||
this->idToNumber(this->tf);
|
||||
this->idToNumber(this->dg);
|
||||
//开始按要求输出
|
||||
//先输出线路
|
||||
//开始按iPso格式要求输出
|
||||
QTextStream writer(&fd);
|
||||
writer<<QStringLiteral("线路")<<QStringLiteral("\r\n");
|
||||
writer<<QStringLiteral("节点号")<<QStringLiteral("\t")<<QStringLiteral("节点号")<<QStringLiteral("\t")<<QStringLiteral("型号")<<QStringLiteral("\t")<<QStringLiteral("长度(m)")<<QStringLiteral("\r\n");
|
||||
//iPso 第一行
|
||||
writer<<this->number.keys().length()<<seperator;//节点数
|
||||
//TODO: 支路数要单独计算
|
||||
writer<<0<<seperator;//支路数,由于有些支路被删掉了,所以要计算一下。这里暂时不计算。
|
||||
writer<<1<<seperator;//计算目标
|
||||
writer<<1e-5<<seperator;//收敛精度
|
||||
writer<<-1<<endLine;//忘记是什么了
|
||||
writer<<0<<endLine;//数据间隔
|
||||
int balanceNum;//平衡节点号
|
||||
balanceNum=this->line.first().fromNum;
|
||||
writer<<1<<seperator<<balanceNum<<seperator;
|
||||
writer<<"1.05"<<endLine;//平衡节点电压
|
||||
writer<<0<<endLine;//数据间隔
|
||||
|
||||
int seqN=1;//序号
|
||||
//先输出线路
|
||||
|
||||
// writer<<QStringLiteral("线路")<<QStringLiteral("\r\n");
|
||||
// writer<<QStringLiteral("节点号")<<QStringLiteral("\t")<<QStringLiteral("节点号")<<QStringLiteral("\t")<<QStringLiteral("型号")<<QStringLiteral("\t")<<QStringLiteral("长度(m)")<<QStringLiteral("\r\n");
|
||||
for(QList<LineStru>::iterator ite=this->line.begin();
|
||||
ite!=this->line.end();
|
||||
ite++)
|
||||
|
|
@ -106,12 +124,19 @@ void CIMExporter::exportTo(const QString& path,const QString &rootID)
|
|||
continue;
|
||||
}
|
||||
// writer<<elements.first()->length<<"\t"<<elements.first()->id<<"\t";
|
||||
writer<<l.fromNum<<"\t";
|
||||
writer<<l.toNum<<"\t";
|
||||
writer<<"type"<<"\t";
|
||||
writer<<seqN++<<seperator;
|
||||
writer<<l.fromNum<<seperator;
|
||||
writer<<l.toNum<<seperator;
|
||||
writer<<l.line->r<<seperator;
|
||||
writer<<l.line->x<<seperator;
|
||||
writer<<l.line->b1<<seperator;
|
||||
writer<<l.line->b2<<seperator;
|
||||
writer<<endLine;
|
||||
// writer<<"type"<<seperator;
|
||||
// writer<<l.id<<"\t";
|
||||
writer<<l.length<<"\r\n";
|
||||
// writer<<l.length<<"\r\n";
|
||||
}
|
||||
|
||||
//输出刀闸
|
||||
for(QList<SwitchStru>::iterator ite=this->sw.begin();
|
||||
ite!=this->sw.end();
|
||||
|
|
@ -121,18 +146,26 @@ void CIMExporter::exportTo(const QString& path,const QString &rootID)
|
|||
{
|
||||
continue;
|
||||
}
|
||||
writer<<ite->fromNum<<"\t";
|
||||
writer<<ite->toNum<<"\t";
|
||||
writer<<"type"<<"\t";
|
||||
writer<<seqN++<<seperator;
|
||||
writer<<ite->fromNum<<seperator;
|
||||
writer<<ite->toNum<<seperator;
|
||||
writer<<ite->sw->r<<seperator;
|
||||
writer<<ite->sw->x<<seperator;
|
||||
writer<<ite->sw->b1<<seperator;
|
||||
writer<<ite->sw->b2<<seperator;
|
||||
writer<<endLine;
|
||||
// writer<<"type"<<"\t";
|
||||
// writer<<ite->id<<"\t";
|
||||
writer<<0<<"\r\n";
|
||||
// writer<<0<<"\r\n";
|
||||
}
|
||||
//输出负荷
|
||||
writer<<0<<endLine;//数据间隔
|
||||
//输出变压器
|
||||
RecurseDir recurseDir;
|
||||
recurseDir.setDir(this->loadDir);
|
||||
QStringList files;
|
||||
files=recurseDir.getFiles();
|
||||
//只取文件名
|
||||
|
||||
QStringList baseNames;
|
||||
foreach(QString file,files)
|
||||
{
|
||||
|
|
@ -144,9 +177,14 @@ void CIMExporter::exportTo(const QString& path,const QString &rootID)
|
|||
baseNames<<fileInfo.baseName();
|
||||
// std::cout<<"has "<<fileInfo.baseName().toLocal8Bit().data()<<std::endl;
|
||||
}
|
||||
seqN=1;
|
||||
// writer<<QStringLiteral("变压器")<<"\r\n";
|
||||
// writer<<QStringLiteral("节点号")<<"\t"<<QStringLiteral("节点号")<<"\t"<<QStringLiteral("型号")<<"\t"<<QStringLiteral("容量(MVA)")<<"\r\n";
|
||||
|
||||
//把接地支路准备一下
|
||||
QList<CIMExporter::GroundBranch > groudBranch;//first is g, second is b.
|
||||
QList<CIMExporter::NodePQ> nodePQ;//节点注入功率,也就是负荷或者发电机
|
||||
|
||||
writer<<QStringLiteral("变压器")<<"\r\n";
|
||||
writer<<QStringLiteral("节点号")<<"\t"<<QStringLiteral("节点号")<<"\t"<<QStringLiteral("型号")<<"\t"<<QStringLiteral("容量(MVA)")<<"\r\n";
|
||||
QStringList usedLoad;
|
||||
for(QList<TransformerStru>::iterator ite=this->tf.begin();
|
||||
ite!=this->tf.end();
|
||||
|
|
@ -177,11 +215,24 @@ void CIMExporter::exportTo(const QString& path,const QString &rootID)
|
|||
{
|
||||
// std::cout<<targetBasename.baseName().toLocal8Bit().data()<<" used "<<std::endl;
|
||||
usedLoad<<targetBasename.baseName();
|
||||
writer<<ite->fromNum<<"\t";
|
||||
writer<<ite->toNum<<"\t";
|
||||
writer<<"type"<<"\t";
|
||||
writer<<seqN++<<seperator;
|
||||
writer<<0<<seperator;//变压器区域
|
||||
writer<<ite->fromNum<<seperator;
|
||||
writer<<ite->toNum<<seperator;
|
||||
writer<<ite->tf->r<<seperator;
|
||||
writer<<ite->tf->x<<seperator;
|
||||
writer<<ite->tf->ratio<<seperator;
|
||||
writer<<1<<seperator;
|
||||
writer<<1<<seperator;
|
||||
writer<<1<<seperator;
|
||||
writer<<endLine;
|
||||
//保存接地支路
|
||||
groudBranch.push_back(CIMExporter::GroundBranch(ite->toNum, ite->tf->g1,ite->tf->b1));//都只用g1,b1的数据
|
||||
//保存节点注入功率
|
||||
nodePQ.push_back(CIMExporter::NodePQ(ite->toNum,p->get3PhP(),p->get3PhQ()));
|
||||
// writer<<"type"<<"\t";
|
||||
// writer<<ite->id<<"\t";
|
||||
writer<<tf->getMVA()<<"\r\n";
|
||||
// writer<<tf->getMVA()<<"\r\n";
|
||||
//加到LoadExport中
|
||||
LoadExporter loadExporter;
|
||||
loadExporter.add(targetBasename.baseName(),p);
|
||||
|
|
@ -190,16 +241,88 @@ void CIMExporter::exportTo(const QString& path,const QString &rootID)
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
writer<<0<<endLine;//数据间隔
|
||||
writer<<0<<endLine;//数据间隔
|
||||
seqN=1;
|
||||
foreach(CIMExporter::GroundBranch gb,groudBranch)
|
||||
{
|
||||
writer<<seqN++<<seperator;
|
||||
writer<<gb.nodeNum<<seperator;
|
||||
writer<<gb.g<<seperator;
|
||||
writer<<gb.b<<seperator;
|
||||
}
|
||||
writer<<0<<endLine;//数据间隔
|
||||
writer<<0<<endLine;//数据间隔
|
||||
writer<<0<<endLine;//数据间隔
|
||||
//列出DG
|
||||
writer<<QStringLiteral("分布式电源")<<"\r\n";
|
||||
// writer<<QStringLiteral("分布式电源")<<"\r\n";
|
||||
for(QList<DGStru>::iterator ite=this->dg.begin();
|
||||
ite!=this->dg.end();
|
||||
ite++)
|
||||
{
|
||||
writer<<ite->fromNum<<"\t";
|
||||
writer<<ite->toNum<<"\t";
|
||||
writer<<ite->dg->capacity<<"\r\n";
|
||||
//保存到节点注入功率中
|
||||
nodePQ.push_back(CIMExporter::NodePQ(ite->toNum,-ite->dg->capacity,-ite->dg->capacity) );
|
||||
// writer<<ite->fromNum<<"\t";
|
||||
// writer<<ite->toNum<<"\t";
|
||||
// writer<<ite->dg->capacity<<"\r\n";
|
||||
}
|
||||
|
||||
//iPso 开始输出注入功率
|
||||
CIMExporter::NodePQ *nodePQPointer=new CIMExporter::NodePQ[this->number.keys().length()];
|
||||
foreach(CIMExporter::NodePQ n,nodePQ)
|
||||
{
|
||||
int nodeNum=n.nodeNum;
|
||||
if(nodeNum>this->number.keys().length())
|
||||
{
|
||||
std::cout<<"number of nodePQ is beyond node number."<<std::endl;
|
||||
break;
|
||||
}
|
||||
nodePQPointer[nodeNum-1]=n;
|
||||
}
|
||||
seqN=1;
|
||||
for(int i=0;i<this->number.keys().length();i++)
|
||||
{
|
||||
writer<<seqN<<seperator;
|
||||
writer<<-1<<seperator;
|
||||
writer<<seqN++<<seperator;
|
||||
writer<<10<<seperator;
|
||||
writer<<0<<seperator;
|
||||
writer<<0<<seperator;
|
||||
writer<<nodePQPointer[i].P<<seperator;
|
||||
writer<<nodePQPointer[i].Q<<seperator;
|
||||
writer<<1<<seperator;
|
||||
writer<<0<<seperator;
|
||||
writer<<endLine;
|
||||
}
|
||||
|
||||
writer<<0<<endLine;//数据间隔
|
||||
writer<<1<< seperator<<1<< seperator<<balanceNum<< seperator<<1<< seperator<< -100<< seperator<<100<< seperator<<0<< seperator<<0<< seperator<<0<< seperator<<0<< seperator;
|
||||
writer<<endLine;
|
||||
writer<<0<<endLine;//数据间隔
|
||||
writer<<0<<endLine;//数据间隔
|
||||
writer<<1<< seperator<<1<< seperator<<balanceNum<<1<< seperator<<1.05<< seperator<< -100<< seperator<<100<< seperator<<0<< seperator<<0<< seperator<<0<< seperator<<0<< seperator;
|
||||
writer<<endLine;
|
||||
writer<<0<<endLine;//数据间隔
|
||||
writer<<0<<endLine;//数据间隔
|
||||
writer<<1<< seperator<<balanceNum<< seperator<<0.999<< seperator<<1.001<<seperator;
|
||||
writer<<endLine;
|
||||
//接着13个0
|
||||
writer<<0<<endLine;//数据间隔
|
||||
writer<<0<<endLine;//数据间隔
|
||||
writer<<0<<endLine;//数据间隔
|
||||
writer<<0<<endLine;//数据间隔
|
||||
writer<<0<<endLine;//数据间隔
|
||||
writer<<0<<endLine;//数据间隔
|
||||
writer<<0<<endLine;//数据间隔
|
||||
writer<<0<<endLine;//数据间隔
|
||||
writer<<0<<endLine;//数据间隔
|
||||
writer<<0<<endLine;//数据间隔
|
||||
writer<<0<<endLine;//数据间隔
|
||||
writer<<0<<endLine;//数据间隔
|
||||
writer<<0<<endLine;//数据间隔
|
||||
|
||||
|
||||
//列出没有用的负荷文件
|
||||
foreach(QString name, baseNames)
|
||||
{
|
||||
|
|
@ -218,6 +341,7 @@ void CIMExporter::exportTo(const QString& path,const QString &rootID)
|
|||
}
|
||||
this->topologyTest();
|
||||
fd.close();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -27,6 +27,29 @@
|
|||
//class Substation;
|
||||
class CIMExporter
|
||||
{
|
||||
class NodePQ
|
||||
{
|
||||
public:
|
||||
NodePQ():nodeNum(0),P(0),Q(0)
|
||||
{}
|
||||
explicit NodePQ(int nodeNum,double P,double Q):nodeNum(nodeNum),P(P),Q(Q)
|
||||
{}
|
||||
int nodeNum;
|
||||
double P;
|
||||
double Q;
|
||||
|
||||
};
|
||||
|
||||
class GroundBranch
|
||||
{
|
||||
public:
|
||||
explicit GroundBranch(int nodeNum,double g,double b):nodeNum(nodeNum),g(g),b(b)
|
||||
{}
|
||||
int nodeNum;
|
||||
double g;
|
||||
double b;
|
||||
|
||||
};
|
||||
|
||||
public:
|
||||
explicit CIMExporter(const QHash<QString,BasicElementInfo *>& eleHT,const QString& loadDir);
|
||||
|
|
|
|||
Loading…
Reference in New Issue