2023-03-29 10:19:02 +08:00
|
|
|
|
using Aitex.Common.Util;
|
2023-03-03 15:42:13 +08:00
|
|
|
|
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.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;
|
2023-04-13 15:35:13 +08:00
|
|
|
|
using SicModules.PMs.RecipeExecutions;
|
2023-03-03 15:42:13 +08:00
|
|
|
|
using SorterRT.Modules;
|
|
|
|
|
using SicRT.Equipments.Systems;
|
2023-04-23 14:18:42 +08:00
|
|
|
|
using MECF.Framework.UI.Core.TrayCoating;
|
2023-03-03 15:42:13 +08:00
|
|
|
|
|
|
|
|
|
namespace SicRT.Instances
|
|
|
|
|
{
|
|
|
|
|
internal class ToolLoader : IRtLoader
|
|
|
|
|
{
|
|
|
|
|
#region Variables
|
|
|
|
|
|
2023-03-28 13:24:11 +08:00
|
|
|
|
|
2023-03-03 15:42:13 +08:00
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
public void Initialize()
|
|
|
|
|
{
|
|
|
|
|
Singleton<LogManager>.Instance.Initialize();
|
|
|
|
|
|
|
|
|
|
LOG.Write($"RT v{RtInstance.SystemVersion} launch ...");
|
|
|
|
|
|
|
|
|
|
Singleton<ConfigManager>.Instance.Initialize();
|
|
|
|
|
|
|
|
|
|
Singleton<DatabaseManager>.Instance.Initialize(
|
|
|
|
|
System.Configuration.ConfigurationManager.ConnectionStrings["PostgreSQL"].ConnectionString
|
|
|
|
|
, RtInstance.DATABASE_NAME
|
|
|
|
|
, PathManager.GetCfgDir() + "DBModel.sql");
|
|
|
|
|
|
|
|
|
|
Singleton<EventManager>.Instance.Initialize(PathManager.GetCfgDir() + "EventDefine.xml");
|
|
|
|
|
|
|
|
|
|
Singleton<OperationManager>.Instance.Initialize();
|
|
|
|
|
|
|
|
|
|
Singleton<DataManager>.Instance.Initialize();
|
|
|
|
|
|
|
|
|
|
RecipeFileManager.Instance.Initialize(new SicRecipeFileContext());
|
|
|
|
|
|
|
|
|
|
AccountExManager.Instance.Initialize(true);
|
|
|
|
|
|
|
|
|
|
Singleton<SystemConfigManager>.Instance.Initialize(PathManager.GetCfgDir() + "System.sccfg");
|
|
|
|
|
|
|
|
|
|
ConnectionManager.Instance.Initialize();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
string ioProviderPathFile = PathManager.GetCfgDir() + "IoProviderConfig.xml";
|
2023-03-28 13:24:11 +08:00
|
|
|
|
|
2023-03-03 15:42:13 +08:00
|
|
|
|
IoProviderManager.Instance.Initialize(ioProviderPathFile);
|
|
|
|
|
|
2023-04-04 11:08:53 +08:00
|
|
|
|
IoManager.Instance.Initialize(PathManager.GetCfgDir() + "tm\\interlock.xml");
|
2023-03-03 15:42:13 +08:00
|
|
|
|
|
|
|
|
|
WaferManager.Instance.Initialize();
|
|
|
|
|
|
|
|
|
|
Singleton<DeviceManager>.Instance.DisableAsyncInitialize = true;
|
|
|
|
|
|
2023-03-28 13:24:11 +08:00
|
|
|
|
|
2023-03-29 10:19:02 +08:00
|
|
|
|
IoManager.Instance.Initialize(PathManager.GetCfgDir() + "pm\\pm1\\interlockPM1.xml");
|
2023-04-14 16:38:39 +08:00
|
|
|
|
Singleton<DeviceManager>.Instance.Initialize(PathManager.GetCfgDir() + "pm\\pm1\\DeviceModelPM1.xml", "Sic",
|
|
|
|
|
ModuleName.PM1, "PM1", false);
|
2023-03-03 15:42:13 +08:00
|
|
|
|
|
2023-03-28 13:24:11 +08:00
|
|
|
|
|
2023-03-29 10:19:02 +08:00
|
|
|
|
IoManager.Instance.Initialize(PathManager.GetCfgDir() + "pm\\pm2\\interlockPM2.xml");
|
2023-04-14 16:38:39 +08:00
|
|
|
|
Singleton<DeviceManager>.Instance.Initialize(PathManager.GetCfgDir() + "pm\\pm2\\DeviceModelPM2.xml", "Sic",
|
|
|
|
|
ModuleName.PM2, "PM2", false);
|
2023-03-03 15:42:13 +08:00
|
|
|
|
|
2023-04-14 16:38:39 +08:00
|
|
|
|
Singleton<DeviceManager>.Instance.Initialize(PathManager.GetCfgDir() + "tm\\DeviceModelSystem.xml", "Sic",
|
|
|
|
|
ModuleName.System, "TM", true);
|
2023-03-03 15:42:13 +08:00
|
|
|
|
|
2023-04-14 16:38:39 +08:00
|
|
|
|
DataCollectionManager.Instance.Initialize(
|
|
|
|
|
new string[] { "System", "IO.PM1", "IO.PM2", "IO.TM", "PM1", "PM2" }, RtInstance.DATABASE_NAME);
|
2023-03-03 15:42:13 +08:00
|
|
|
|
|
|
|
|
|
RtSystemManager.Instance.AddCustomBackend("SC", new BackendSCConfigView());
|
|
|
|
|
|
|
|
|
|
Singleton<EquipmentManager>.Instance.Initialize();
|
|
|
|
|
|
2023-05-09 17:51:13 +08:00
|
|
|
|
//! !!!!注意 !!!!!!
|
|
|
|
|
// 注意构建和启动DeviceManager状态机的时机,不要早于EquipmentManager,因为EquipmentManger中
|
|
|
|
|
// 的InitModules()方法构建模组时,如果模组被配置为NotInstalled,则模组所属的Device会被禁用。
|
|
|
|
|
// 若过早的使能DeviceManager,被卸载的Module可能产生误报警。
|
|
|
|
|
Singleton<DeviceEntity>.Instance.Initialize();
|
|
|
|
|
|
2023-03-28 13:24:11 +08:00
|
|
|
|
// Singleton<RouteManager>.Instance.Initialize();
|
2023-03-03 15:42:13 +08:00
|
|
|
|
//Singleton<FAJobManager>.Instance.Initialize();
|
|
|
|
|
|
|
|
|
|
Singleton<EventManager>.Instance.SubscribeOperationAndData();
|
2023-04-23 14:18:42 +08:00
|
|
|
|
CoatingManager.Instance.Initialize();
|
2023-03-03 15:42:13 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void Terminate()
|
|
|
|
|
{
|
|
|
|
|
Singleton<DeviceEntity>.Instance.Terminate();
|
|
|
|
|
|
|
|
|
|
Singleton<DeviceManager>.Instance.Terminate();
|
|
|
|
|
|
|
|
|
|
IoProviderManager.Instance.Terminate();
|
|
|
|
|
|
|
|
|
|
Singleton<SystemConfigManager>.Instance.Terminate();
|
|
|
|
|
|
|
|
|
|
DataCollectionManager.Instance.Terminate();
|
|
|
|
|
|
|
|
|
|
Singleton<WcfServiceManager>.Instance.Terminate();
|
|
|
|
|
|
|
|
|
|
Singleton<EventManager>.Instance.Terminate();
|
|
|
|
|
|
|
|
|
|
Singleton<LogManager>.Instance.Terminate();
|
|
|
|
|
|
|
|
|
|
Singleton<DatabaseManager>.Instance.Terminate();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|