using System; using System.Collections.Generic; using Aitex.Common.Util; using Aitex.Core.RT.ConfigCenter; using Aitex.Core.RT.DataCenter; using Aitex.Core.RT.DataCollection; using Aitex.Core.RT.DBCore; using Aitex.Core.RT.Event; using Aitex.Core.RT.Log; using Aitex.Core.RT.OperationCenter; using Aitex.Core.RT.RecipeCenter; using Aitex.Core.Util; using Aitex.Core.WCF; using MECF.Framework.Common.Account; using MECF.Framework.Common.Communications; using MECF.Framework.Common.Equipment; using MECF.Framework.Common.FAServices; using MECF.Framework.Common.IOCore; using MECF.Framework.Common.SCCore; using MECF.Framework.Common.SubstrateTrackings; using MECF.Framework.RT.Core.Applications; using MECF.Framework.RT.Core.Backend; using MECF.Framework.RT.Core.IoProviders; using System.IO; using Aitex.Core.RT.Device; using FurnaceRT.Devices; using FurnaceRT.Equipments.Systems; using FurnaceRT.Equipments.PMs.RecipeExecutions; using MECF.Framework.Common.Alarms; using MECF.Framework.FA.Core.FAControl; using MECF.Framework.Common.RecipeCenter; using Aitex.Core.RT.Device.Unit; using FurnaceRT.Backends; using SorterRT.Modules; using FurnaceRT.Recipes; using Aitex.Core.RT.ParameterCenter; using FurnaceRT.Parameter; using Aitex.Core.RT.SCCore; using MECF.Framework.Common.Minics; namespace FurnaceRT.Instances { class ToolLoader : IRtLoader { public void Initialize() { Singleton.Instance.Initialize(); string s1 = System.Diagnostics.FileVersionInfo.GetVersionInfo(Path.Combine(PathManager.GetAppDir(), "FurnaceRT.exe")).ProductVersion; LOG.Write($"RT {s1} launch ..."); Singleton.Instance.Initialize(); Singleton.Instance.Initialize( System.Configuration.ConfigurationManager.ConnectionStrings["PostgreSQL"].ConnectionString , RtInstance.DatabaseName , PathManager.GetCfgDir() + "DBModel.sql"); Singleton.Instance.Initialize(); Singleton.Instance.Initialize(); Singleton.Instance.Initialize(); Singleton.Instance.Initialize(PathManager.GetCfgDir() + $"System.sccfg"); // Singleton.Instance.Initialize(PathManager.GetCfgDir() + "EventDefine.xml"); Singleton.Instance.Initialize(PathManager.GetCfgDir() + "EventDefine.xml", PathManager.GetCfgDir() + $"{SC.GetStringValue("System.SetUp.ToolType")}\\AlarmEventDefine.xml"); RecipeFileManager.Instance.Initialize(new FurnaceRecipeFileContext()); ParameterFileManager.Instance.Initialize(new ParameterFileContext()); AccountExManager.Instance.Initialize(true); Singleton.Instance.Initialize(); ConnectionManager.Instance.Initialize(); string ioProviderPathFile = PathManager.GetCfgDir() + $"IO\\{SC.GetStringValue("System.SetUp.ToolType")}\\IoProviderConfig.xml"; IoProviderManager.Instance.Initialize(ioProviderPathFile); WaferManager.Instance.Initialize(); CarrierManager.Instance.Initialize(); CarrierManager.Instance.Initialize(); Singleton.Instance.Initialize("10.4.6.24", 50052); Singleton.Instance.DisableAsyncInitialize = true; Singleton.Instance.Initialize(PathManager.GetCfgDir() + $"IO\\{SC.GetStringValue("System.SetUp.ToolType")}\\DeviceModelPM.xml", "Furnace", ModuleName.PM1, "PM1", false); if (SC.GetStringValue("System.SetUp.ToolType") == "ELK" && !(SC.ContainsItem("System.EnableMinics") && SC.GetValue("System.EnableMinics"))) { Singleton.Instance.Initialize(PathManager.GetCfgDir() + $"IO\\{SC.GetStringValue("System.SetUp.ToolType")}\\DeviceModelGasLine.xml", "Furnace", ModuleName.PM1, "GasLine1", false); Singleton.Instance.Initialize(PathManager.GetCfgDir() + $"IO\\{SC.GetStringValue("System.SetUp.ToolType")}\\DeviceModelGasLine.xml", "Furnace", ModuleName.PM1, "GasLine2", false); Singleton.Instance.Initialize(PathManager.GetCfgDir() + $"IO\\{SC.GetStringValue("System.SetUp.ToolType")}\\DeviceModelGasLine.xml", "Furnace", ModuleName.PM1, "GasLine3", false); Singleton.Instance.Initialize(PathManager.GetCfgDir() + $"IO\\{SC.GetStringValue("System.SetUp.ToolType")}\\DeviceModelGasLine.xml", "Furnace", ModuleName.PM1, "GasLine4", false); Singleton.Instance.Initialize(PathManager.GetCfgDir() + $"IO\\{SC.GetStringValue("System.SetUp.ToolType")}\\DeviceModelGasLine.xml", "Furnace", ModuleName.PM1, "GasLine5", false); Singleton.Instance.Initialize(PathManager.GetCfgDir() + $"IO\\{SC.GetStringValue("System.SetUp.ToolType")}\\DeviceModelGasLine.xml", "Furnace", ModuleName.PM1, "GasLine6", false); Singleton.Instance.Initialize(PathManager.GetCfgDir() + $"IO\\{SC.GetStringValue("System.SetUp.ToolType")}\\DeviceModelGasLine.xml", "Furnace", ModuleName.PM1, "GasLine7", false); //Singleton.Instance.Initialize(PathManager.GetCfgDir() + $"IO\\{SC.GetStringValue("System.SetUp.ToolType")}\\DeviceModelGasLine.xml", "Furnace", ModuleName.PM1, "GasLine8", false); } Singleton.Instance.Initialize(PathManager.GetCfgDir() + "IO\\DeviceModelHeater.xml", "Furnace", ModuleName.System, "Heater", true); Singleton.Instance.Initialize(); RtSystemManager.Instance.AddCustomBackend("SC", new BackendSCConfigView()); //RtSystemManager.Instance.AddCustomBackend("Tune Table", new BackendTuneView()); Singleton.Instance.Initialize(); Singleton.Instance.InitializeFA(); //Singleton.Instance.Initialize("Furnace", 2); //DEVICE.GetDevice("LP1.Loadport1E84").Provider = Singleton.Instance.GetLoadPort(1); //DEVICE.GetDevice("LP2.Loadport2E84").Provider = Singleton.Instance.GetLoadPort(2); //Singleton.Instance.FAloadports["LP1"].SetAnyInheritILoadPortDevice(DEVICE.GetDevice("PM1." + ModuleName.LP1.ToString())); //Singleton.Instance.FAloadports["LP2"].SetAnyInheritILoadPortDevice(DEVICE.GetDevice("PM1." + ModuleName.LP2.ToString())); //if(DEVICE.GetDevice("LP1.Loadport1E84") != null) // DEVICE.GetDevice("LP1.Loadport1E84").Provider = Singleton.Instance.FAloadports["LP1"]; //if (DEVICE.GetDevice("LP2.Loadport2E84") != null) // DEVICE.GetDevice("LP2.Loadport2E84").Provider = Singleton.Instance.FAloadports["LP2"]; // Singleton.Instance.JobCallBack = Singleton.Instance; Singleton.Instance.Initialize(); Singleton.Instance.SubscribeOperationAndData(); IoManager.Instance.Initialize(PathManager.GetCfgDir() + $"{SC.GetStringValue("System.SetUp.ToolType")}\\interlock.xml", PathManager.GetCfgDir() + $"{SC.GetStringValue("System.SetUp.ToolType")}\\interlockUserDefine.xml"); UpgradeDataTable(); Singleton.Instance.FireEvent += InstanceOnEvent; VIDManager2.Instance.Initialize(RtInstance.SystemName, true, true); //Singleton.Instance.Serialize(); DataCollectionManager.Instance.Initialize(new string[] { "System", "PM1" }, RtInstance.DatabaseName); } private void InstanceOnEvent(EventItem obj) { if (obj.Level != EventLevel.Alarm) { Singleton.Instance.NotifyEvent(obj.EventEnum, obj.ObjDVID); } else { Singleton.Instance.NotifyAlarm(obj.EventEnum, obj.ObjDVID); } } private void UpgradeDataTable() { DB.CreateTableColumn("recipe_step_data", new Dictionary() { {"sub_recipe_step_time", typeof(string) }, {"sub_recipe_step_number", typeof(string) }, {"sub_recipe_step_name", typeof(string) }, {"sub_recipe_loop_info", typeof(string) }, {"temp_correction", typeof(string) }, {"temp_pid", typeof(string) }, }); } public void Terminate() { Singleton.Instance.Terminate(); Singleton.Instance.Terminate(); IoProviderManager.Instance.Terminate(); Singleton.Instance.Terminate(); DataCollectionManager.Instance.Terminate(); Singleton.Instance.Terminate(); Singleton.Instance.Terminate(); Singleton.Instance.Terminate(); Singleton.Instance.Terminate(); } } }