using System.Collections.Generic; using System.Diagnostics; using Aitex.Core.RT.Device; using Aitex.Core.RT.Routine; using Aitex.Core.RT.SCCore; using SicModules.Aligners; using SicModules.Buffers; using SicModules.Cassettes; using SicModules.EFEMs; using SicModules.LLs; using SicModules.PMs; using SicModules.TMs; using SicModules.UnLoads; using SicRT.Equipments.Systems; namespace SicRT.Modules { public class HomeAll { List> _lstModules = new List>(); List _homingModules = new List(); public HomeAll() { } public Result Start(params object[] objs) { if (Debugger.IsAttached) EV.PostInfoLog("System", "这是一个长字符串用于测试MainWindow的LOG下拉框是否约束了显示宽度这是一个长字符串用于测试MainWindow的LOG下拉框是否约束了显示宽度这是一个长字符串用于测试MainWindow的LOG下拉框是否约束了显示宽度"); _lstModules.Clear(); _homingModules.Clear(); var dicModules = new Dictionary(); var tm = Singleton.Instance.Modules[ModuleName.TM] as TMModule; List lstA = new List(); if (tm.IsInstalled) { lstA.Add(Singleton.Instance.Modules[ModuleName.TM] as IModuleDevice ); dicModules.Add(tm.Module, tm.IsBusy); } var EFEM = Singleton.Instance.Modules[ModuleName.EFEM] as EFEMModule; if (EFEM.IsInstalled) { lstA.Add(Singleton.Instance.Modules[ModuleName.EFEM] as IModuleDevice); dicModules.Add(EFEM.Module, EFEM.IsBusy); } _lstModules.Add(lstA); var waferRobot = Singleton.Instance.Modules[ModuleName.WaferRobot] as WaferRobotModule; if (waferRobot.IsInstalled) { lstA.Add(Singleton.Instance.Modules[ModuleName.WaferRobot] as IModuleDevice); dicModules.Add(waferRobot.Module, waferRobot.IsBusy); } _lstModules.Add(lstA); var trayRobot = Singleton.Instance.Modules[ModuleName.TrayRobot] as TrayRobotModule; if (trayRobot.IsInstalled) { lstA.Add(Singleton.Instance.Modules[ModuleName.TrayRobot] as IModuleDevice); dicModules.Add(trayRobot.Module, trayRobot.IsBusy); } _lstModules.Add(lstA); var lstModules = new List(); var ll = Singleton.Instance.Modules[ModuleName.LoadLock] as LoadLockModule; if (ll.IsInstalled) { lstModules.Add(Singleton.Instance.Modules[ModuleName.LoadLock] as IModuleDevice); dicModules.Add(ll.Module, ll.IsBusy); } var unLoad = Singleton.Instance.Modules[ModuleName.UnLoad] as UnLoadModule; if (unLoad.IsInstalled) { lstModules.Add(Singleton.Instance.Modules[ModuleName.UnLoad] as IModuleDevice); dicModules.Add(unLoad.Module, unLoad.IsBusy); } var buffer = Singleton.Instance.Modules[ModuleName.Buffer] as BufferModule; if (buffer.IsInstalled) { lstModules.Add(Singleton.Instance.Modules[ModuleName.Buffer] as IModuleDevice); dicModules.Add(buffer.Module, buffer.IsBusy); } if (SC.GetValue($"System.SetUp.IsPM1Installed")) { var pm1 = Singleton.Instance.Modules[ModuleName.PM1] as PMModule; //pm1.CreateProcessDoneSignal(out _); if (pm1.IsInstalled) { lstModules.Add(Singleton.Instance.Modules[ModuleName.PM1] as IModuleDevice); dicModules.Add(pm1.Module, pm1.IsBusy); } } if (SC.GetValue($"System.SetUp.IsPM2Installed")) { var pm2 = Singleton.Instance.Modules[ModuleName.PM2] as PMModule; if (pm2.IsInstalled) { lstModules.Add(Singleton.Instance.Modules[ModuleName.PM2] as IModuleDevice); dicModules.Add(pm2.Module, pm2.IsBusy); } } var aligner = Singleton.Instance.Modules[ModuleName.Aligner] as AlignerModule; if (aligner.IsInstalled) { lstModules.Add(Singleton.Instance.Modules[ModuleName.Aligner] as IModuleDevice); dicModules.Add(aligner.Module, aligner.IsBusy); } var cassAL = Singleton.Instance.Modules[ModuleName.CassAL] as CassetteModule; if (cassAL.IsInstalled) { lstModules.Add(Singleton.Instance.Modules[ModuleName.CassAL] as IModuleDevice); dicModules.Add(cassAL.Module, cassAL.IsBusy); } var cassAR = Singleton.Instance.Modules[ModuleName.CassAR] as CassetteModule; if (cassAR.IsInstalled) { lstModules.Add(Singleton.Instance.Modules[ModuleName.CassAR] as IModuleDevice); dicModules.Add(cassAR.Module, cassAR.IsBusy); } var cassBL = Singleton.Instance.Modules[ModuleName.CassBL] as CassetteModule; if (cassBL.IsInstalled) { lstModules.Add(Singleton.Instance.Modules[ModuleName.CassBL] as IModuleDevice); dicModules.Add(cassBL.Module, cassBL.IsBusy); } _lstModules.Add(lstModules); foreach (var item in dicModules) { if (item.Value) { EV.PostWarningLog("System", $"{item.Key} is busy,can not do Initialize"); return Result.FAIL; } } return Result.RUN; } public Result Monitor(params object[] objs) { if (_homingModules.Count == 0 && _lstModules.Count == 0) return Result.DONE; if (_homingModules.Count > 0) { foreach (var module in _homingModules) { if (module.IsError) return Result.FAIL; if (!module.IsReady) return Result.RUN; } _homingModules.Clear(); if (_lstModules.Count == 0) return Result.DONE; } if (_homingModules.Count == 0) { foreach (var moduleEntity in _lstModules[0]) { if (!moduleEntity.IsReady) { if (!moduleEntity.Home(out string reason)) return Result.FAIL; _homingModules.Add(moduleEntity); } } _lstModules.RemoveAt(0); } return Result.RUN; } public void Clear() { _lstModules.Clear(); _homingModules.Clear(); } } }