/* * 2019 Winpac Project * * Recipe_Files(KNS) * 1. 이름변경 'Recipename.tgz' * 2. TGZ 압축해제 * 3. Parameter(.PRM) Group ID = .WIR * * ex) * group EC90CA41.PRM 2 2 2 2 2 2 * * group EC90CA42.PRM 3 3 3 3 3 3 * * group EC90CA2A.PRM 1 1 1 1 1 1 * * group EC90CA43.PRM 4 4 4 4 4 4 * 4. Parameter 기준 : symbol = value units sys_type parm_type class min max default * 5. WireMap Master Data : 각.REF 파일의 opp 중 의 첫번째(OP0, OP1) * * ex) * opp OP0 * { (이것만 사용) * loc = 195.91861 -78.662544 mils * mag = 6.0 * v_ill_p * { * red = 0.0 * * blue = 8.0 * * } * o_ill_p * { * red = 0.0 * * blue = 0.0 * * } * ill_optimization_mode = CONTRAST * ltol = 0.5 * opp_window = 5.0 5.0 mils * opp_win_angle = 0.0 deg * snapshot_img = CV908A25.JPG * } * opp OP1 * { * loc = -195.87097 97.659302 mils * mag = 6.0 * ill_optimization_mode = CONTRAST * snapshot_img = CV908A28.JPG * } * 6. WireMap Spec Data : ex 참고 * * * ex) * site 2 { (para id) * loc = 219.51819 -80.809013 mils(X value, Y value, 단위) * * auto_frdg = 1.0 * compliance = 0.0 * } * * Group ID : * ex) * name DIE_1(Group Id) * * boundary { * loc = -198.677 -100.9798 mils * } * boundary { * loc = 198.36142 101.72874 mils * } * boundary { * loc = 198.6272 -100.29877 mils * } * boundary { * loc = -198.67636 100.82072 mils * } * 7. Compare 기준 : * 7-1 : Result = Master X - Spec X && Master Y - Spec Y * 7-2 : Spec LSL, Spec USL = Result +- WireMapValue * 7-3 : lsl, usl in out 에 따른 valid, invalid * * 8. .BND file 에서 읽어올 .ref 파일 읽어옴 */ #endregion /// <summary> /// 1. 이름변경 'Recipename.tgz', 2. TGZ 압축해제(untgz_RECIPENAME) /// </summary> /// <param name="path"></param> public void RenameUntgzRecipeFile(string filePath, string recipeName) { string sDirPath = string.Empty; System.IO.DirectoryInfo DI = null; //-- 1. 이름변경 'Recipename.tgz', 2. TGZ 압축해제(untgz_RECIPENAME) DI = new System.IO.DirectoryInfo(filePath); string tgzFileName = filePath + recipeName + ".tgz"; foreach (var item in DI.GetFiles()) { if (item.Name.Equals(recipeName)) { System.IO.File.Copy(filePath + recipeName, tgzFileName, true); } } sDirPath = filePath + "untgz_" + recipeName + "\\"; DirectoryInfo di = new DirectoryInfo(sDirPath); if (di.Exists == false) { di.Create(); } FIleCompact.UnTgz(tgzFileName, sDirPath); }
public List <RecipeConfig> KNSPARSE(string filePath, string recipeName) { //string BODY_MGR_CODE = DateTime.Now.ToString("yyyyMMddHHmmss") + SequenceGeneratorGlobal.GetInstance().Next().ToString("0000"); string sDirPath = string.Empty; System.IO.DirectoryInfo DI = null; string fileExtension = string.Empty; string fileRead = string.Empty; string fileName = string.Empty; string groupid = string.Empty; string wireMaster = string.Empty; string masterxValue = string.Empty; string masteryValue = string.Empty; string masteryUnit = string.Empty; string units = string.Empty; string[] fileSplit; RecipeConfig recipeConfig = null; ArrayList REFList = new ArrayList(); ArrayList groupIdList = new ArrayList(); List <RecipeConfig> RecipeParaList = new List <RecipeConfig>(); ArrayList RecipeWireList = new ArrayList(); //-- 1. 이름변경 'Recipename.tgz', 2. TGZ 압축해제(untgz_RECIPENAME) DI = new System.IO.DirectoryInfo(filePath); string tgzFileName = filePath + recipeName + ".tgz"; foreach (var item in DI.GetFiles()) { if (item.Name.Equals(recipeName)) { System.IO.File.Copy(filePath + recipeName, tgzFileName, true); break; } } sDirPath = filePath + "untgz_" + recipeName + "\\"; DI = new DirectoryInfo(sDirPath); if (DI.Exists == false) { DI.Create(); } FIleCompact.UnTgz(tgzFileName, sDirPath); // Directory.Delete(tgzFileName, true); fileExtension = string.Empty; //-- 3. Parameter(.PRM) Group ID = .WIR //DI = null; //DI = new System.IO.DirectoryInfo(sDirPath); foreach (var item in DI.GetFiles()) { if (item.Extension == ".WIR") //if (item.Extension == ".PHY") { try { fileSplit = null; groupIdList = new ArrayList(); fileExtension = item.Name; fileRead = File.ReadAllText(sDirPath + fileExtension); fileSplit = fileRead.Replace("\r", "").Split('\n'); for (int i = 0; i < fileSplit.Length; i++) { if (fileSplit[i].Contains(".PRM")) { string[] groupIdSplit = fileSplit[i].Split(' '); if (groupIdSplit[0].Equals("group") && groupIdSplit[1].Contains(".PRM")) { groupIdList.Add(groupIdSplit[0] + groupIdSplit[3] + ":" + groupIdSplit[1]); } } } fileRead = null; fileSplit = null; } catch (Exception ex) { fileRead = null; fileSplit = null; } } if (item.Extension == ".BND") { try { fileSplit = null; fileExtension = item.Name; fileRead = File.ReadAllText(sDirPath + item.Name); fileSplit = fileRead.Split('\n'); for (int i = 0; i < fileSplit.Length; i++) { if (fileSplit[i].Contains("ref")) { string[] paraSplit = fileSplit[i].ToString().Replace("\t", " ").Split(' '); if (paraSplit[1].Contains(".REF")) { REFList.Add(paraSplit[1]); } } } fileRead = null; fileSplit = null; } catch (Exception ex) { fileRead = null; fileSplit = null; } } } for (int i = 0; i < groupIdList.Count; i++) //Get parameter { fileSplit = groupIdList[i].ToString().Split(':'); fileName = fileSplit[1]; groupid = fileSplit[0]; try { fileRead = File.ReadAllText(sDirPath + fileSplit[1]); fileSplit = fileRead.Split('\n'); for (int j = 15; j < fileSplit.Length; j++) { recipeConfig = new RecipeConfig(); recipeConfig.FILE_NAME = fileName; recipeConfig.GROUP_ID = groupid; recipeConfig.WB_TYPE = "P"; if (fileSplit[j].Contains("=")) { string[] paraSplit = fileSplit[j].ToString().Replace(" ", ",").Split(','); List <string> paraRefactoring = new List <string>(); //paraRefactoring.Add(group_id); foreach (string str in paraSplit) { if (!string.IsNullOrEmpty(str) && !str.Equals("=")) { paraRefactoring.Add(str); } } //# symbol = value units sys_type parm_type class min max default //recipeConfig.ITEM_ID = paraRefactoring[0]; //recipeConfig.PARA_VALUE = paraRefactoring[1]; //recipeConfig.PARA_MIN = paraRefactoring[6]; //recipeConfig.PARA_MAX = paraRefactoring[7]; //recipeConfig.PARA_DEF = paraRefactoring[8]; recipeConfig.ITEM_ID = paraRefactoring[0]; recipeConfig.PARA_VALUE = paraRefactoring[1]; if (paraRefactoring[2].Equals("no_units")) { recipeConfig.ITEM_UNIT = ""; } else { recipeConfig.ITEM_UNIT = paraRefactoring[2]; } recipeConfig.PARA_sys_type = paraRefactoring[3]; recipeConfig.PARA_param_type = paraRefactoring[4]; recipeConfig.PARA_CLASS = paraRefactoring[5]; recipeConfig.PARA_MIN = paraRefactoring[6]; recipeConfig.PARA_MAX = paraRefactoring[7]; recipeConfig.PARA_DEF = paraRefactoring[8]; RecipeParaList.Add(recipeConfig); } } fileSplit = null; fileRead = null; recipeConfig = null; } catch (Exception ex) { fileSplit = null; fileRead = null; recipeConfig = null; } } groupIdList = null; string b = null; foreach (var item in DI.GetFiles()) //Get wiremap data { List <string> wireRefactoring = new List <string>(); try { if (item.Extension.Equals(".REF")) { fileRead = File.ReadAllText(sDirPath + item.Name); fileName = item.Name; fileSplit = fileRead.Replace("\r", "").Split('\n'); wireMaster = null; for (int j = 0; j < fileSplit.Length; j++) { recipeConfig = new RecipeConfig(); if (fileSplit[j].Contains("name")) { groupid = fileSplit[j].Split('\t')[1]; //recipeConfig.GROUP_ID = fileSplit[j].Split('\t')[1]; } else if (fileSplit[j].Contains("opp") && !fileSplit[j].Contains("_")) { string a = null; if (wireMaster == null && fileSplit[j + 1].Contains("loc")) { wireMaster = fileSplit[j].Split(' ')[1]; masterxValue = fileSplit[j + 1].Split('\t')[4]; masteryValue = fileSplit[j + 1].Split('\t')[5]; masteryUnit = fileSplit[j + 1].Split('\t')[6]; recipeConfig.FILE_NAME = fileName; recipeConfig.GROUP_ID = groupid; recipeConfig.ITEM_ID = wireMaster; recipeConfig.ITEM_UNIT = masteryUnit; recipeConfig.MASTER_ID = wireMaster; recipeConfig.MASTER_X_VALUE = masterxValue; recipeConfig.MASTER_Y_VALUE = masteryValue; recipeConfig.COMPARE_YN = "N"; recipeConfig.WB_TYPE = "W"; recipeConfig.REVISION = null; RecipeParaList.Add(recipeConfig); } recipeConfig = null; } else if (fileSplit[j].Contains("site") && fileSplit[j].Contains("{")) { string a = null; recipeConfig.ITEM_ID = fileSplit[j].Split(' ')[0] + fileSplit[j].Split(' ')[1]; if (fileSplit[j + 1].Contains("loc")) { recipeConfig.GROUP_ID = groupid; recipeConfig.WIRE_X_VALUE = fileSplit[j + 1].Split('\t')[4]; recipeConfig.WIRE_Y_VALUE = fileSplit[j + 1].Split('\t')[5]; recipeConfig.ITEM_UNIT = fileSplit[j + 1].Split('\t')[6]; recipeConfig.MASTER_ID = wireMaster; recipeConfig.MASTER_X_VALUE = masterxValue; recipeConfig.MASTER_Y_VALUE = masteryValue; recipeConfig.COMPARE_YN = "Y"; recipeConfig.WB_TYPE = "W"; recipeConfig.FILE_NAME = fileName; recipeConfig.REVISION = null; } RecipeParaList.Add(recipeConfig); } } //RecipeWireList.Add(recipeConfig); } } catch (Exception ex) { fileSplit = null; fileRead = null; } } return(RecipeParaList); }