Esempio n. 1
0
 internal EditPanel(DistNet distNet)
 {
     distnet   = distNet;
     dbdesc    = distnet.dbdesc;
     dnobjdesc = distnet.DNObjectDesces;
     InitializeComponent();
 }
Esempio n. 2
0
        ///<summary>开始读取规划运行数据</summary>
        public static void PlanningRunDataRead(DistNet dn, int instanceID)
        {
            initPlanningRunData(dn);

            //逐项填写运行数据
            //载入潮流



            List <PowerBasicObject> objs = dn.dbdesc["基础数据"].DictSQLS["线路"].batchLoadRunData(dn, false, instanceID);

            foreach (var item in objs)
            {
                DNACLine obj = item as DNACLine;
                obj.isInverse = obj.thisRunData.activePower < 0; //校验方向
            }
            //载入变电站
            objs = dn.dbdesc["基础数据"].DictSQLS["变电站"].batchLoadRunData(dn, false, instanceID);
            //载入配电室            //注:配电无功率数据
            objs = dn.dbdesc["基础数据"].DictSQLS["配电室"].batchLoadRunData(dn, false, instanceID);
            //载入主变压器
            objs = dn.dbdesc["基础数据"].DictSQLS["主变2卷"].batchLoadRunData(dn, false, instanceID);
            //载入配变压器
            objs = dn.dbdesc["基础数据"].DictSQLS["配变"].batchLoadRunData(dn, false, instanceID);
            //断路器状态
            objs = dn.dbdesc["基础数据"].DictSQLS["断路器"].batchLoadRunData(dn, false, instanceID);


            //网格数据
            objs = dn.dbdesc["基础数据"].DictSQLS["网格"].batchLoadRunData(dn, false, instanceID);
        }
Esempio n. 3
0
 ///<summary>清理实时运行数据,包括停止计时器,清除事件列表, 清理模板和内容指向</summary>
 static void clearRealData(DistNet dn)
 {
     tmrreal.Stop();
     clearAll(dn);
     tmrreal.Tag = null;
     events.Clear();
 }
Esempio n. 4
0
        ///<summary>方法将创建rundata对象设置模板,并开始计时读取实时运行数据</summary>
        public static void RealDataReadStart(DistNet dn)
        {
            initRealRunData(dn);

            readrealdata();
            tmrreal.Start();
        }
Esempio n. 5
0
 static void genplant(DistNet dn)
 {
     foreach (DNPlantBase item in dn.getAllObjListByCategory(EObjectCategory.电厂设施类))
     {
         RunDataPlantBase rundata = item.busiRunData as RunDataPlantBase;
         AcntPlantBase    acnt    = item.busiAccount as AcntPlantBase;
         rundata.rateOfLoad = 0.8 + 0.2 * rd.NextDouble();
         rundata.power      = rundata.rateOfLoad * acnt.cap;
     }
 }
Esempio n. 6
0
 ///<summary>清理所有对象的运行数据,模板,内容</summary>
 static void clearAll(DistNet dn)
 {
     foreach (var layer in dn.scene.objManager.zLayers.Values)
     {
         foreach (var item in layer.pModels.Values)
         {
             item.busiRunData = item.tooltipMoveContent = item.tooltipMoveTemplate = null;
         }
     }
 }
Esempio n. 7
0
        ///<summary>
        ///根据dbopkey取得的数据库描述定义,批量载入运行数据。
        ///isRealRun参数:ture载入实时运行数据,false载入规划模拟运行数据
        ///返回设置了运行数据的对象列表
        ///</summary>
        public List <PowerBasicObject> batchLoadRunData(DistNet distnet, bool isRealRun)
        {
            DataLayer.DataProvider.curDataSourceName = dbdesc.datasourceName;

            List <PowerBasicObject> result = new List <PowerBasicObject>();
            string sql = isRealRun ? this.rundataSelectAll : this.planningSelectAll;
            string sim = isRealRun ? this.rundataSimAll : this.planningSimAll;
            //若为模拟数据,需预填对象id
            KeyValuePair <DataLayer.EReadMode, DataTable> kvp;

            if (DataLayer.DataProvider.dataStatus == DataLayer.EDataStatus.模拟 && (simRunDataDataTable == null || simPlanningDataTable == null))
            {
                DataTable dtids = DataLayer.DataProvider.getDataTableFromSQL(acntSelectAllID, false);
                if (dtids == null || dtids.Rows.Count == 0)
                {
                    System.Windows.MessageBox.Show("模拟对象序列来源于台账页面的acntSelectAllID语句,但查询为空导致模拟失败,请检查!");
                }
                List <string> ids = dtids.AsEnumerable().Select(p => p[0].ToString()).ToList();
                kvp = DataLayer.DataProvider.getDataTable(null, sim, ids, DataLayer.EReadMode.模拟);
            }
            else
            {
                kvp = DataLayer.DataProvider.getDataTable(sql, sim, isRealRun ? this.simRunDataDataTable : this.simPlanningDataTable);
            }
            if (kvp.Key == DataLayer.EReadMode.模拟)
            {
                if (isRealRun)
                {
                    this.simRunDataDataTable = kvp.Value;
                }
                else
                {
                    this.simPlanningDataTable = kvp.Value;
                }
            }
            foreach (DataRow dr in kvp.Value.Rows)
            {
                string id;
                if (kvp.Key == DataLayer.EReadMode.数据库读取)
                {
                    id = dr[(isRealRun ? rundataTableRelation : planningTableRelation).mainTable.keyFieldName].ToString();
                }
                else
                {
                    id = dr[0].ToString(); //模拟数据固定为第一字段为ID字段
                }
                PowerBasicObject obj = distnet.findObj(id);
                if (obj != null)
                {
                    loadRundata(dr, obj, kvp.Key, isRealRun);
                    result.Add(obj);
                }
            }
            return(result);
        }
