diff --git a/Modules/Mainframe/Config/PM/PM1/ProcessDeviceItemsPM1.xml b/Modules/Mainframe/Config/PM/PM1/ProcessDeviceItemsPM1.xml index 46bd386a..cb434248 100644 --- a/Modules/Mainframe/Config/PM/PM1/ProcessDeviceItemsPM1.xml +++ b/Modules/Mainframe/Config/PM/PM1/ProcessDeviceItemsPM1.xml @@ -8,7 +8,7 @@ - + @@ -27,10 +27,15 @@ - - - - + + + + + + + + + @@ -44,7 +49,7 @@ - + @@ -54,14 +59,14 @@ - + - + @@ -101,10 +106,10 @@ - - - + + + @@ -118,8 +123,8 @@ - - - + + + diff --git a/Modules/Mainframe/Config/PM/PM2/ProcessDeviceItemsPM2.xml b/Modules/Mainframe/Config/PM/PM2/ProcessDeviceItemsPM2.xml index c2ee495c..eecb5cf9 100644 --- a/Modules/Mainframe/Config/PM/PM2/ProcessDeviceItemsPM2.xml +++ b/Modules/Mainframe/Config/PM/PM2/ProcessDeviceItemsPM2.xml @@ -8,7 +8,7 @@ - + @@ -27,10 +27,15 @@ - - - - + + + + + + + + + @@ -44,7 +49,7 @@ - + @@ -54,14 +59,14 @@ - + - + @@ -100,7 +105,7 @@ - + @@ -114,8 +119,8 @@ - - - + + + diff --git a/Modules/Mainframe/PMs/PMModule.cs b/Modules/Mainframe/PMs/PMModule.cs index 070325d3..10750345 100644 --- a/Modules/Mainframe/PMs/PMModule.cs +++ b/Modules/Mainframe/PMs/PMModule.cs @@ -1326,7 +1326,7 @@ namespace SicModules.PMs WaferManager.Instance.UpdateWaferProcessStatus(ModuleHelper.Converter(Module), 0, WaferProcessStatus.Completed); _processRoutine.ExitProcess(); _procDataStatManager?.End(); - EV.PostInfoLog(Module, $"Exit Process: Recipe Name {_recipeRunningInfo.RecipeName},Recipe Step:{_recipeRunningInfo.StepNumber},Step Time:{_recipeRunningInfo.StepTime}"); + EV.PostInfoLog(Module, $"Exit Process: Recipe Name {_recipeRunningInfo.RecipeName},Recipe Step:{_recipeRunningInfo.StepNumber},Step Time:{string.Format("{0:F2}", _recipeRunningInfo.StepTime)}"); } var workenable = SC.GetValue("System.MultiProcessMode"); diff --git a/Modules/Mainframe/PMs/PMModuleDevice.cs b/Modules/Mainframe/PMs/PMModuleDevice.cs index a8a735d3..9ad321fc 100644 --- a/Modules/Mainframe/PMs/PMModuleDevice.cs +++ b/Modules/Mainframe/PMs/PMModuleDevice.cs @@ -2009,6 +2009,19 @@ namespace SicModules.PMs return 0; } + /// + /// 获取管道压力 + /// + /// + public double GetForelinePressure() + { + if (PT2 != null) + { + return PT2.FeedBack; + } + return 0; + } + /// /// 初始化Device的委托 /// diff --git a/Modules/Mainframe/PMs/RecipeExecutions/Process.cs b/Modules/Mainframe/PMs/RecipeExecutions/Process.cs index 5a1c4bf4..f99c3f55 100644 --- a/Modules/Mainframe/PMs/RecipeExecutions/Process.cs +++ b/Modules/Mainframe/PMs/RecipeExecutions/Process.cs @@ -135,6 +135,8 @@ namespace SicModules.PMs.RecipeExecutions private int _currentStepIndex = 99; private IoInterLock _pmInterLock; + private double _pressureDifferenceUpperLimit; + #region Parse private bool _isPSUHeaterJumpMode; @@ -162,9 +164,11 @@ namespace SicModules.PMs.RecipeExecutions public Process(ModuleName module, PMModule pm1) : base(module, pm1) { + + Module = module.ToString(); Name = "Process"; - + _dbCallback = new RecipeDBCallback(); _fdc = new Fdc(Module); _pmInterLock = DEVICE.GetDevice($"{Module}.PMInterLock"); @@ -186,6 +190,8 @@ namespace SicModules.PMs.RecipeExecutions Calculte(); + SC.RegisterValueChangedCallback($"PM.{Module}.PT1PT2PressureDifferenceUpperLimit", (obj) => { _pressureDifferenceUpperLimit = (double)obj; }); + _thread = new PeriodicJob(10 * 1000, Calculte, "Calculte Standard Deviation", false); } @@ -229,6 +235,7 @@ namespace SicModules.PMs.RecipeExecutions _isDryRun = SC.GetValue($"PM.{Module}.DryRun.IsDryRun"); _delayTimeDryRun = SC.GetValue($"PM.{Module}.DryRun.DryRunDelayTime"); _tempOffset = SC.GetValue($"PM.{Module}.Process.TempOffset"); + _pressureDifferenceUpperLimit = SC.GetValue($"PM.{Module}.PT1PT2PressureDifferenceUpperLimit"); ResetHeaterResCheckResult(); @@ -243,6 +250,7 @@ namespace SicModules.PMs.RecipeExecutions private readonly R_TRIG _trigHeaterResOutOfRange = new(); private readonly R_TRIG _trigHeaterResMonitorBegin = new(); private readonly R_TRIG _trigHeaterResMonitorEnd = new(); + private readonly R_TRIG _trigPressureDifference = new(); private void ResetHeaterResCheckResult() @@ -250,6 +258,7 @@ namespace SicModules.PMs.RecipeExecutions _trigHeaterResOutOfRange.RST = true; _trigHeaterResMonitorBegin.RST = true; _trigHeaterResMonitorEnd.RST = true; + _trigPressureDifference.RST = true; } private void MonitorHeaterResistance() @@ -309,6 +318,27 @@ namespace SicModules.PMs.RecipeExecutions } } + private void PressureDifferenceDetection() + { + double pt1 = PmDevice.GetChamberPressure(); + + double pt2 = PmDevice.GetForelinePressure(); + + double d = Math.Abs(pt1 - pt2); + if (d >= _pressureDifferenceUpperLimit) + _trigPressureDifference.CLK = true; + + if (_trigPressureDifference.Q) + { + string reason = $"PT1={pt1} PT2={pt2},Difference {d} over DifferenceMax={_pressureDifferenceUpperLimit} "; + var alarmLevel = SC.SafeGetStringValue($"PM.{Module}.PT1PT2PressureDifferenceMaxAlarmLevel", "Alarm"); + if (alarmLevel == "Alarm") + Stop(reason); + else + EV.PostWarningLog(Module, reason); + } + } + #endregion public override Result Monitor() @@ -346,6 +376,8 @@ namespace SicModules.PMs.RecipeExecutions MonitorHeaterResistance(); + PressureDifferenceDetection(); + lock (_recipeLocker) { try diff --git a/Modules/Mainframe/PMs/Routines/Base/PMBaseRoutine.cs b/Modules/Mainframe/PMs/Routines/Base/PMBaseRoutine.cs index dc32c52e..1636b3f9 100644 --- a/Modules/Mainframe/PMs/Routines/Base/PMBaseRoutine.cs +++ b/Modules/Mainframe/PMs/Routines/Base/PMBaseRoutine.cs @@ -2,9 +2,11 @@ using System.Collections.Generic; using Aitex.Core.Common.DeviceData; using Aitex.Core.RT.Device.Devices; +using Aitex.Core.RT.Event; using Aitex.Core.RT.Routine; using MECF.Framework.Common.Equipment; using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.PMs; +using static Aitex.Core.RT.Device.PmDevices.DicMode; namespace SicModules.PMs.Routines.Base { @@ -705,7 +707,8 @@ namespace SicModules.PMs.Routines.Base Tuple ret = Execute(id, () => { Notify($"Set PSU HeatMode"); - if (!_pm.TC1.SetHeaterMode(mode,0)) + var fixedMode = FixHeaterModeDiff(mode, "PSU"); + if (!_pm.TC1.SetHeaterMode((int)fixedMode,0)) { Stop($"Set PSU HeatMode error"); return false; @@ -777,7 +780,8 @@ namespace SicModules.PMs.Routines.Base Tuple ret = Execute(id, () => { Notify($"Set SCR HeatMode"); - if (!_pm.TC2.SetHeaterMode2(mode,0)) + var fixedMode = FixHeaterModeDiff(mode, "SCR"); + if (!_pm.TC2.SetHeaterMode2((int)fixedMode, 0)) { Stop($"Set SCR HeatMode error"); return false; @@ -2170,5 +2174,32 @@ namespace SicModules.PMs.Routines.Base throw (new RoutineBreakException()); } } + + /// + /// 修正SystemConfig中配置的PSU、SCR Heat Mode 和 枚举不匹配的问题。 + /// + /// + /// + /// + private HeaterControlMode FixHeaterModeDiff(int mode, string scItemName) + { + var fixedMode = HeaterControlMode.Power; + switch (mode) + { + // System config: 0:Power + case 0: + fixedMode = HeaterControlMode.Power; + break; + // System config: 1:Pyro + case 1: + fixedMode = HeaterControlMode.Pyro; + break; + default: + EV.PostWarningLog(Module, $"{scItemName}, Unknown Heat Mode {mode},use default mode [Power]."); + break; + } + + return fixedMode; + } } } diff --git a/Modules/Mainframe/PMs/Routines/PMToProcessIdleRoutine.cs b/Modules/Mainframe/PMs/Routines/PMToProcessIdleRoutine.cs index 0d5b69db..6c7c5c2f 100644 --- a/Modules/Mainframe/PMs/Routines/PMToProcessIdleRoutine.cs +++ b/Modules/Mainframe/PMs/Routines/PMToProcessIdleRoutine.cs @@ -7,6 +7,7 @@ using Aitex.Core.RT.Routine; using Aitex.Core.RT.SCCore; using MECF.Framework.Common.Equipment; using SicModules.PMs.Routines.Base; +using static Aitex.Core.RT.Device.PmDevices.DicMode; namespace SicModules.PMs.Routines { @@ -248,7 +249,7 @@ namespace SicModules.PMs.Routines _throttleFinalPressure = SC.GetValue($"PM.{Module}.ProcessIdle.FinalPressure"); _psuHeatEnable = SC.GetValue($"PM.{Module}.ProcessIdle.PSUHeaterEnable"); - _psuHeatMode = (int)SC.GetValue($"PM.{Module}.ProcessIdle.PSUHeaterMode"); + _psuHeatMode = SC.GetValue($"PM.{Module}.ProcessIdle.PSUHeaterMode"); _psuL1Ratio = (float)SC.GetValue($"PM.{Module}.ProcessIdle.PSUInnerRatio"); _psuL2Ratio = (float)SC.GetValue($"PM.{Module}.ProcessIdle.PSUMiddleRatio"); _psuL3Ratio = (float)SC.GetValue($"PM.{Module}.ProcessIdle.PSUOuterRatio"); diff --git a/SicRT/Config/DBModel.sql b/SicRT/Config/DBModel.sql index 15eae225..48274cde 100644 --- a/SicRT/Config/DBModel.sql +++ b/SicRT/Config/DBModel.sql @@ -872,15 +872,15 @@ if not exists(select * from information_schema.tables if not exists(select * from information_schema.tables where table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA - and table_name = 'maintainance_event_data') then + and table_name = 'maintenance_event_data') then - CREATE TABLE maintainance_event_data + CREATE TABLE maintenance_event_data ( "planname" text , "planmodule" text , "itemparentname" text , "itemname" text , - "index" integer , + "uid" text , "createtime" timestamp , "role" text , "detial" text @@ -888,9 +888,9 @@ if not exists(select * from information_schema.tables WITH ( OIDS=FALSE ); - ALTER TABLE maintainance_event_data + ALTER TABLE maintenance_event_data OWNER TO postgres; - GRANT SELECT ON TABLE maintainance_event_data TO postgres; + GRANT SELECT ON TABLE maintenance_event_data TO postgres; end if; ------------------------------------------------------------------------------------------------ if not exists(select * from information_schema.tables diff --git a/SicRT/Config/Menu.xml b/SicRT/Config/Menu.xml index 29d992d1..a2f6fe53 100644 --- a/SicRT/Config/Menu.xml +++ b/SicRT/Config/Menu.xml @@ -70,7 +70,7 @@ - + diff --git a/SicRT/Config/System.sccfg b/SicRT/Config/System.sccfg index 00f25ae1..9b59b3a1 100644 --- a/SicRT/Config/System.sccfg +++ b/SicRT/Config/System.sccfg @@ -29,6 +29,7 @@ + @@ -507,6 +508,8 @@ + + @@ -606,12 +609,12 @@ - + - + @@ -1054,6 +1057,8 @@ + + @@ -1154,12 +1159,12 @@ - + - + diff --git a/SicRT/Equipments/ManualTransfer.cs b/SicRT/Equipments/ManualTransfer.cs index 15b97cb0..f7ad1e83 100644 --- a/SicRT/Equipments/ManualTransfer.cs +++ b/SicRT/Equipments/ManualTransfer.cs @@ -272,6 +272,9 @@ namespace SicRT.Equipments return Result.RUN; } + if (!_tmRobot.IsAvailable) + return Result.RUN; + if (!_source.IsReadyForPick(ModuleName.TMRobot, _moveTask.SourceSlot)) { if (!_source.PrepareTransfer(ModuleName.TMRobot, EnumTransferType.Pick, _moveTask.SourceSlot)) @@ -292,9 +295,6 @@ namespace SicRT.Equipments _source.WaitTransfer(ModuleName.TMRobot); } - - if (!_tmRobot.IsAvailable) - return Result.RUN; } else { @@ -312,6 +312,9 @@ namespace SicRT.Equipments if (!_destination.IsAvailable) return Result.RUN; + if (!_tmRobot.IsAvailable) + return Result.RUN; + if (_destination.NoTray(_moveTask.DestinationSlot)) { if (!_destination.IsReadyForPlace(ModuleName.TMRobot, _moveTask.DestinationSlot)) @@ -331,9 +334,6 @@ namespace SicRT.Equipments _destination.WaitTransfer(ModuleName.TMRobot); } - - if (!_tmRobot.IsAvailable) - return Result.RUN; } else { @@ -447,6 +447,11 @@ namespace SicRT.Equipments return Result.RUN; } + if (!_waferRobot.IsAvailable) + { + return Result.RUN; + } + if (!_source.IsReadyForPick(ModuleName.WaferRobot, _moveTask.SourceSlot)) { if (!_source.PrepareTransfer(ModuleName.WaferRobot, EnumTransferType.Pick, _moveTask.SourceSlot)) @@ -458,10 +463,8 @@ namespace SicRT.Equipments return Result.RUN; } - if(!_waferRobot.IsAvailable) - { + if (!_waferRobot.IsAvailable) return Result.RUN; - } if (!_waferRobot.HasWafer((int)_moveTask.RobotHand)) { @@ -475,9 +478,6 @@ namespace SicRT.Equipments else _source.WaitTransfer(ModuleName.WaferRobot); } - - if (!_waferRobot.IsAvailable) - return Result.RUN; } else { @@ -495,6 +495,11 @@ namespace SicRT.Equipments if (!_destination.IsAvailable) return Result.RUN; + if (!_waferRobot.IsAvailable) + { + return Result.RUN; + } + if (_destination.NoWafer(_moveTask.DestinationSlot)) { if (!_destination.IsReadyForPlace(ModuleName.WaferRobot, _moveTask.DestinationSlot)) @@ -508,9 +513,7 @@ namespace SicRT.Equipments return Result.RUN; if (!_waferRobot.IsAvailable) - { return Result.RUN; - } if (_waferRobot.HasWafer((int)_moveTask.RobotHand)) { @@ -522,9 +525,6 @@ namespace SicRT.Equipments else _destination.WaitTransfer(ModuleName.WaferRobot); } - - if (!_waferRobot.IsAvailable) - return Result.RUN; } else { @@ -637,6 +637,11 @@ namespace SicRT.Equipments return Result.RUN; } + if (!_trayRobot.IsAvailable) + { + return Result.RUN; + } + if (!_source.IsReadyForPick(ModuleName.TrayRobot, _moveTask.SourceSlot)) { if (!_source.PrepareTransfer(ModuleName.TrayRobot, EnumTransferType.Pick, _moveTask.SourceSlot)) @@ -662,9 +667,6 @@ namespace SicRT.Equipments _source.WaitTransfer(ModuleName.TrayRobot); } - - if (!_trayRobot.IsAvailable) - return Result.RUN; } else { @@ -682,6 +684,11 @@ namespace SicRT.Equipments if (!_destination.IsAvailable) return Result.RUN; + if (!_trayRobot.IsAvailable) + { + return Result.RUN; + } + if (_destination.NoTray(_moveTask.DestinationSlot)) { if (!_destination.IsReadyForPlace(ModuleName.TrayRobot, _moveTask.DestinationSlot)) @@ -706,9 +713,6 @@ namespace SicRT.Equipments _destination.WaitTransfer(ModuleName.TrayRobot); } - - if (!_trayRobot.IsAvailable) - return Result.RUN; } else { diff --git a/SicRT/Equipments/Schedulers/SchedulerCassette.cs b/SicRT/Equipments/Schedulers/SchedulerCassette.cs index ed452acc..ca1fd14d 100644 --- a/SicRT/Equipments/Schedulers/SchedulerCassette.cs +++ b/SicRT/Equipments/Schedulers/SchedulerCassette.cs @@ -1,5 +1,5 @@ using System; -using System.Diagnostics; +using Aitex.Core.RT.SCCore; using SicModules.Cassettes; using SicModules.PMs; using SicRT.Equipments.Systems; @@ -109,7 +109,8 @@ namespace SicRT.Modules.Schedulers && WaferManager.Instance.CheckHasWafer(_module, _lastTransferSlot)) { //EV.PostMessage(Module.ToString(), EventEnum.PJ_DONE, _module, (_lastTransferSlot + 1).ToString()); - OP.DoOperation("System.AlertJobDone", _module, _lastTransferSlot + 1); + if(SC.SafeGetStringValue("System.ProcessDoneAlertMode", "PerJob") == "PerWafer") + OP.DoOperation("System.AlertJobDone", _module, _lastTransferSlot + 1); } } diff --git a/SicRT/Equipments/Systems/EquipmentManager.cs b/SicRT/Equipments/Systems/EquipmentManager.cs index b1672a1a..ebe7e3b9 100644 --- a/SicRT/Equipments/Systems/EquipmentManager.cs +++ b/SicRT/Equipments/Systems/EquipmentManager.cs @@ -24,6 +24,8 @@ using SicModules.TMs; using SicModules.UnLoads; using System.Diagnostics; using MECF.Framework.RT.EquipmentLibrary.Devices; +using System.Runtime.InteropServices; +using System.Reflection; namespace SicRT.Equipments.Systems { @@ -845,6 +847,9 @@ namespace SicRT.Equipments.Systems if (_auto.CheckAllJobDone()) { + if (SC.SafeGetStringValue("System.ProcessDoneAlertMode", "PerJob") == "PerJob") + OP.DoOperation("System.AlertJobDone", ModuleName.System, 0); + if (!CheckToPostMessage((int)MSG.JobDone)) return false; } diff --git a/SicRT/Maintain/Maintain.xml b/SicRT/Maintain/Maintain.xml index 4cdcd1b0..a12b9deb 100644 --- a/SicRT/Maintain/Maintain.xml +++ b/SicRT/Maintain/Maintain.xml @@ -1,1565 +1,1325 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SicRT/Properties/AssemblyInfo.cs b/SicRT/Properties/AssemblyInfo.cs index 4f4f8194..a6568aa4 100644 --- a/SicRT/Properties/AssemblyInfo.cs +++ b/SicRT/Properties/AssemblyInfo.cs @@ -51,5 +51,5 @@ using System.Windows; // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 // 方法是按如下所示使用“*”: : -[assembly: AssemblyVersion("1.3.0.40308")] +[assembly: AssemblyVersion("1.3.1.40315")] [assembly: AssemblyInformationalVersion("自动通用版(有EFEM)")] \ No newline at end of file diff --git a/SicRT/ReleaseNotes.md b/SicRT/ReleaseNotes.md index 21d0484b..4e019843 100644 --- a/SicRT/ReleaseNotes.md +++ b/SicRT/ReleaseNotes.md @@ -3,11 +3,33 @@ Auto-GE 自动通用版(适用有EFEM设备) ---- + +## 下次发行备忘 +- Bug修复 + - 无 +- 新特性 + - 工艺结束蜂鸣器提示时机可配置为Job结束,或Wafer结束 + +## Version 1.3.1.40315 + +## Version 1.3.1.40314 +- Bug修复 + - 修正PM进入ProcessIdle、PostProcess和PostTransfer状态时,PSU和SCR加热模式可能设置错误的问题 +- 新特性 + - 无 + +## Version 1.3.0.40314 +- Bug修复 + - 修正PM进入ProcessIdle时,PSU和SCR的加热模式可能设置错误的问题 +- 新特性 + - PM腔体和管道压差,在工艺过程中检测,报警等级可配置 + + ## Version 1.3.0.40308 - Bug修复 - 侧壁加热切回到Pyro前,检测上一步是不是Pyro,不是Pyro,对L3进行温度赋值 - 新特性 - - + - 无 ## Version 1.3.0.40306 - Bug修复 diff --git a/SicUI/Bootstrapper.cs b/SicUI/Bootstrapper.cs index c91069c7..18a5eae1 100644 --- a/SicUI/Bootstrapper.cs +++ b/SicUI/Bootstrapper.cs @@ -240,8 +240,6 @@ namespace SicUI.Client return; } - MaintainProvider2.Instance.Initialize(); - BaseApp.Instance.Initialize(); _splashScreen?.SetMessage1("Preparing Environment ..."); diff --git a/SicUI/Controls/Mainframe/AtmRobotMultiLP.xaml b/SicUI/Controls/Mainframe/AtmRobotMultiLP.xaml index 5c6332e1..be94b3e2 100644 --- a/SicUI/Controls/Mainframe/AtmRobotMultiLP.xaml +++ b/SicUI/Controls/Mainframe/AtmRobotMultiLP.xaml @@ -5,11 +5,17 @@ xmlns:Common="clr-namespace:SicUI.Controls.Common" xmlns:controls="clr-namespace:SicUI.Controls" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:diag="clr-namespace:System.Diagnostics;assembly=WindowsBase" xmlns:local="clr-namespace:SicUI.Controls.M2C4Parts" + xmlns:extendedControls="clr-namespace:MECF.Framework.UI.Core.ExtendedControls;assembly=MECF.Framework.UI.Core" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" d:DesignHeight="38" d:DesignWidth="416" - mc:Ignorable="d"> + mc:Ignorable="d" + x:Name="mainw"> + + + - - + + + diff --git a/SicUI/Controls/Mainframe/AtmRobotMultiLP.xaml.cs b/SicUI/Controls/Mainframe/AtmRobotMultiLP.xaml.cs index dcdbd2ab..83a35c43 100644 --- a/SicUI/Controls/Mainframe/AtmRobotMultiLP.xaml.cs +++ b/SicUI/Controls/Mainframe/AtmRobotMultiLP.xaml.cs @@ -49,19 +49,25 @@ namespace SicUI.Controls.M2C4Parts public static readonly DependencyProperty ShowDockProperty = DependencyProperty.Register("ShowDock", typeof(bool), typeof(AtmRobotMultiLP), new PropertyMetadata(false)); - // Using a DependencyProperty as the backing store for RotateAngel. This enables animation, styling, binding, etc... - public static readonly DependencyProperty RotateAngleProperty = - DependencyProperty.Register("RotateAngel", typeof(int), typeof(AtmRobotMultiLP), new PropertyMetadata(0)); - - public int TranslateX + public double RotateAngle { - get { return (int)GetValue(TranslateXProperty); } + get { return (double)GetValue(RotateAngleProperty); } + set { SetValue(RotateAngleProperty, value); } + } + + // Using a DependencyProperty as the backing store for RotateAngle. This enables animation, styling, binding, etc... + public static readonly DependencyProperty RotateAngleProperty = + DependencyProperty.Register("RotateAngle", typeof(double), typeof(AtmRobotMultiLP), new PropertyMetadata(0.0)); + + public double TranslateX + { + get { return (double)GetValue(TranslateXProperty); } set { SetValue(TranslateXProperty, value); } } // Using a DependencyProperty as the backing store for TranslateX. This enables animation, styling, binding, etc... public static readonly DependencyProperty TranslateXProperty = - DependencyProperty.Register("TranslateX", typeof(int), typeof(AtmRobotMultiLP), new PropertyMetadata(0)); + DependencyProperty.Register("TranslateX", typeof(double), typeof(AtmRobotMultiLP), new PropertyMetadata(0.0)); public MECF.Framework.UI.Client.ClientBase.WaferInfo Wafer1 { @@ -336,7 +342,7 @@ namespace SicUI.Controls.M2C4Parts m.Items.Add(new MenuItem() { Header = "Move", Command = self.MoveCommand, CommandParameter = new RobotMoveInfo() { BladeTarget = position.Key, Action = RobotAction.Moving, ArmTarget = arm } }); menus.Add(m); } - self.Menu = menus; + //self.Menu = menus; self.MoveTo(new RobotMoveInfo() { BladeTarget = positions.First().Key, Action = RobotAction.None }); } @@ -527,5 +533,4 @@ namespace SicUI.Controls.M2C4Parts } } - } diff --git a/SicUI/Controls/Mainframe/EFEMControl.xaml b/SicUI/Controls/Mainframe/EFEMControl.xaml index 85839261..950ea426 100644 --- a/SicUI/Controls/Mainframe/EFEMControl.xaml +++ b/SicUI/Controls/Mainframe/EFEMControl.xaml @@ -39,7 +39,7 @@ Canvas.Top="142" Height="150" Source="Images/tm.png" /> - + - + + Wafer1="{Binding WaferRobotWafer}" + EnableWaferClick="{Binding EnableWaferClick}"/> - + - + - + + Wafer1="{Binding WaferRobotWafer}" + EnableWaferClick="{Binding EnableWaferClick}"/> - + - + - + + + + - - + + diff --git a/SicUI/Controls/Mainframe/RobotEfemTray.xaml.cs b/SicUI/Controls/Mainframe/RobotEfemTray.xaml.cs index 490782ab..ac5dff86 100644 --- a/SicUI/Controls/Mainframe/RobotEfemTray.xaml.cs +++ b/SicUI/Controls/Mainframe/RobotEfemTray.xaml.cs @@ -49,19 +49,25 @@ namespace SicUI.Controls.M2C4Parts public static readonly DependencyProperty ShowDockProperty = DependencyProperty.Register("ShowDock", typeof(bool), typeof(RobotEfemTray), new PropertyMetadata(false)); - // Using a DependencyProperty as the backing store for RotateAngel. This enables animation, styling, binding, etc... - public static readonly DependencyProperty RotateAngleProperty = - DependencyProperty.Register("RotateAngel", typeof(int), typeof(RobotEfemTray), new PropertyMetadata(0)); - - public int TranslateX + public double RotateAngle { - get { return (int)GetValue(TranslateXProperty); } + get { return (double)GetValue(RotateAngleProperty); } + set { SetValue(RotateAngleProperty, value); } + } + + // Using a DependencyProperty as the backing store for RotateAngle. This enables animation, styling, binding, etc... + public static readonly DependencyProperty RotateAngleProperty = + DependencyProperty.Register("RotateAngle", typeof(double), typeof(RobotEfemTray), new PropertyMetadata(0.0)); + + public double TranslateX + { + get { return (double)GetValue(TranslateXProperty); } set { SetValue(TranslateXProperty, value); } } // Using a DependencyProperty as the backing store for TranslateX. This enables animation, styling, binding, etc... public static readonly DependencyProperty TranslateXProperty = - DependencyProperty.Register("TranslateX", typeof(int), typeof(RobotEfemTray), new PropertyMetadata(0)); + DependencyProperty.Register("TranslateX", typeof(double), typeof(RobotEfemTray), new PropertyMetadata(0.0)); public MECF.Framework.UI.Client.ClientBase.WaferInfo Wafer1 { @@ -335,7 +341,7 @@ namespace SicUI.Controls.M2C4Parts m.Items.Add(new MenuItem() { Header = "Move", Command = self.MoveCommand, CommandParameter = new RobotMoveInfo() { BladeTarget = position.Key, Action = RobotAction.Moving, ArmTarget = arm } }); menus.Add(m); } - self.Menu = menus; + //self.Menu = menus; self.MoveTo(new RobotMoveInfo() { BladeTarget = positions.First().Key, Action = RobotAction.None }); } diff --git a/SicUI/Controls/Mainframe/RobotEfemWafer.xaml b/SicUI/Controls/Mainframe/RobotEfemWafer.xaml index 4d6f349c..54710cc4 100644 --- a/SicUI/Controls/Mainframe/RobotEfemWafer.xaml +++ b/SicUI/Controls/Mainframe/RobotEfemWafer.xaml @@ -6,10 +6,14 @@ xmlns:controls="clr-namespace:SicUI.Controls" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:SicUI.Controls.M2C4Parts" + xmlns:extendedControls="clr-namespace:MECF.Framework.UI.Core.ExtendedControls;assembly=MECF.Framework.UI.Core" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" d:DesignHeight="38" d:DesignWidth="416" mc:Ignorable="d"> + + + - - + + diff --git a/SicUI/Controls/Mainframe/RobotEfemWafer.xaml.cs b/SicUI/Controls/Mainframe/RobotEfemWafer.xaml.cs index 9d89f059..e7f68dfd 100644 --- a/SicUI/Controls/Mainframe/RobotEfemWafer.xaml.cs +++ b/SicUI/Controls/Mainframe/RobotEfemWafer.xaml.cs @@ -49,19 +49,35 @@ namespace SicUI.Controls.M2C4Parts public static readonly DependencyProperty ShowDockProperty = DependencyProperty.Register("ShowDock", typeof(bool), typeof(RobotEfemWafer), new PropertyMetadata(false)); - // Using a DependencyProperty as the backing store for RotateAngel. This enables animation, styling, binding, etc... - public static readonly DependencyProperty RotateAngleProperty = - DependencyProperty.Register("RotateAngel", typeof(int), typeof(RobotEfemWafer), new PropertyMetadata(0)); - - public int TranslateX + public bool EnableWaferClick { - get { return (int)GetValue(TranslateXProperty); } + get { return (bool)GetValue(EnableWaferClickProperty); } + set { SetValue(EnableWaferClickProperty, value); } + } + + // Using a DependencyProperty as the backing store for ShowDock. This enables animation, styling, binding, etc... + public static readonly DependencyProperty EnableWaferClickProperty = + DependencyProperty.Register("EnableWaferClick", typeof(bool), typeof(RobotEfemWafer), new PropertyMetadata(false)); + + public double RotateAngle + { + get { return (double)GetValue(RotateAngleProperty); } + set { SetValue(RotateAngleProperty, value); } + } + + // Using a DependencyProperty as the backing store for RotateAngle. This enables animation, styling, binding, etc... + public static readonly DependencyProperty RotateAngleProperty = + DependencyProperty.Register("RotateAngle", typeof(double), typeof(RobotEfemWafer), new PropertyMetadata(0.0)); + + public double TranslateX + { + get { return (double)GetValue(TranslateXProperty); } set { SetValue(TranslateXProperty, value); } } // Using a DependencyProperty as the backing store for TranslateX. This enables animation, styling, binding, etc... public static readonly DependencyProperty TranslateXProperty = - DependencyProperty.Register("TranslateX", typeof(int), typeof(RobotEfemWafer), new PropertyMetadata(0)); + DependencyProperty.Register("TranslateX", typeof(double), typeof(RobotEfemWafer), new PropertyMetadata(0.0)); public MECF.Framework.UI.Client.ClientBase.WaferInfo Wafer1 { @@ -429,7 +445,7 @@ namespace SicUI.Controls.M2C4Parts m.Items.Add(new MenuItem() { Header = "Move", Command = self.MoveCommand, CommandParameter = new RobotMoveInfo() { BladeTarget = position.Key, Action = RobotAction.Moving, ArmTarget = arm } }); menus.Add(m); } - self.Menu = menus; + //self.Menu = menus; self.MoveTo(new RobotMoveInfo() { BladeTarget = positions.First().Key, Action = RobotAction.None }); } diff --git a/SicUI/MainViewModel.cs b/SicUI/MainViewModel.cs index f8ca4cc4..7770eecc 100644 --- a/SicUI/MainViewModel.cs +++ b/SicUI/MainViewModel.cs @@ -88,7 +88,7 @@ namespace SicUI.Client IsPM1Installed = (bool)QueryDataClient.Instance.Service.GetConfig("System.SetUp.IsPM1Installed"); IsPM2Installed = (bool)QueryDataClient.Instance.Service.GetConfig("System.SetUp.IsPM2Installed"); IsBufferInstalled = (bool)QueryDataClient.Instance.Service.GetConfig("System.SetUp.IsBufferInstalled"); - IsLLInstalled = (bool)QueryDataClient.Instance.Service.GetConfig("System.SetUp.IsLoadLockInstalled"); + IsLoadLockInstalled = (bool)QueryDataClient.Instance.Service.GetConfig("System.SetUp.IsLoadLockInstalled"); _prgShowLoginRequestConfirmDialog = new Progress(ShowLoginRequestConfirmDialog); @@ -175,7 +175,7 @@ namespace SicUI.Client public bool IsBufferInstalled { get; set; } - public bool IsLLInstalled { get; set; } + public bool IsLoadLockInstalled { get; set; } public bool IsPermission { get; set; } @@ -847,7 +847,7 @@ namespace SicUI.Client this.StartTimer(); ConfigChangeCheck(); - MaintainanceCheck(); + MaintenanceCheck(); if (Debugger.IsAttached) { @@ -855,10 +855,9 @@ namespace SicUI.Client } } - private void MaintainanceCheck() + private void MaintenanceCheck() { - string info = (string)QueryDataClient.Instance.Service.GetData("MaintainManager.MaintainanceCheck"); - + string info = (string)QueryDataClient.Instance.Service.GetData("MaintainManager.MaintenanceCheck"); if (info != "") { DialogBox.ShowInfo("There are UnMaintainItems in Plan\r\n" + info diff --git a/SicUI/Models/Maintenances/TM/EFEMView.xaml b/SicUI/Models/Maintenances/TM/EFEMView.xaml index 185e4daf..375b0d4a 100644 --- a/SicUI/Models/Maintenances/TM/EFEMView.xaml +++ b/SicUI/Models/Maintenances/TM/EFEMView.xaml @@ -898,7 +898,7 @@ Margin="30,-30,0,0" HorizontalAlignment="Left" Orientation="Horizontal"> - + diff --git a/SicUI/Models/Maintenances/TM/TMView.xaml b/SicUI/Models/Maintenances/TM/TMView.xaml index 7bd750c7..f3bee1a9 100644 --- a/SicUI/Models/Maintenances/TM/TMView.xaml +++ b/SicUI/Models/Maintenances/TM/TMView.xaml @@ -863,7 +863,7 @@ - + @@ -1323,7 +1323,7 @@ - + @@ -2602,7 +2602,7 @@ FontSize="18" RenderTransformOrigin="4.531,3.688" Text="Load" - Visibility="{Binding IsLLInstalled, Converter={StaticResource BoolVisibilityConverter}}" /> + Visibility="{Binding IsLoadLockInstalled, Converter={StaticResource BoolVisibilityConverter}}" /> + Header="{lex:Loc {Binding CassALWaferAssociation.ModuleData.ModuleID}}"> + Header="{lex:Loc {Binding CassARWaferAssociation.ModuleData.ModuleID}}"> @@ -620,11 +614,12 @@ BorderBrush="{DynamicResource Table_BD}" BorderThickness="0,1,1,1"> + UnitData="{Binding CassBL}"/> + Visibility="{Binding IsLoadLockInstalled, Converter={StaticResource BoolVisibilityConverter}}"> @@ -1365,8 +1359,7 @@ Canvas.Top="321" FontFamily="Arial" FontSize="18" - Text="Buffer" - Visibility="{Binding IsPreHeatInstalled, Converter={StaticResource BoolVisibilityConverter}}" /> + Text="Buffer"/>