#include "cimexporter.h" #include CIMExporter::CIMExporter(const QHash &eleHT, const QString &loadDir):loadDir(loadDir),eleHT(eleHT) { } void CIMExporter::add(const QPair& fromTo,Line* line) { LineStru lineStru; lineStru.line=line; lineStru.fromID=fromTo.first; lineStru.toID=fromTo.second; lineStru.id=line->ac->getID(); lineStru.isZeroBranch=std::fabs(line->length)<1e-5; lineStru.dispose=false; this->line.push_back(lineStru); } void CIMExporter::add(const QPair& fromTo,Switch* sw) { SwitchStru switchStru; switchStru.sw=sw; switchStru.fromID=fromTo.first; switchStru.toID=fromTo.second; switchStru.id=sw->id; switchStru.isZeroBranch=true; switchStru.dispose=false; this->sw.push_back(switchStru); } void CIMExporter::add(const QPair& fromTo,Transformer* tf) { TransformerStru tfStru; tfStru.tf=tf; tfStru.fromID=fromTo.first; tfStru.toID=fromTo.second; tfStru.isZeroBranch=false; tfStru.dispose=false; tfStru.id=tf->getTF()->getID(); this->tf.push_back(tfStru); } void CIMExporter::exportTo(const QString& path,const QString &rootID) { //输出到文件 QFile fd(path); if(fd.open(QFile::WriteOnly)) { //消减元件 QList elements; for(int i=0;iline.length();i++) { elements.push_back( &(this->line[i]) ); } for(int i=0;isw.length();i++) { elements.push_back( &(this->sw[i]) ); } for(int i=0;itf.length();i++) { elements.push_back( &(this->tf[i]) ); } ElementReduction elementReduction(elements); elementReduction.doIt(rootID); //先给所有节点都编号 this->idToNumber(this->line); this->idToNumber(this->sw); this->idToNumber(this->tf); //开始按要求输出 //先输出线路 QTextStream writer(&fd); writer<::iterator ite=this->line.begin(); ite!=this->line.end(); ite++) { LineStru l=*ite; if(l.dispose) { continue; } writer<length<<"\r\n"; } //输出刀闸 for(QList::iterator ite=this->sw.begin(); ite!=this->sw.end(); ite++) { if(ite->dispose) { continue; } writer<fromNum<<"\t"; writer<toNum<<"\t"; writer<<"type"<<"\t"; // writer<id<<"\t"; writer<<0<<"\r\n"; } //输出负荷 RecurseDir recurseDir; recurseDir.setDir(this->loadDir); QStringList files; files=recurseDir.getFiles(); //只取文件名 QStringList baseNames; foreach(QString file,files) { QFileInfo fileInfo(file); baseNames<::iterator ite=this->tf.begin(); ite!=this->tf.end(); ite++) { if(ite->dispose) { continue; } PowerTransformer *tf=ite->tf->getTF(); QString subID=tf->getEquipmentMemberOf_EquipmentContainer();//所属Substation的ID Substation *sub=static_cast(this->eleHT[subID]); if(!sub) { std::cout<<"CIMExporter:: can not substation of "< > vecLoadInfo=loadMapping.getSubstationLoad(sub->getID()); foreach(QSharedPointer p,vecLoadInfo) { QFileInfo targetBasename(p->getLoadPath()); // std::cout<updateByTime(QTime(3,45,0)); // std::cout<numberIt(ite->toID)<<" "<< p->getPA()<fromNum<<"\t"; writer<toNum<<"\t"; writer<<"type"<<"\t"; // writer<id<<"\t"; writer<getMVA()<<"\r\n"; break; } } } //列出没有用的负荷文件 foreach(QString name, baseNames) { if(!usedLoad.contains(name)) { LoadMatchException except; if(!except.contains(name)) { std::cout<topologyTest(); fd.close(); } } template void CIMExporter::idToNumber(QList &s)//把所有元件的标识进行编号 { for(typename QList::iterator ite=s.begin(); ite!=s.end(); ite++ ) { if(ite->dispose) { std::cout<id.toStdString()<<" dispose"<numberIt(_t.fromID); _t.toNum=this->numberIt(_t.toID); *ite=_t; } } int CIMExporter::numberIt(const QString& id) { if(this->number.contains(id)) { return this->number.value(id); } else { int n=this->number.keys().length()+1; this->number[id]=n; // std::cout< > linkage; for(QList::iterator ite=this->line.begin(); ite!=this->line.end(); ite++) { if(ite->dispose) { continue; } linkage.push_back(QPair(ite->fromNum,ite->toNum)); } for(QList::iterator ite=this->sw.begin(); ite!=this->sw.end(); ite++) { if(ite->dispose) { continue; } linkage.push_back(QPair(ite->fromNum,ite->toNum)); } for(QList::iterator ite=this->tf.begin(); ite!=this->tf.end(); ite++) { if(ite->dispose) { continue; } linkage.push_back(QPair(ite->fromNum,ite->toNum)); } TopologyTest tpTest(this->number.keys().length()); if(tpTest.start(linkage)) { std::cout<<"topoloty ok!"<