Esempio n. 8
0
        ///<summary>产生开关数据</summary>
        static void genswitch(DistNet dn)
        {
            //暂取常态

            foreach (PowerBasicObject item in dn.getAllObjListByCategory(EObjectCategory.开关类))
            {
                RunDataSwitchBase rundata = item.busiRunData as RunDataSwitchBase;
                AcntSwitchBase    acnt    = item.busiAccount as AcntSwitchBase;
                rundata.isClose = acnt.switchStatus == ESwitchStatus.闭合;
            }
        }
Esempio n. 9
0
 ///<summary>初始化运行数据类</summary>
 public static void initRunData(DistNet dn, bool isForce = false)
 {
     if (!isRunDataInit || isForce)
     {
         //变电设施类
         foreach (DNTransformFacilityBase item in dn.getAllObjListByCategory(EObjectCategory.变电设施类))
         {
             item.createRunData();
             item.tooltipMoveTemplate = "RunDataSubsationTemplate";
             item.tooltipMoveContent  = item.busiRunData;
         }
         //变压器类
         foreach (DNTransformerBase item in dn.getAllObjListByCategory(EObjectCategory.变压器类))
         {
             item.createRunData();
             item.tooltipMoveTemplate = "RunDataTransformerTemplate";
             item.tooltipMoveContent  = item.busiRunData;
         }
         //导线类
         foreach (DNACLineBase item in dn.getAllObjListByCategory(EObjectCategory.导线类))
         {
             item.createRunData();
             if (item is DNACLine)  //仅输电线路tooltip
             {
                 item.tooltipMoveTemplate = "RunDataACLineTemplate";
                 item.tooltipMoveContent  = item.busiRunData;
             }
         }
         //开关类
         foreach (PowerBasicObject item in dn.getAllObjListByCategory(EObjectCategory.开关类))
         {
             item.createRunData();
         }
         //节点
         foreach (DNNode item in dn.getAllObjListByObjType(EObjectType.节点))
         {
             item.createRunData();
         }
         //电厂
         foreach (DNPlantBase item in dn.getAllObjListByCategory(EObjectCategory.电厂设施类))
         {
             item.createRunData();
         }
     }
     tmr.Tag       = dn;
     isRunDataInit = true;
 }
Esempio n. 10
0
        ///<summary>产生线路数据</summary>
        static void genline(DistNet dn)
        {
            foreach (DNACLineBase item in dn.getAllObjListByObjType(EObjectType.输电线路))
            {
                RunDataACLineBase rundata = item.busiRunData as RunDataACLineBase;
                AcntACLineBase    acnt    = item.busiAccount as AcntACLineBase;
                if (acnt.cap == 0)
                {
                    acnt.cap = rd.Next(50);
                }
                rundata.activePower = acnt.cap * (0.4 + 0.5 * rd.NextDouble());
                //rundata.powerFactor = 0.8 + 0.2 * rd.NextDouble();
                //rundata.apparentPower = rundata.activePower / rundata.powerFactor;
                rundata.reactivePower = Math.Sqrt(Math.Pow(rundata.apparentPower, 2) - Math.Pow(rundata.activePower, 2));
                //rundata.rateOfLoad = rundata.apparentPower / acnt.cap;

                if (rd.NextDouble() < 0.01)
                {
                    if (events.Count > 50)
                    {
                        events.Remove(events.Last());
                    }
                    events.Insert(0, new EventData()
                    {
                        eObjID = item.id, startTime = DateTime.Now, eType = (EventData.EEventType)rd.Next(2), eTitle = item.name + "事件.", eContent = DateTime.Now.ToShortDateString() + item.name + "事件描述......"
                    });
                }



                if (item is DNACLine)
                {
                    if (rundata.lstApparentPower.Count == 0) //初始模拟50条
                    {
                        for (int i = 50; i > 0; i--)
                        {
                            rundata.lstApparentPower.Add(new MyClassLibrary.DevShare.ChartDataPoint()
                            {
                                argudate = DateTime.Now.AddMinutes(i), value = acnt.cap * (0.4 + 0.5 * rd.NextDouble())
                            });
                        }
                    }
                    //rundata.addApparentPower(rundata.apparentPower);
                    rundata.refresh();
                }
            }
        }
