Exemplo n.º 1
0
        private void addrightcheck()
        {
            FileStream dh;
            StreamReader readLine;
            char[] charSplit;
            string strLine;
            string[] array1;
            string output = null;
            string[] array2;

            string strLine2;

            char[] charSplit2 = new char[] { ' ' };
            FileStream op;
            StreamWriter str1;
            FileStream dh2;
            StreamReader readLine2;
            //List<PSPDEV> linedengdai = new List<PSPDEV>();          //记录所有待选的线路(一次运行以后就会发生变化)
            if (!Check())
            {
                return;
            }
            PSPDEV pspdev = new PSPDEV();
            pspdev.SvgUID = tlVectorControl1.SVGDocument.CurrentLayer.ID;
            pspdev.LineStatus = "运行";
            pspdev.Type = "Polyline";
            IList list1 = Services.BaseService.GetList("SelectPSPDEVBySvgUIDAndLineStatus", pspdev);
            double yinzi = 0, capability = 0, volt = 0, current = 0, standvolt = 0, Rad_to_Deg = 57.29577951;
            PSPDEV benchmark = new PSPDEV();
            benchmark.Type = "power";
            benchmark.SvgUID = tlVectorControl1.SVGDocument.SvgdataUid;
            IList list3 = Services.BaseService.GetList("SelectPSPDEVBySvgUIDAndType", benchmark);
            if (list3 == null)
            {
                MessageBox.Show("请设置基准后再进行计算!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            foreach (PSPDEV dev in list3)
            {
                yinzi = Convert.ToDouble(dev.PowerFactor);
                capability = Convert.ToDouble(dev.StandardCurrent);
                volt = Convert.ToDouble(dev.StandardVolt);
                if (dev.PowerFactor == 0)
                {
                    yinzi = 1;
                }
                if (dev.StandardCurrent == 0)
                {
                    capability = 1;
                }
                if (dev.StandardVolt == 0)
                {
                    volt = 1;
                }
                standvolt = volt;
                current = capability / (Math.Sqrt(3) * volt);

            }
            capability = 100;
            ercilinedengdai.Clear();//清空之前的记录

            for (int i = 0; i < list1.Count; i++)
            {
                N1Test.NBcal kk = new N1Test.NBcal();
                kk.Show_ZLKMPSP(((PSPDEV)list1[i]).Number);
                if (File.Exists(System.Windows.Forms.Application.StartupPath + "\\ZL.txt"))
                {
                }
                else
                {
                    return;
                }
                dh2 = new FileStream(System.Windows.Forms.Application.StartupPath + "\\ZL.txt", FileMode.Open);

                readLine2 = new StreamReader(dh2);
                charSplit2 = new char[] { ' ' };
                strLine2 = readLine2.ReadLine();
                output = null;
                bool lineflag = true;
                bool jielieflag = true;
                while (!string.IsNullOrEmpty(strLine2))
                {
                    array2 = strLine2.Split(charSplit2);

                    string[] dev = new string[2 * brchcount + 1];
                    dev.Initialize();

                    PSPDEV CR = new PSPDEV();
                    CR.SvgUID = tlVectorControl1.SVGDocument.CurrentLayer.ID;
                    int m = 0;
                    foreach (string str in array2)
                    {

                        if (str != "")
                        {

                            dev[m++] = str.ToString();

                        }
                    }
                    //进行解裂和负荷判断

                    if (dev[1] != "-1")
                    {
                        for (int j = 0; j < brchcount; j++)
                        {

                            double pij = System.Math.Abs(Convert.ToDouble(dev[j * 2 + 2])) * capability;

                            PSPDEV psp = new PSPDEV();

                            psp.Name = dev[j * 2 + 1];
                            psp.Type = "Polyline";
                            psp.SvgUID = tlVectorControl1.SVGDocument.CurrentLayer.ID;
                            IList listName = Services.BaseService.GetList("SelectPSPDEVByName", psp);
                            PSPDEV pspline = (PSPDEV)listName[0];
                            if (pspline != null && !pspline.Name.Contains("虚拟线路"))
                            {
                                double voltR = pspline.VoltR;
                                WireCategory wirewire = new WireCategory();
                                wirewire.WireType = pspline.LineType;
                                if (pspline.LineType == null || pspline.LineType == "")
                                {
                                    MessageBox.Show(pspline.Name + "的线路类型没有输入,无法进行可靠性检验", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    return;
                                }
                                WireCategory listware = (WireCategory)Services.BaseService.GetObject("SelectWireCategoryByKey", wirewire);
                                double Ichange = (double)listware.WireChange;
                                double linXij = System.Math.Sqrt(3) * voltR * Ichange / 1000;
                                if (pij >= linXij)
                                {
                                    lineflag = false;
                                    //lineclass _line = new lineclass(n, j);
                                    //Overlinp.Add(_line);
                                    // OverPhege[n] = j;
                                }
                            }

                        }

                    }

                    else
                    {
                        jielieflag = false;
                    }

                    strLine2 = readLine2.ReadLine();
                }
                readLine2.Close();
                if (!lineflag)
                {
                    PSPDEV psperci = new PSPDEV();
                    psperci = (PSPDEV)list1[i];
                    psperci.LineStatus = "等待";
                    Services.BaseService.Update<PSPDEV>(psperci);
                    ercilinedengdai.Add(psperci);
                    break;
                }
                else                  //没有出现过负荷
                    continue;
            }
            //新添加的 如果记录二次等待的线路没有则停止下面的运行 表示断开任意一条也没有出现过负荷
            if (ercilinedengdai.Count == 0)
            {
                return;
            }
            //此过程是添加一条线路使其不出现过负荷

            fuhecheck();
            for (int j = 0; j < linedengdai.Count; j++)
            {
                if (!Checkadd(linedengdai[j].EleID))
                    return;
                N1Test.NBcal zl = new NBcal();
                //zl.Show_KmRelia(1);
                zl.ZLpsp();

                if (File.Exists(System.Windows.Forms.Application.StartupPath + "\\DH1.txt"))
                {
                }
                else
                {
                    return;
                }
                dh = new FileStream(System.Windows.Forms.Application.StartupPath + "\\DH1.txt", FileMode.Open);

                readLine = new StreamReader(dh);
                charSplit = new char[] { ' ' };
                strLine = readLine.ReadLine();
                output = null;
                double sumpij = 0.0;
                bool lineflag = true;
                while (!string.IsNullOrEmpty(strLine))
                {
                    array1 = strLine.Split(charSplit);

                    string[] dev = new string[2];
                    dev.Initialize();
                    int i = 0;
                    PSPDEV CR = new PSPDEV();
                    CR.SvgUID = tlVectorControl1.SVGDocument.CurrentLayer.ID;

                    foreach (string str in array1)
                    {
                        if (str != "")
                        {
                            if (i == 0)
                            {
                                dev[i++] = str.ToString();
                            }
                            else
                            {
                                if (str != "NaN")
                                {
                                    dev[i++] = Convert.ToDouble(str).ToString();
                                }
                                else
                                {
                                    dev[i++] = str;
                                }

                            }
                        }

                    }

                    CR.Name = dev[0];
                    CR.Type = "Polyline";
                    CR = (PSPDEV)Services.BaseService.GetObject("SelectPSPDEVByName", CR);
                    if (CR != null && CR.ReferenceVolt != 0)
                    {
                        volt = CR.ReferenceVolt;
                    }
                    else
                        volt = standvolt;
                    current = capability / (Math.Sqrt(3) * volt);
                    if (CR != null && !CR.Name.Contains("虚拟线路"))
                    {

                        double linepij = Convert.ToDouble(dev[1]) * capability;
                        double voltR = CR.VoltR;
                        WireCategory wirewire = new WireCategory();
                        wirewire.WireType = CR.LineType;
                        if (string.IsNullOrEmpty(CR.LineType))
                        {
                            MessageBox.Show(CR.Name + "的线路类型没有输入,无法进行可靠性检验", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            return;
                        }
                        WireCategory listware = (WireCategory)Services.BaseService.GetObject("SelectWireCategoryByKey", wirewire);
                        double Ichange = (double)listware.WireChange;
                        double linXij = System.Math.Sqrt(3) * voltR * Ichange / 1000;
                        if (linepij >= linXij)
                        {
                            lineflag = false;

                            //sumpij += linepij;
                        }
                        for (int k = 0; k < fuheline.Count; k++)
                        {
                            if (CR.SUID == fuheline[k].Suid)
                            {
                                sumpij += System.Math.Abs(fuheline[k].linepij - linepij);
                            }
                        }
                        //
                        //    //output += "'" + CR.Name.ToString() + "," + (Convert.ToDouble(dev[3]) * capability).ToString() + "," + (Convert.ToDouble(dev[4]) * capability).ToString() + "," + (Convert.ToDouble(dev[5]) * capability).ToString() + "," + (Convert.ToDouble(dev[6]) * capability).ToString() + "," + (Convert.ToDouble(dev[7]) * current).ToString() + "," + (Convert.ToDouble(dev[8]) * Rad_to_Deg).ToString() + "," + dev[11] + "," + "\r\n";
                    }

                    strLine = readLine.ReadLine();
                }
                readLine.Close();
                //if (lineflag)              //如果没有出现过负荷现象 就停止进行加线
                //{
                //    PSPDEV pspb = (PSPDEV)linedengdai[j];
                //    pspb.LineStatus = "运行";
                //    Services.BaseService.Update<PSPDEV>(pspb);
                //    lineyiyou.Add(pspb);
                //    for (int i = 0; i < linedengdai.Count; i++)
                //    {
                //        if (linedengdai[i].SUID == pspb.SUID)
                //        {
                //            linedengdai.RemoveAt(j);
                //        }
                //    }
                //    return;
                //}
                //else
                //{
                    XmlNode el = tlVectorControl1.SVGDocument.SelectSingleNode("svg/polyline[@layer='" + tlVectorControl1.SVGDocument.CurrentLayer.ID + "' and @id='" + linedengdai[j].EleID + "']");
                    double linevalue = 0;
                    if (!string.IsNullOrEmpty(((XmlElement)el).GetAttribute("linevalue")))
                    {
                        linevalue = Convert.ToDouble(((XmlElement)el).GetAttribute("linevalue"));
                    }
                    else
                        linevalue = 1;
                    linedaixuan linedai = new linedaixuan(linedengdai[j].Number, linedengdai[j].SUID, linedengdai[j].Name);
                    linedai.linepij = sumpij;
                    linedai.linevalue = linevalue;
                    linedai.linetouzilv = sumpij / linevalue;

                    waitlineindex.Add(linedai);
                //}

            }
            waitlineindex.Sort();
            //在此处获得指标最大的线路 将其线路的状态变为 运行并且在运行的集合里面记录 在等待的集合里将其线路去掉 重新进行下一轮的操作
            PSPDEV pspbianhua = new PSPDEV();
            if (waitlineindex.Count > 0)
            {
                pspbianhua.SUID = waitlineindex[waitlineindex.Count - 1].Suid;
            }
            else
            {
                //MessageBox.Show("没有出现过负荷的线路集,请查看一下线路参数是否设定正确!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            pspbianhua = (PSPDEV)Services.BaseService.GetObject("SelectPSPDEVByKey", pspbianhua);
            pspbianhua.LineStatus = "运行";
            Services.BaseService.Update<PSPDEV>(pspbianhua);
            lineyiyou.Add(pspbianhua);
            for (int i = 0; i < linedengdai.Count; i++)
            {
                if (linedengdai[i].SUID == pspbianhua.SUID)
                {
                    linedengdai.RemoveAt(i);
                }
            }
            waitlineindex.Clear();
        }
Exemplo n.º 2
0
        private void jianxiancheck()
        {
            FileStream dh;
            StreamReader readLine;
            char[] charSplit;
            string strLine;
            string[] array1;
            string output = null;
            string[] array2;

            string strLine2;

            char[] charSplit2 = new char[] { ' ' };
            FileStream op;
            StreamWriter str1;
            FileStream dh2;
            StreamReader readLine2;

            if (!Check())
            {
                return;
            }
            //NIULA pspniula = new NIULA();
            //pspniula.CurrentCal();
            N1Test.NBcal zl = new NBcal();
            //zl.Show_KmRelia(1);
            zl.ZLpsp();

            double yinzi = 0, capability = 0, volt = 0, current = 0, standvolt = 0, Rad_to_Deg = 57.29577951;
            PSPDEV benchmark = new PSPDEV();
            benchmark.Type = "power";
            benchmark.SvgUID = tlVectorControl1.SVGDocument.SvgdataUid;
            IList list3 = Services.BaseService.GetList("SelectPSPDEVBySvgUIDAndType", benchmark);
            if (list3 == null)
            {
                MessageBox.Show("请设置基准后再进行计算!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            foreach (PSPDEV dev in list3)
            {
                yinzi = Convert.ToDouble(dev.PowerFactor);
                capability = Convert.ToDouble(dev.StandardCurrent);
                volt = Convert.ToDouble(dev.StandardVolt);
                if (dev.PowerFactor == 0)
                {
                    yinzi = 1;
                }
                if (dev.StandardCurrent == 0)
                {
                    capability = 1;
                }
                if (dev.StandardVolt == 0)
                {
                    volt = 1;
                }
                standvolt = volt;
                current = capability / (Math.Sqrt(3) * volt);

            }
            capability = 100;
            if (File.Exists(System.Windows.Forms.Application.StartupPath + "\\DH1.txt"))
            {
            }
            else
            {
                return;
            }
            dh = new FileStream(System.Windows.Forms.Application.StartupPath + "\\DH1.txt", FileMode.Open);

            readLine = new StreamReader(dh);
            charSplit = new char[] { ' ' };
            strLine = readLine.ReadLine();
            output = null;
            while (!string.IsNullOrEmpty(strLine))
            {
                array1 = strLine.Split(charSplit);

                string[] dev = new string[2];
                dev.Initialize();
                int i = 0;
                PSPDEV CR = new PSPDEV();
                CR.SvgUID = tlVectorControl1.SVGDocument.CurrentLayer.ID;

                foreach (string str in array1)
                {
                    if (str != "")
                    {
                        if (i == 0)
                        {
                            dev[i++] = str.ToString();
                        }
                        else
                        {
                            if (str != "NaN")
                            {
                                dev[i++] = Convert.ToDouble(str).ToString();
                            }
                            else
                            {
                                dev[i++] = str;
                            }

                        }
                    }

                }

                CR.Name = dev[0];
                CR.Type = "Polyline";
                CR = (PSPDEV)Services.BaseService.GetObject("SelectPSPDEVByName", CR);
                if (CR != null && CR.ReferenceVolt != 0)
                {
                    volt = CR.ReferenceVolt;
                }
                else
                    volt = standvolt;
                current = capability / (Math.Sqrt(3) * volt);
                if (CR != null)
                {
                    if (CR.LineStatus == "待选")
                    {
                        for (int n = 0; n < waitlinecoll.Count; n++)            //加入线路功率
                        {
                            if (waitlinecoll[n].linename == CR.Name)
                            {
                                double linepij = System.Math.Abs(Convert.ToDouble(dev[1])) * capability;
                                XmlNode el = tlVectorControl1.SVGDocument.SelectSingleNode("svg/polyline[@layer='" + tlVectorControl1.SVGDocument.CurrentLayer.ID + "' and @id='" + CR.EleID + "']");
                                double linevalue = 0;
                                if (!string.IsNullOrEmpty(((XmlElement)el).GetAttribute("linevalue")))
                                {
                                    linevalue = Convert.ToDouble(((XmlElement)el).GetAttribute("linevalue"));
                                }
                                else
                                    linevalue = 1;
                                waitlinecoll[n].Suid = CR.SUID;
                                waitlinecoll[n].linepij = linepij;
                                waitlinecoll[n].linevalue = linevalue;
                                waitlinecoll[n].linetouzilv = linepij / linevalue;
                            }
                        }
                    }
                    //output += "'" + CR.Name.ToString() + "," + (Convert.ToDouble(dev[3]) * capability).ToString() + "," + (Convert.ToDouble(dev[4]) * capability).ToString() + "," + (Convert.ToDouble(dev[5]) * capability).ToString() + "," + (Convert.ToDouble(dev[6]) * capability).ToString() + "," + (Convert.ToDouble(dev[7]) * current).ToString() + "," + (Convert.ToDouble(dev[8]) * Rad_to_Deg).ToString() + "," + dev[11] + "," + "\r\n";
                }
                strLine = readLine.ReadLine();
            }
            readLine.Close();
            waitlinecoll.Sort();         //进行大小排序  然后进行直流方法的检验

            bool lineflag = true;      //只要有一个不合格则就为不合格
            bool jielieflag = true;    //判断有没有线路解裂

            for (int i = 0; i < waitlinecoll.Count; i++)
            {
                N1Test.NBcal kk = new N1Test.NBcal();
                kk.Show_KmRelia(waitlinecoll[i].linenum);
                if (File.Exists(System.Windows.Forms.Application.StartupPath + "\\ZL.txt"))
                {
                }
                else
                {
                    return;
                }
                dh2 = new FileStream(System.Windows.Forms.Application.StartupPath + "\\ZL.txt", FileMode.Open);

                readLine2 = new StreamReader(dh2);
                charSplit2 = new char[] { ' ' };
                strLine2 = readLine2.ReadLine();
                output = null;
                while (!string.IsNullOrEmpty(strLine2))
                {
                    array2 = strLine2.Split(charSplit2);

                    string[] dev = new string[2 * brchcount + 1];
                    dev.Initialize();

                    PSPDEV CR = new PSPDEV();
                    CR.SvgUID = tlVectorControl1.SVGDocument.CurrentLayer.ID;
                    int m = 0;
                    foreach (string str in array2)
                    {

                        if (str != "")
                        {

                            dev[m++] = str.ToString();

                        }
                    }
                    //进行解裂和负荷判断

                    if (dev[1] != "-1")
                    {
                        for (int j = 0; j < brchcount; j++)
                        {

                            double pij = System.Math.Abs(Convert.ToDouble(dev[j * 2 + 2])) * capability;

                            PSPDEV psp = new PSPDEV();

                            psp.Name = dev[j * 2 + 1];
                            psp.Type = "Polyline";
                            psp.SvgUID = tlVectorControl1.SVGDocument.CurrentLayer.ID;
                            IList listName = Services.BaseService.GetList("SelectPSPDEVByName", psp);
                            PSPDEV pspline = (PSPDEV)listName[0];
                            double voltR = pspline.VoltR;
                            WireCategory wirewire = new WireCategory();
                            wirewire.WireType = pspline.LineType;
                            if (string.IsNullOrEmpty(pspline.LineType))
                            {
                                MessageBox.Show(pspline.Name + "的线路类型没有输入,无法进行可靠性检验", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                return;
                            }
                            WireCategory listware = (WireCategory)Services.BaseService.GetObject("SelectWireCategoryByKey", wirewire);
                            double Ichange = (double)listware.WireChange;
                            double linXij = System.Math.Sqrt(3) * voltR * Ichange / 1000;
                            if (pij >= linXij)
                            {
                                lineflag = false;
                                //lineclass _line = new lineclass(n, j);
                                //Overlinp.Add(_line);
                                // OverPhege[n] = j;
                            }

                        }

                    }

                    else
                    {
                        jielieflag = false;
                    }

                    if (jielieflag && lineflag)
                    {
                        readLine2.Close();           //关闭读取的文件

                        PSPDEV psp = new PSPDEV();

                        psp.Name = dev[0];
                        psp.Type = "Polyline";
                        psp.SvgUID = tlVectorControl1.SVGDocument.CurrentLayer.ID;
                        IList listName = Services.BaseService.GetList("SelectPSPDEVByName", psp);
                        PSPDEV pspline = (PSPDEV)listName[0];
                        pspline.LineStatus = "等待";
                        Services.BaseService.Update<PSPDEV>(pspline);
                        jianxiancheck();       //进行下一轮的减线处理
                        return;
                    }
                    /*
                          else
                                                 break;*/

                    strLine2 = readLine2.ReadLine();
                }
                readLine2.Close();

            }
            // readLine2.Close();
        }