예제 #1
0
        /// <summary>
        /// 创建XML到文档并调用SiSolver生成阻抗报告
        /// </summary>
        private void CreateXmlDoc()
        {
            //1、创建XML文档实例
            XmlDocument xmldoc     = new XmlDocument();
            string      version    = "1.0";
            string      encoding   = "UTF-8";
            string      standalone = "yes";
            //2、创建文档声明
            XmlDeclaration dec = xmldoc.CreateXmlDeclaration(version, encoding, standalone);

            xmldoc.AppendChild(dec);
            //3、创建文档元素
            //Doc节点
            XmlElement rootNode = xmldoc.CreateElement("Document");

            //一级   节点设置属性
            try
            {
                int length = attrDocument.Length;
                Dictionary <string, string> dictDocument = new Dictionary <string, string>();
                string[] attrDocument_values             = new string[length];
                string[] attrDocument_keys = new string[length];

                GetCustomer();

                dictDocument.Add("Dev_Owner", "SISOLVER");
                dictDocument.Add("Fab", "FOUNDERPCBF5");
                dictDocument.Add("Version", "1.0");
                dictDocument.Add("Project_Name", "Test");
                dictDocument.Add("Project_Ver", "A0");
                dictDocument.Add("Project_Designer", "SISOLVER");
                dictDocument.Add("Date", DateTime.Now.ToString());
                dictDocument.Add("Layer_Count", jobName.Substring(2, 2));
                dictDocument.Add("Base_Material", base_Material); //base_Material
                dictDocument.Add("Customer", "FOUNDERPCBF5");
                dictDocument.Add("Stackup_Ready", "YES");
                dictDocument.Add("Imp_Calc_Fixed", "NO");
                dictDocument.Add("Width_Min", "2"); //Width_Min="待确认"  这个预设为2

                int k = 0;
                foreach (var item in dictDocument.Keys)
                {
                    attrDocument_keys[k] = item.ToString();
                    k++;
                }

                int v = 0;
                foreach (var item in dictDocument.Values)
                {
                    attrDocument_values[v] = item.ToString();
                    v++;
                }

                XmlGenerate.AutoGerateAttr(xmldoc, rootNode, attrDocument_keys, attrDocument_values);
            }
            catch (Exception)
            {
                throw;
            }
            //二级   节点设置属性
            XmlElement nodeChild0 = xmldoc.CreateElement("Materials");
            XmlElement nodeChild1 = xmldoc.CreateElement("Materials");
            XmlElement nodeChild2 = xmldoc.CreateElement("Materials");
            XmlElement nodeChild3 = xmldoc.CreateElement("STACKUP_Segments");
            XmlElement nodeChild4 = xmldoc.CreateElement("Process_Parameters");
            XmlElement nodeChild5 = xmldoc.CreateElement("Process_Parameters");
            XmlElement nodeChild6 = xmldoc.CreateElement("Process_Parameters");
            XmlElement nodeChild7 = xmldoc.CreateElement("Process_Parameters");
            XmlElement nodeChild8 = xmldoc.CreateElement("Impedance_Lists");

            XmlGenerate.AutoGerateCNodeAttr(rootNode, nodeChild0, attrMaterials, "CORE");
            XmlGenerate.AutoGerateCNodeAttr(rootNode, nodeChild1, attrMaterials, "PREPREG");
            XmlGenerate.AutoGerateCNodeAttr(rootNode, nodeChild2, attrMaterials, "FOIL");
            XmlGenerate.AutoGerateCNodeAttr(rootNode, nodeChild4, attrProcess_Parameters, "CU_LAYER");
            XmlGenerate.AutoGerateCNodeAttr(rootNode, nodeChild5, attrProcess_Parameters, "DIE_LAYER");
            XmlGenerate.AutoGerateCNodeAttr(rootNode, nodeChild6, attrProcess_Parameters, "SM_LAYER");
            XmlGenerate.AutoGerateCNodeAttr(rootNode, nodeChild7, attrProcess_Parameters, "DRILL_LIST");

            //三级  节点设置属性
            //Job对象: CORE、PREPREG、FOIL、STACKUP_SEG、CU_LAYER、DIE_LAYER、SM_LAYER、DRILL_LIST、IMP_ITEM
            // 三级节点个数   由Job决定

            XmlElement[] xmlTEle_CORE        = new XmlElement[jobNum_CORE];        //Job对应的所有CORE
            XmlElement[] xmlTEle_PREPREG     = new XmlElement[jobNum_PREPREG];     //Job对应的所有PREPREG
            XmlElement[] xmlTEle_FOIL        = new XmlElement[jobNum_FOIL];        //Job对应的所有FOIL
            XmlElement[] xmlTEle_STACKUP_SEG = new XmlElement[jobNum_STACKUP_SEG]; //Job对应的所有STACKUP_SEG
            XmlElement[] xmlTEle_CU_LAYER    = new XmlElement[jobNum_CU_LAYER];    //Job对应的所有CU_LAYER
            XmlElement[] xmlTEle_DIE_LAYER   = new XmlElement[jobNum_DIE_LAYER];   //Job对应的所有DIE_LAYER
            XmlElement[] xmlTEle_SM_LAYER    = new XmlElement[1];                  //Job对应的所有SM_LAYER
            XmlElement[] xmlTEle_DRILL_LIST  = new XmlElement[jobNum_DRILL_LIST];  //Job对应的所有DRILL_LIST
            XmlElement[] xmlTEle_IMP_ITEM    = new XmlElement[jobNum_IMP_ITEM];    //Job对应的所有IMP_ITEM

            string stop = "";

            try
            {
                XmlGenerate.SetAttrsByArrayToJobAttrs3(xmldoc, nodeChild0, xmlTEle_CORE, listCoreT, "CORE");
                XmlGenerate.SetAttrsByArrayToJobAttrs3(xmldoc, nodeChild1, xmlTEle_PREPREG, listPrepregT, "PREPREG");
                XmlGenerate.SetAttrsByArrayToJobAttrs3(xmldoc, nodeChild2, xmlTEle_FOIL, listFoilT, "FOIL");
                XmlGenerate.SetAttrsByArrayToJobAttrs(xmldoc, nodeChild3, xmlTEle_STACKUP_SEG, attrsMaterialsStackupSegms, listStackupSeg, "STACKUP_SEG");
                XmlGenerate.SetAttrsByArrayToJobAttrs3(xmldoc, nodeChild4, xmlTEle_CU_LAYER, listCU_LAYERT, "CU_LAYER");
                XmlGenerate.SetAttrsByArrayToJobAttrs3(xmldoc, nodeChild5, xmlTEle_DIE_LAYER, listDieLayerT, "DIE_LAYER");
                XmlGenerate.SetAttrsByArrayToJobAttrs(xmldoc, nodeChild6, xmlTEle_SM_LAYER, attrsProParaSM_LAYER, listSM_LAYER, "SM_LAYER");
                XmlGenerate.SetAttrsByArrayToJobAttrs3(xmldoc, nodeChild7, xmlTEle_DRILL_LIST, listDRILL_LISTT, "DRILL_LIST");
                XmlGenerate.SetAttrsByArrayToJobAttrs3(xmldoc, nodeChild8, xmlTEle_IMP_ITEM, listIMP_ITEMT, "IMP_ITEM");
            }
            catch (Exception)
            {
                //throw;
            }

            //二级节点 一级节点
            XmlNode[] node = { nodeChild0, nodeChild1, nodeChild2, nodeChild3, nodeChild4, nodeChild5, nodeChild6, nodeChild7, nodeChild8 };
            foreach (var item in node)
            {
                rootNode.AppendChild(item);
            }
            //一级节点 顶级节点
            //jobName = "ME10N20JG6A3";//"GE02N20FQ4A0";
            string folderpath = string.Format("C:\\SiSolverCalculate\\{0}\\", jobName);
            string filepath   = string.Format("C:\\SiSolverCalculate\\{0}\\{1}.xml", jobName, jobName);
            string p1         = string.Format("C:\\SiSolverCalculate\\{0}\\", jobName);
            string filename   = string.Format("{0}.xml", jobName);

            if (!Directory.Exists(folderpath))
            {
                Directory.CreateDirectory(folderpath);
                //创建文件
                xmldoc.Save(filepath);
                XmlGenerate.InterfaceOfSiSolver(filepath);
            }
            else
            {
                //文件是否存在,创建文件
                if (File.Exists(filepath))
                {
                    //判断是否存在文件
                    //MessageBox.Show("阻抗已成功生成,如继续将生成的文件");
                    string str = XmlGenerate.fileExists(filepath, p1, times, jobName);
                    xmldoc.Save(str);
                    Thread.Sleep(10000);
                    XmlGenerate.InterfaceOfSiSolver(str);//p1 + str
                    //times = 1;
                }

                else
                {
                    xmldoc.Save(filepath);
                    Thread.Sleep(10000);
                    XmlGenerate.InterfaceOfSiSolver(filepath);
                }
            }
        }