Esempio n. 11
0
 ///<summary>初始化规划模拟运行数据类并设置相应tooltipmove模板</summary>
 static void initPlanningRunData(DistNet dn)
 {
     //变电设施类
     foreach (DNTransformFacilityBase item in dn.getAllObjListByCategory(EObjectCategory.变电设施类))
     {
         item.createRunData();
         item.tooltipMoveTemplate = "PlanningSubstationTemplate";
         item.tooltipMoveContent  = item.busiRunData;
     }
     //变压器类
     foreach (DNTransformerBase item in dn.getAllObjListByCategory(EObjectCategory.变压器类))
     {
         item.createRunData();
         item.tooltipMoveTemplate = "PlanningSubstationTemplate";
         item.tooltipMoveContent  = item.busiRunData;
     }
     //导线类
     foreach (DNACLineBase item in dn.getAllObjListByCategory(EObjectCategory.导线类))
     {
         item.createRunData();
         if (item is DNACLine)  //仅输电线路tooltip
         {
             item.tooltipMoveTemplate = "PlanningLineTemplate";
             item.tooltipMoveContent  = item.busiRunData;
         }
     }
     //开关类
     foreach (PowerBasicObject item in dn.getAllObjListByCategory(EObjectCategory.开关类))
     {
         item.createRunData();
     }
     //节点
     foreach (DNNode item in dn.getAllObjListByObjType(EObjectType.节点))
     {
         item.createRunData();
     }
     //电厂
     foreach (DNPlantBase item in dn.getAllObjListByCategory(EObjectCategory.电厂设施类))
     {
         item.createRunData();
     }
 }
Esempio n. 12
0
 public static void StartGenData(DistNet dn)
 {
     genline(dn); gentranform(dn); genswitch(dn); genplant(dn);
     tmr.Start();
 }
Esempio n. 13
0
        ///<summary>产生变电数据</summary>
        static void gentranform(DistNet dn)
        {
            foreach (DNTransformFacilityBase item in dn.getAllObjListByCategory(EObjectCategory.变电设施类))
            {
                RunDataTransformFacilityBase rundata = item.busiRunData as RunDataTransformFacilityBase;
                AcntTransformFacilityBase    acnt    = item.busiAccount as AcntTransformFacilityBase;
                rundata.activePower = acnt.cap * (0.4 + 0.5 * rd.NextDouble());
                //rundata.powerFactor = 0.8 + 0.2 * rd.NextDouble();
                //rundata.apparentPower = rundata.activePower / rundata.powerFactor;
                rundata.reactivePower = Math.Sqrt(Math.Pow(rundata.apparentPower, 2) - Math.Pow(rundata.activePower, 2));
                //rundata.rateOfLoad = rundata.apparentPower / acnt.cap;
                //rundata.HVoltPUV = 0.85 + 0.3 * rd.NextDouble();
                rundata.HVL = acnt.hnvl * rundata.HVoltPUV;

                if (rundata.lstApparentPower.Count == 0) //初始模拟50条
                {
                    for (int i = 50; i > 0; i--)
                    {
                        rundata.lstApparentPower.Add(new MyClassLibrary.DevShare.ChartDataPoint()
                        {
                            argudate = DateTime.Now.AddMinutes(i), value = acnt.cap * (0.4 + 0.5 * rd.NextDouble())
                        });
                    }
                }
                //rundata.addApparentPower(rundata.apparentPower);
                rundata.refresh();
            }

            foreach (DNTransformerBase item in dn.getAllObjListByCategory(EObjectCategory.变压器类))
            {
                RunDataTransformerBase rundata = item.busiRunData as RunDataTransformerBase;
                AcntTransformBase      acnt    = item.busiAccount as AcntTransformBase;
                rundata.activePower = acnt.cap * (0.4 + 0.5 * rd.NextDouble());
                //rundata.powerFactor = 0.8 + 0.2 * rd.NextDouble();
                //rundata.apparentPower = rundata.activePower / rundata.powerFactor;
                rundata.reactivePower = Math.Sqrt(Math.Pow(rundata.apparentPower, 2) - Math.Pow(rundata.activePower, 2));
                //rundata.rateOfLoad = rundata.apparentPower / acnt.cap;
                //rundata.HVoltPUV = 0.85 + 0.3 * rd.NextDouble();
                rundata.HVL = acnt.hnvl * rundata.HVoltPUV;

                if (rundata.lstApparentPower.Count == 0) //初始模拟50条
                {
                    for (int i = 50; i > 0; i--)
                    {
                        rundata.lstApparentPower.Add(new MyClassLibrary.DevShare.ChartDataPoint()
                        {
                            argudate = DateTime.Now.AddMinutes(i), value = acnt.cap * (0.4 + 0.5 * rd.NextDouble())
                        });
                    }
                }
                //rundata.addApparentPower(rundata.apparentPower);
                rundata.refresh();
            }

            foreach (var item in dn.getAllObjListByObjType(EObjectType.节点))
            {
                RunDataNode rundata = item.busiRunData as RunDataNode;
                rundata.vl = 110;
                //rundata.voltPUV = 0.9 + 0.2 * rd.NextDouble();
                rundata.volt = rundata.voltPUV * rundata.vl;
            }
        }
