123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488 |
- using Aitex.Core.RT.ConfigCenter;
- using Aitex.Core.RT.DataCenter;
- using Aitex.Core.RT.SCCore;
- using MECF.Framework.Common.DataCenter;
- using MECF.Framework.Common.SCCore;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using static MECF.Framework.Common.Utilities.Parameter;
- namespace MECF.Framework.Common.Utilities
- {
- public static class ParameterConfigManager
- {
- private static bool _isInit = false;
- private static void InitializeAllBlocks()
- {
- if (_isInit) return;
- string key = "System.SetUp.BlockNumber";
- // string numberVlaue = SC.IsEnable ? SC.GetStringValue(key) : QueryDataClient.Instance.Service.GetConfig(key)?.ToString();
- string numberVlaue ="3Block";
- var numberOfBlock = int.Parse((numberVlaue.Replace("Block", "")));
- ParameterManager.Instance.NumberOfBlocks = numberOfBlock;
- ParameterManager.InitializeBlock();
- SCValue SCBlock = null;
- switch (numberOfBlock)
- {
- case 2:
- SCBlock = new SCValue2Block();
- break;
- case 3:
- SCBlock = new SCValue3Block();
- break;
- case 4:
- SCBlock = new SCValue4Block();
- break;
- default:
- break;
- }
- SCBlock.SetKeys();
- var scValue = CONFIG.IsEnable ? CONFIG.PollConfig(SCBlock.GetKeys()) : QueryDataClient.Instance.Service.PollConfig(SCBlock.GetKeys());
- SCBlock.Update(scValue);
- SCBlock.SetParameterValue(ParameterManager.Instance);
- _isInit = true;
- }
- public static void ResetInitializeAllBlocks()
- {
- string key = "System.SetUp.BlockNumber";
- string numberVlaue = SC.IsEnable ? SC.GetStringValue(key) : QueryDataClient.Instance.Service.GetConfig(key)?.ToString();
- var numberOfBlock = int.Parse((numberVlaue.Replace("Block", "")));
- ParameterManager.Instance.NumberOfBlocks = numberOfBlock;
- ParameterManager.InitializeBlock();
- SCValue SCBlock = null;
- switch (numberOfBlock)
- {
- case 2:
- SCBlock = new SCValue2Block();
- break;
- case 3:
- SCBlock = new SCValue3Block();
- break;
- case 4:
- SCBlock = new SCValue4Block();
- break;
- default:
- break;
- }
- SCBlock.SetKeys();
- var scValue = CONFIG.IsEnable ? CONFIG.PollConfig(SCBlock.GetKeys()) : QueryDataClient.Instance.Service.PollConfig(SCBlock.GetKeys());
- SCBlock.Update(scValue);
- SCBlock.SetParameterValue(ParameterManager.Instance);
- }
- public static string GetChemicalSupplySystem(string module)
- {
- string strRet = string.Empty;
- var tempString = module.Replace("PM", "").Split('_');
- string strCurrentBlock = tempString[0];
- string strCurrentModule = tempString.Length > 1 ? tempString[1] : string.Empty;
- string strDispenseConfig = string.Empty;
- string key = $"System.SetUp.Block{strCurrentBlock}.{strCurrentModule}.DispenseConfig";
- if (SC.IsEnable)
- strDispenseConfig = SC.GetStringValue(key).ToString();
- else
- strDispenseConfig = QueryDataClient.Instance.Service.GetConfig(key).ToString();
- string[] listDispense = strDispenseConfig.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
- for (int x = 0; x < listDispense.Length; x++)
- {
- string[] sigDispense = listDispense[x].Split(':');
- if (sigDispense[1].Split(',')[1].ToLower().Contains("true"))
- {
- strRet = sigDispense[1].Split(',')[8];
- if (strRet == "-") continue;
- break;
- }
- }
- strRet = strRet.Replace("CSS", "").Replace(" ", "");
- return strRet;
- }
- public static string GetParameterValueByIndex(string module, int firstIndex, int secondIndex)
- {
- string strRet = string.Empty;
- var tempString = module.Replace("PM", "").Split('_');
- string strCurrentBlock = tempString[0];
- string strCurrentModule = tempString.Length > 1 ? tempString[1] : string.Empty;
- string strDispenseConfig = string.Empty;
- string key = $"System.SetUp.Block{strCurrentBlock}.{strCurrentModule}.DispenseConfig";
- if (SC.IsEnable)
- strDispenseConfig = SC.GetStringValue(key).ToString();
- else
- strDispenseConfig = QueryDataClient.Instance.Service.GetConfig(key).ToString();
- string[] listDispense = strDispenseConfig.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
- for (int x = 0; x < listDispense.Length; x++)
- {
- string[] sigDispense = listDispense[x].Split(':');
- if (sigDispense[1].Split(',')[1].ToLower().Contains("true"))
- {
- string[] firstStrs = sigDispense[1].Split(',');
- if (firstStrs.Length > firstIndex)
- {
- string[] secondStrs = firstStrs[firstIndex].Split('/');
- if (secondStrs.Length > secondIndex)
- strRet = secondStrs[secondIndex];
- }
- }
- }
- return strRet;
- }
- public static string GetParameterValueByIndex(string module, string device, int firstIndex, int secondIndex)
- {
- string strRet = string.Empty;
- var tempString = module.Replace("PM", "").Split('_');
- string strCurrentBlock = tempString[0];
- string strCurrentModule = tempString.Length > 1 ? tempString[1] : string.Empty;
- string strDispenseConfig = string.Empty;
- string key = $"System.SetUp.Block{strCurrentBlock}.{strCurrentModule}.DispenseConfig";
- if (SC.IsEnable)
- strDispenseConfig = SC.GetStringValue(key).ToString();
- else
- strDispenseConfig = QueryDataClient.Instance.Service.GetConfig(key).ToString();
- string[] listDispense = strDispenseConfig.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
- for (int x = 0; x < listDispense.Length; x++)
- {
- string[] sigDispense = listDispense[x].Split(':');
- if (!sigDispense[0].Replace(".", "").ToLower().Contains(device))
- {
- continue;
- }
- if (sigDispense[1].Split(',')[1].ToLower().Contains("true"))
- {
- string[] firstStrs = sigDispense[1].Split(',');
- if (firstStrs.Length > firstIndex)
- {
- string[] secondStrs = firstStrs[firstIndex].Split('/');
- if (secondStrs.Length > secondIndex)
- strRet = secondStrs[secondIndex];
- }
- }
- }
- return strRet;
- }
- private static DeviceModule GetDeviceModuleByID(string ID)
- {
- InitializeAllBlocks();
- ID = ID.Replace("PM", "").Replace("_", "-");
- return ParameterManager.Instance.SpinerDeviceModule.First(x => x.ID == ID);
- }
- public static string GetDispenseRange(string moduleName, string deviceName, int index)
- {
- string strRet = string.Empty;
- var tempString = moduleName.Split('_');
- string strCurrentBlock = tempString[0];
- string strCurrentModule = tempString.Length > 1 ? tempString[1] : string.Empty;
- string strDispenseConfig = string.Empty;
- string key = $"System.SetUp.Block{strCurrentBlock}.{strCurrentModule}.DispenseConfig";
- if (SC.IsEnable)
- strDispenseConfig = SC.GetStringValue(key).ToString();
- else
- strDispenseConfig = QueryDataClient.Instance.Service.GetConfig(key).ToString(); string[] listDispense = strDispenseConfig.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
- for (int x = 0; x < listDispense.Length; x++)
- {
- string[] sigDispense = listDispense[x].Split(':');
- if (!sigDispense[0].Contains(deviceName))
- {
- continue;
- }
- if (sigDispense[1].Split(',')[1].ToLower().Contains("true"))
- {
- strRet = sigDispense[1].Split(',')[7].Split('/')[index];
- }
- }
- return strRet;
- }
- public static int GetSpinOffTime(string name)
- {
- int ret = -1;
- DeviceModule moudle = GetDeviceModuleByID(name);
- if (moudle !=null)
- {
- int.TryParse(moudle.ModuleSpiner.SpinOutTime,out ret);
- }
- return ret;
- }
- public static float GetSpinOffSpeed(string name)
- {
- float ret = -1;
- DeviceModule moudle = GetDeviceModuleByID(name);
- if (moudle != null)
- {
- float.TryParse(moudle.ModuleSpiner.SpinOutSpeed, out ret);
- }
- return ret;
- }
- public static List<float> GetSpinModulePara(string name, string armName, string pos)
- {
- //Arm1 resist arm
- //Arm2 ebr arm
- //Arm3 spin
- //Arm4 nozzle change
- DeviceModule moudle = GetDeviceModuleByID(name);
- if (moudle is null)
- return null;
- object obj = null;
- switch (armName)
- {
- case "Arm1":
- obj = moudle.ModuleSpiner.NozzleArmInformat1;
- break;
- case "Arm2":
- obj = moudle.ModuleSpiner.NozzleArmInformat2;
- break;
- case "Arm4":
- obj = moudle.ModuleSpiner.NozzleChanger;
- break;
- }
- if (obj == null)
- return null;
- List<float> listRet = new List<float>();
- float position = 0;
- float speed = 0;
- float acc = 0;
- float dec = 0;
- float unit = 0;
- if (obj is NozzleArmInformat)
- {
- NozzleArmInformat arm = obj as NozzleArmInformat;
- float.TryParse(arm.MotorPulsesRate, out unit);
- if (pos.ToLower().Contains("begin"))
- pos = "Begin";
- if (pos.ToLower().Contains("end"))
- pos = "End";
- var prop = arm.GetType().GetProperty(pos);
- if (prop != null)
- {
- TransferArmRecipePositionData data = prop.GetValue(arm) as TransferArmRecipePositionData;
- float.TryParse(data.Position, out position);
- float.TryParse(data.Acceleration, out acc);
- float.TryParse(data.Deceleration, out dec);
- }
- }
- else if (obj is NozzleChanger)
- {
- NozzleChanger arm = obj as NozzleChanger;
- float.TryParse(arm.MotorPulseRate, out unit);
- int.TryParse(pos, out int index);
- if (index > 0 && index <= arm.NozzleChangerData.Count)
- {
- NozzleChangerData data = arm.NozzleChangerData[index - 1];
- float.TryParse(data.Position, out position);
- }
- }
- listRet.Add(position);
- listRet.Add(speed);
- listRet.Add(acc);
- listRet.Add(dec);
- listRet.Add(unit);
- return listRet;
- }
- public static List<string> GetSpinModulePositions(string name, string armName)
- {
- DeviceModule moudle = GetDeviceModuleByID(name);
- if (moudle is null)
- return null;
- object obj = null;
- switch (armName)
- {
- case "Arm1":
- obj = moudle.ModuleSpiner.NozzleArmInformat1;
- break;
- case "Arm2":
- obj = moudle.ModuleSpiner.NozzleArmInformat2;
- break;
- case "Arm4":
- obj = moudle.ModuleSpiner.NozzleChanger;
- break;
- }
- if (obj == null)
- return null;
- List<string> listRet = new List<string>();
- if (obj is NozzleArmInformat)
- {
- foreach (var item in obj.GetType().GetProperties())
- {
- if (item.PropertyType == typeof(TransferArmRecipePositionData))
- {
- listRet.Add(item.Name);
- }
- }
- }
- else if (obj is NozzleChanger)
- {
- NozzleChanger arm = obj as NozzleChanger;
- foreach (var item in arm.NozzleChangerData.Where(x => x.IsNozzleChangerEnable.ToLower() == "yes"))
- {
- listRet.Add(item.ID);
- }
- }
- return listRet;
- }
- public static bool SetStnParas(string module, string hand, Dictionary<string, double> robotStnParas)
- {
- var name = module.Replace("PM", "").Replace("_", ".");
- Dictionary<string, object> scItems = new Dictionary<string, object>();
- foreach (var item in robotStnParas.Keys)
- {
- if (item == "StartOffset" || item == "EndOffset")
- {
- scItems.Add($"System.SetUp.Block{name}.TransferArmPosition.Zaxis.{item}", robotStnParas[item]);
- }
- else
- {
- scItems.Add($"System.SetUp.Block{name}.TransferArmPosition.{hand}.{item}", robotStnParas[item]);
- }
- }
- SystemConfigManager.Instance.SetItemValues(scItems);
- return true;
- }
- public static bool SetCassetteStnParas(string module, string hand, Dictionary<string, double> robotStnParas)
- {
- if (module.Contains("Cassette"))
- {
- var name = module.Replace("Cassette", "1.");
- Dictionary<string, object> scItems = new Dictionary<string, object>();
- foreach (var item in robotStnParas.Keys)
- {
- if (item == "StartOffset" || item == "EndOffset")
- {
- scItems.Add($"System.SetUp.Block{name}.TransferArmPosition.Zaxis.{item}", robotStnParas[item]);
- }
- else
- {
- scItems.Add($"System.SetUp.Block{name}.TransferArmPosition.{hand}.{item}", robotStnParas[item]);
- }
- }
- SystemConfigManager.Instance.SetItemValues(scItems);
- }
- else if (module.Contains("PM"))
- {
- var name = module.Replace("PM", "").Replace("_", ".");
- Dictionary<string, object> scItems = new Dictionary<string, object>();
- foreach (var item in robotStnParas.Keys)
- {
- if (item == "StartOffset" || item == "EndOffset")
- {
- scItems.Add($"System.SetUp.Block{name}.TransferArmPosition.Zaxis.{item}", robotStnParas[item]);
- }
- else
- {
- scItems.Add($"System.SetUp.Block{name}.TransferArmPosition.{hand}.{item}", robotStnParas[item]);
- }
- }
- SystemConfigManager.Instance.SetItemValues(scItems);
- }
- return true;
- }
- private static Dictionary<string, string> dicCSMappingKey = new Dictionary<string, string>() {
- {"FB_THICKNESS","WaferThickness"},
- {"Z_WAF","FirstSlotposition"},
- {"PITCH","SlotPitch"},
- {"MAP_START","MappingStartPosition"},
- {"MAP_END","MappingEndPosition"},
- {"NSLOTS","SlotNo"}
- };
- public static bool SetCassetteStnMappingParas(string module, string strData)
- {
- Dictionary<string, int> dicData = new Dictionary<string, int>();
- List<string> lstData = strData.Replace("STN 1", "").Trim(' ').Split(' ').ToList();
-
- for (int i = 0; i < lstData.Count; i=i+2)
- {
- if(dicCSMappingKey.ContainsKey(lstData[i]))
- dicData.Add(dicCSMappingKey[lstData[i]], int.Parse(lstData[i + 1]));
- }
- var name = module.Replace("Cassette", "1.");
- Dictionary<string, object> scItems = new Dictionary<string, object>();
- foreach (var item in dicData.Keys)
- {
- scItems.Add($"System.SetUp.Block{name}.{item}", dicData[item]);
- }
- SystemConfigManager.Instance.SetItemValues(scItems);
- return true;
- }
- public static Dictionary<string,object> GetCassetteStnMappingParas(string module)
- {
- Dictionary<string, object> ret = new Dictionary<string, object>();
- var name = module.Replace("Cassette", "1.");
- foreach (var item in dicCSMappingKey)
- {
- string key = $"System.SetUp.Block{name}.{item.Value}";
- object data = SC.GetValue<int>(key);
- ret.Add(item.Key, data);
- }
- return ret;
- }
- public static EunmTransferOrder GetTransferOrder(string key)
- {
- string configKey = $"Parameter.TransferOutOrInOrder.{key}";
- string value = SC.IsEnable ? SC.GetStringValue(configKey) : QueryDataClient.Instance.Service.GetConfig(configKey)?.ToString();
- EunmTransferOrder ret = EunmTransferOrder.ByTop;
- switch (value)
- {
- case "Top":
- ret = EunmTransferOrder.ByTop;
- break;
- case "Bottom":
- ret = EunmTransferOrder.ByBottom;
- break;
- case "Slot":
- ret = EunmTransferOrder.BySlot;
- break;
- }
- return ret;
- }
- public static MonitorEditData GetMonitorData(string moduleIndex, string controlName)
- {
- InitializeAllBlocks();
- return ParameterManager.Instance.MonitorData.FirstOrDefault(x => x.Module == moduleIndex.Replace("_", "-") && x.MeasDateName.ToLower().Contains(controlName.ToLower()));
- }
- public static List<KeyValuePair<string, DispenseConfig>> GetDPConigData(string moduleIndex)
- {
- InitializeAllBlocks();
- return ParameterManager.Instance.ModuleDispenseConfigList[$"{moduleIndex.Replace("_", "-")}"].Where(x => x.Value.IsChecked).ToList();
- }
- public static FlowSensorData GetDPConigFlowSensorData(string moduleIndex, string deviceName)
- {
- InitializeAllBlocks();
- return ParameterManager.Instance.ModuleDispenseConfigList[moduleIndex].FirstOrDefault(x => x.Value.IsChecked && x.Key == deviceName).Value?.FlowSensorData;
- }
- }
- }
|