using SA_LTT.Base; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SA_LTT.Info.WaferInfo { public class WaferInfoManager : XmlManager { public enum WaferNumbers { A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, Robot, PreAligner, Chamber, } Equipment _equipment; readonly string _filePath = @"Wafer\"; private Dictionary _waferInfos; public WaferInfoManager(Equipment equipement) { equipement = _equipment; _waferInfos = new Dictionary(); foreach(WaferNumbers info in Enum.GetValues(typeof(WaferNumbers))) { _waferInfos.Add(info, new WaferInfo()); } RefreshWaferInfo(); } public void RefreshWaferInfo() { DirectoryInfo directoryInfo = new DirectoryInfo(Equipment.infoFilePath + _filePath); if (directoryInfo.Exists == false) { directoryInfo.Create(); } WaferInfo waferinfo = new WaferInfo(); //LoadPort1, 2 for (int i = 0; i < 25; i++) { if (TryReadFile(directoryInfo.FullName + $"{WaferNumbers.A1 + i}.xml", out waferinfo)) { _waferInfos[WaferNumbers.A1 + i] = waferinfo; } else { waferinfo = new WaferInfo(); SaveFile(directoryInfo.FullName + $"{WaferNumbers.A1 + i}.xml", waferinfo); } if (TryReadFile(directoryInfo.FullName + $"{WaferNumbers.B1 + i}.xml", out waferinfo)) { _waferInfos[WaferNumbers.B1 + i] = waferinfo; } else { waferinfo = new WaferInfo(); SaveFile(directoryInfo.FullName + $"{WaferNumbers.B1 + i}.xml", waferinfo); } } //Robot if (TryReadFile(directoryInfo.FullName + $"Robot.xml", out waferinfo)) { _waferInfos[WaferNumbers.Robot] = waferinfo; } else { waferinfo = new WaferInfo(); SaveFile(directoryInfo.FullName + $"Robot.xml", waferinfo); } //Pre align if (TryReadFile(directoryInfo.FullName + $"PreAligner.xml", out waferinfo)) { _waferInfos[WaferNumbers.PreAligner] = waferinfo; } else { waferinfo = new WaferInfo(); SaveFile(directoryInfo.FullName + $"PreAligner.xml", waferinfo); } //Chamber if (TryReadFile(directoryInfo.FullName + $"Chamber.xml", out waferinfo)) { _waferInfos[WaferNumbers.Chamber] = waferinfo; } else { waferinfo = new WaferInfo(); SaveFile(directoryInfo.FullName + $"Chamber.xml", waferinfo); } } public void MoveWaferInfo(WaferNumbers source, WaferNumbers destination) { _waferInfos[destination] = _waferInfos[source].Clone(); _waferInfos[source] = new WaferInfo(); SetWaferInfo(source, _waferInfos[source]); SetWaferInfo(destination, _waferInfos[destination]); } public WaferInfo GetWaferInfo(WaferNumbers waferNumber) { return _waferInfos[waferNumber].Clone(); } public void SetWaferInfo(WaferNumbers waferNumber, WaferInfo waferInfo) { lock(this) { _waferInfos[waferNumber] = waferInfo; SaveFile(Equipment.infoFilePath + _filePath + $"{waferNumber.ToString()}.xml", waferInfo); } } public static bool TryParse(int stageNum, int slotNum, out WaferNumbers waferNumber) { waferNumber = WaferNumbers.A1; WaferNumbers waferNum = WaferNumbers.A1; if (stageNum == 1) { //port 1 if(1 <= slotNum && slotNum <= 25) { waferNumber = waferNum + (slotNum - 1); } else { return false; } } else if (stageNum == 2) { //port 2 waferNum = WaferNumbers.B1; if (1 <= slotNum && slotNum <= 25) { waferNumber = waferNum + (slotNum - 1); } else { return false; } } else if (stageNum == 3 || stageNum == 4) { //Aligner if (slotNum == 1) { waferNumber = WaferNumbers.PreAligner; } else { return false; } } else if (stageNum == 5) { //Chamber if (slotNum == 1) { waferNumber = WaferNumbers.Chamber; } else { return false; } } return true; } } }