Esempio n. 14
0
        ///<summary>
        ///根据dbopkey取得的数据库描述定义,批量创建对象载入到distnet中,同时读入台账数据和拓扑数据。
        ///以对象的大类名为层名
        ///若同层同ID对象已存在,则忽略
        ///addwhere为附加到selectAll的附加过滤语句
        ///layername为创建对象时可指定层名称,若为空则以对象所属大类为类名称
        ///返回创建对象列表,供附加其它设置
        ///</summary>
        public List <PowerBasicObject> batchCreateDNObjects(DistNet distnet, string addwhere = "", string layername = null)
        {
            MyBaseControls.Screen.ScreenProgress.info = string.Format("载入{0}...", this.key);

            DataLayer.DataProvider.curDataSourceName = dbdesc.datasourceName;

            List <PowerBasicObject> result = new List <PowerBasicObject>();

            PowerBasicObject obj;
            pLayer           player;
            string           s  = acntSelectAll + " " + addwhere;
            DataTable        dt = DataLayer.DataProvider.getDataTableFromSQL(s);

            if (dt.Rows.Count > 0)
            {
                if (string.IsNullOrWhiteSpace(layername))
                {
                    pLayer tmplayer = new pLayer(null);
                    obj    = createDNObject(tmplayer);
                    player = distnet.addLayer((obj.busiDesc as DescData).objCategory.ToString());
                }
                else
                {
                    player = distnet.addLayer(layername);
                }

                //批量创建对象
                foreach (DataRow dr in dt.Rows)
                {
                    //string zid = dr.getString(this.acntTableRelation.mainTable.keyFieldName);
                    string zid = dr.getString(this.keypdesces.FirstOrDefault(p => p.propertyname == "ID").fieldname);
                    if (string.IsNullOrWhiteSpace(zid))
                    {
                        MyBaseControls.StatusBarTool.StatusBarTool.reportInfo.showInfo("存在设备ID为空的对象,这些对象未被创建,请检查数据来源!", 30);
                        MyBaseControls.LogTool.Log.addLog(string.Format("{1}存在设备ID为空的对象,这些对象未被创建。({0})", this, this.key), MyBaseControls.LogTool.ELogType.告警);
                        continue;  //若设备id为空,不创建对象
                    }

                    bool isExist = false;
                    foreach (pLayer lay in player.parent.zLayers.Values)
                    {
                        isExist = lay.pModels.ContainsKey(zid);
                        if (isExist)
                        {
                            MyBaseControls.StatusBarTool.StatusBarTool.reportInfo.showInfo("存在相同ID的对象,只创建第一个对象,请检查数据来源!", 30);
                            MyBaseControls.LogTool.Log.addLog(string.Format("{1}存在相同ID的对象,只创建第一个对象,请检查数据来源。({0})", this, this.key), MyBaseControls.LogTool.ELogType.告警);
                            break;
                        }
                    }
                    if (!isExist)  //没有同ID对象,才创建
                    {
                        obj         = createDNObject(player);
                        obj.DBOPKey = key;
                        loadKeyAcnt(dr, obj);
                        player.AddObject(obj);
                        result.Add(obj);
                    }
                }
                loadExTopo(result); //载入扩展拓扑
            }
            return(result);
        }
Esempio n. 15
0
 ///<summary>清理rundata对象、模板、内容</summary>
 public static void PlanningRunDataClear(DistNet dn)
 {
     clearAll(dn);
 }
Esempio n. 16
0
 ///<summary>停止读取实时运行数据, 并清理相关对象</summary>
 public static void RealDataReadStop(DistNet dn)
 {
     tmrreal.Stop();
     clearRealData(dn);
 }