Merge branch 'develop' into 多片机/界面管道气路修改

This commit is contained in:
Han Qiang Qiang 2024-03-22 10:22:30 +08:00
commit e36b1c4811
43 changed files with 1626 additions and 1707 deletions

View File

@ -27,10 +27,15 @@
<ProcessDeviceItem Display="SCR3 Resistance" Unit="R" Property="SCR3.ResistanceFeedBack" />
<ProcessDeviceItem Display="SCR3 Voltage" Unit="V" Property="SCR3.VoltageFeedBack" />
<ProcessDeviceItem Display="TV Arms" Unit="A" Property="TV.PositionFeedBack" />
<ProcessDeviceItem Display="TV Power" Unit="KW" Property="TV.PositionSetPoint" />
<ProcessDeviceItem Display="TV Resistance" Unit="R" Property="TV.PressureFeedBack" />
<ProcessDeviceItem Display="TV Voltage" Unit="V" Property="TV.TVValueEnable" />
<ProcessDeviceItem Display="TV FB" Unit="%" Property="TV.PositionFeedback" />
<ProcessDeviceItem Display="TV Pre FB" Unit="mbar" Property="TV.PressureFeedback" />
<ProcessDeviceItem Display="PUS1" Unit="%" Property="TC1.L1RatioSetPoint" />
<ProcessDeviceItem Display="PUS2" Unit="%" Property="TC1.L2RatioSetPoint" />
<ProcessDeviceItem Display="PUS3" Unit="%" Property="TC1.L3RatioSetPoint" />
<ProcessDeviceItem Display="SCR1" Unit="%" Property="TC2.L1RatioSetPoint" />
<ProcessDeviceItem Display="SCR2" Unit="%" Property="TC2.L2RatioSetPoint" />
<ProcessDeviceItem Display="SCR3" Unit="%" Property="TC2.L3RatioSetPoint" />
<ProcessDeviceItem Display="PSU1 Output Arms" Unit="A" Property="PSU1.OutputArmsFeedBack" />
<ProcessDeviceItem Display="PSU1 Output Power" Unit="KW" Property="PSU1.OutputPowerFeedBack" />

View File

@ -27,10 +27,15 @@
<ProcessDeviceItem Display="SCR3 Resistance" Unit="R" Property="SCR3.ResistanceFeedBack" />
<ProcessDeviceItem Display="SCR3 Voltage" Unit="V" Property="SCR3.VoltageFeedBack" />
<ProcessDeviceItem Display="TV Arms" Unit="A" Property="TV.PositionFeedBack" />
<ProcessDeviceItem Display="TV Power" Unit="KW" Property="TV.PositionSetPoint" />
<ProcessDeviceItem Display="TV Resistance" Unit="R" Property="TV.PressureFeedBack" />
<ProcessDeviceItem Display="TV Voltage" Unit="V" Property="TV.TVValueEnable" />
<ProcessDeviceItem Display="TV FB" Unit="%" Property="TV.PositionFeedback" />
<ProcessDeviceItem Display="TV Pre FB" Unit="mbar" Property="TV.PressureFeedback" />
<ProcessDeviceItem Display="PUS1" Unit="%" Property="TC1.L1RatioSetPoint" />
<ProcessDeviceItem Display="PUS2" Unit="%" Property="TC1.L2RatioSetPoint" />
<ProcessDeviceItem Display="PUS3" Unit="%" Property="TC1.L3RatioSetPoint" />
<ProcessDeviceItem Display="SCR1" Unit="%" Property="TC2.L1RatioSetPoint" />
<ProcessDeviceItem Display="SCR2" Unit="%" Property="TC2.L2RatioSetPoint" />
<ProcessDeviceItem Display="SCR3" Unit="%" Property="TC2.L3RatioSetPoint" />
<ProcessDeviceItem Display="PSU1 Output Arms" Unit="A" Property="PSU1.OutputArmsFeedBack" />
<ProcessDeviceItem Display="PSU1 Output Power" Unit="KW" Property="PSU1.OutputPowerFeedBack" />

View File

@ -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<bool>("System.MultiProcessMode");

View File

@ -2009,6 +2009,19 @@ namespace SicModules.PMs
return 0;
}
/// <summary>
/// 获取管道压力
/// </summary>
/// <returns></returns>
public double GetForelinePressure()
{
if (PT2 != null)
{
return PT2.FeedBack;
}
return 0;
}
/// <summary>
/// 初始化Device的委托
/// </summary>

View File

@ -135,6 +135,8 @@ namespace SicModules.PMs.RecipeExecutions
private int _currentStepIndex = 99;
private IoInterLock _pmInterLock;
private double _pressureDifferenceUpperLimit;
#region Parse
private bool _isPSUHeaterJumpMode;
@ -162,6 +164,8 @@ namespace SicModules.PMs.RecipeExecutions
public Process(ModuleName module, PMModule pm1) : base(module, pm1)
{
Module = module.ToString();
Name = "Process";
@ -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<bool>($"PM.{Module}.DryRun.IsDryRun");
_delayTimeDryRun = SC.GetValue<int>($"PM.{Module}.DryRun.DryRunDelayTime");
_tempOffset = SC.GetValue<double>($"PM.{Module}.Process.TempOffset");
_pressureDifferenceUpperLimit = SC.GetValue<double>($"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

View File

@ -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<bool, Result> 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<bool, Result> 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());
}
}
/// <summary>
/// 修正SystemConfig中配置的PSU、SCR Heat Mode 和 <see cref="HeaterControlMode"/> 枚举不匹配的问题。
/// </summary>
/// <param name="mode"></param>
/// <param name="scItemName"></param>
/// <returns></returns>
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;
}
}
}

View File

@ -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<double>($"PM.{Module}.ProcessIdle.FinalPressure");
_psuHeatEnable = SC.GetValue<bool>($"PM.{Module}.ProcessIdle.PSUHeaterEnable");
_psuHeatMode = (int)SC.GetValue<int>($"PM.{Module}.ProcessIdle.PSUHeaterMode");
_psuHeatMode = SC.GetValue<int>($"PM.{Module}.ProcessIdle.PSUHeaterMode");
_psuL1Ratio = (float)SC.GetValue<double>($"PM.{Module}.ProcessIdle.PSUInnerRatio");
_psuL2Ratio = (float)SC.GetValue<double>($"PM.{Module}.ProcessIdle.PSUMiddleRatio");
_psuL3Ratio = (float)SC.GetValue<double>($"PM.{Module}.ProcessIdle.PSUOuterRatio");

View File

@ -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

View File

@ -70,7 +70,7 @@
<menuItem id="MfcTestPM2" resKey="GasBoxTest" System="PM2" viewmodel="SicUI.Models.PMs.PMMfcTestViewModel,SicUI" />
</menuItem>
<menuItem id="Maintainance" resKey="Maintenance">
<menuItem id="Maintenance" resKey="Maintenance">
<menuItem id="Schedule" resKey="Schedule" viewmodel="MECF.Framework.UI.Client.CenterViews.Maintain.ViewModels.MaintainViewModel,MECF.Framework.UI.Client" />
<menuItem id="Monthly" resKey="Monthly" viewmodel="MECF.Framework.UI.Client.CenterViews.Maintain.ViewModels.MaintainViewModel,MECF.Framework.UI.Client" />
<menuItem id="Quarter" resKey="Quarter" viewmodel="MECF.Framework.UI.Client.CenterViews.Maintain.ViewModels.MaintainViewModel,MECF.Framework.UI.Client" />

View File

@ -29,6 +29,7 @@
<config default="false" name="AllowTraceAOHopping" description="是否允许追踪AO跳变" max="" min="" paramter="" tag="" unit="" type="Bool" visible="true" />
<config default="true" name="AllowTraceDOHopping" description="是否允许追踪DO跳变" max="" min="" paramter="" tag="" unit="" type="Bool" visible="true" />
<config default="true" name="IgnoreMaintainTimeOutWarning" description="维护界面是否忽略Warning提示" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="PerJob" name="ProcessDoneAlertMode" description="工艺完成后的蜂鸣器提示模式" max="" min="" paramter="PerJob;PerWafer" tag="ReadOnlySelection" unit="" type="String" />
<configs name="Scheduler">
<config default="15" name="WaitLoadTimeOut" description="Wait Load TimeOut" max="1000" min="1" paramter="" tag="" unit="s" type="Double" visible="false" />
<config default="2" name="WaferCountBelowWhichStartNewProcessJob" description="Wafer Count Below Which Start New Process Job" max="25" min="1" paramter="" tag="" unit="" type="Integer" visible="false" />
@ -507,6 +508,8 @@
<config default="" name="LastRecipeName" description="last recipe name" max="" min="" paramter="" tag="" visible="false" unit="" type="String" />
<config default="127.0.0.1:102" name="SiemensIP" description="Siemens IP AddressDefault IP192.168.1.105:102" max="" min="" paramter="" tag="" unit="" type="String" />
<config default="S1500" name="SiemensType" visible="false" description="Siemens Type" max="" min="" paramter="" tag="" unit="" type="String" />
<config default="30" name="PT1PT2PressureDifferenceUpperLimit" description="PT1和PT2最大压差上限" max="1100" min="0" paramter="" tag="" unit="s" type="Double" />
<config default="Warning" name="PT1PT2PressureDifferenceMaxAlarmLevel" description="工艺过程中PT1和PT2最大压差超限时产生报警的等级" max="" min="" paramter="Alarm;Warning" tag="ReadOnlySelection" unit="" type="String" />
<config default="5" name="ThrottlePressureMaxDiff" description="蝶阀调节值与实际压力的差值小于此数值则表示到位" max="1000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="120" name="ThrottlePressureTimeout" description="蝶阀调节值超时时间" max="2000" min="0" paramter="" tag="" unit="s" type="Integer" />
<config default="5" name="ThrottlePressureRate" description="蝶阀每秒调节速率(mbar/每秒)" max="1000" min="0" paramter="" tag="" unit="mbar" type="Double" />
@ -606,12 +609,12 @@
<config default="200" name="FinalPressure" description="最后保持的压力" max="1100" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="10" name="PressureBalanceTime" description="压力平衡时间" max="100" min="0" paramter="" tag="" unit="s" type="Integer" />
<config default="true" name="PSUHeaterEnable" description="PSU加热是否启用" max="" min="" paramter="" tag="" unit="" visible="true" type="Bool" />
<config default="0" name="PSUHeaterMode" description="PSU HeatMode:0为Power,1为TC,2为Pyro" max="2" min="0" paramter="" tag="" unit="" type="Integer" visible="false" />
<config default="0" name="PSUHeaterMode" description="PSU HeatMode:0为Power,1为Pyro" max="1" min="0" paramter="" tag="" unit="" type="Integer" visible="false" />
<config default="2" name="PSUInnerRatio" description="PSU Inner Ratio" max="100" min="0" paramter="" tag="" unit="%" type="Double" />
<config default="17" name="PSUMiddleRatio" description="PSU Middle Ratio" max="100" min="0" paramter="" tag="" unit="%" type="Double" />
<config default="21" name="PSUOuterRatio" description="PSU Outer Ratio" max="100" min="0" paramter="" tag="" unit="%" type="Double" />
<config default="true" name="SCRHeaterEnable" description="SCR加热是否启用" max="" min="" paramter="" tag="" unit="" visible="true" type="Bool" />
<config default="0" name="SCRHeaterMode" description="SCR HeatMode:0为Power,1为TC,2为Pyro" max="2" min="0" paramter="" tag="" unit="" type="Integer" visible="false" />
<config default="0" name="SCRHeaterMode" description="SCR HeatMode:0为Power,1为Pyro" max="1" min="0" paramter="" tag="" unit="" type="Integer" visible="false" />
<config default="12" name="SCRUpperRatio" description="SCR Upper Ratio" max="100" min="0" paramter="" tag="" unit="%" type="Double" />
<config default="7" name="SCRMiddleRatio" description="SCR Middle Ratio" max="100" min="0" paramter="" tag="" unit="%" type="Double" />
<config default="9" name="SCRLowerRatio" description="SCR Lower Ratio" max="100" min="0" paramter="" tag="" unit="%" type="Double" />
@ -1054,6 +1057,8 @@
<config default="" name="LastRecipeName" description="last recipe name" max="" min="" paramter="" tag="" visible="false" unit="" type="String" />
<config default="127.0.0.1:102" name="SiemensIP" description="Siemens IP AddressDefault IP192.168.1.205:102" max="" min="" paramter="" tag="" unit="" type="String" />
<config default="S1500" name="SiemensType" visible="false" description="Siemens Type" max="" min="" paramter="" tag="" unit="" type="String" />
<config default="30" name="PT1PT2PressureDifferenceUpperLimit" description="PT1和PT2最大压差上限" max="1100" min="0" paramter="" tag="" unit="s" type="Double" />
<config default="Warning" name="PT1PT2PressureDifferenceMaxAlarmLevel" description="工艺过程中PT1和PT2最大压差超限时产生报警的等级" max="" min="" paramter="Alarm;Warning" tag="ReadOnlySelection" unit="" type="String" />
<config default="5" name="ThrottlePressureMaxDiff" description="蝶阀调节值与实际压力的差值小于此数值则表示到位" max="1000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="120" name="ThrottlePressureTimeout" description="蝶阀调节值超时时间" max="2000" min="0" paramter="" tag="" unit="s" type="Integer" />
<config default="5" name="ThrottlePressureRate" description="蝶阀每秒调节速率(mbar/每秒)" max="1000" min="0" paramter="" tag="" unit="mbar" type="Double" />
@ -1154,12 +1159,12 @@
<config default="200" name="FinalPressure" description="最后保持的压力" max="1100" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="10" name="PressureBalanceTime" description="压力平衡时间" max="100" min="0" paramter="" tag="" unit="s" type="Integer" />
<config default="true" name="PSUHeaterEnable" description="PSU加热是否启用" max="" min="" paramter="" tag="" unit="" visible="true" type="Bool" />
<config default="0" name="PSUHeaterMode" description="PSU HeatMode:0为Power,1为TC,2为Pyro" max="2" min="0" paramter="" tag="" unit="" type="Integer" visible="false" />
<config default="0" name="PSUHeaterMode" description="PSU HeatMode:0为Power,1为Pyro" max="1" min="0" paramter="" tag="" unit="" type="Integer" visible="false" />
<config default="2" name="PSUInnerRatio" description="PSU Inner Ratio" max="100" min="0" paramter="" tag="" unit="%" type="Double" />
<config default="17" name="PSUMiddleRatio" description="PSU Middle Ratio" max="100" min="0" paramter="" tag="" unit="%" type="Double" />
<config default="21" name="PSUOuterRatio" description="PSU Outer Ratio" max="100" min="0" paramter="" tag="" unit="%" type="Double" />
<config default="true" name="SCRHeaterEnable" description="SCR加热是否启用" max="" min="" paramter="" tag="" unit="" visible="true" type="Bool" />
<config default="0" name="SCRHeaterMode" description="SCR HeatMode:0为Power,1为TC,2为Pyro" max="2" min="0" paramter="" tag="" unit="" type="Integer" visible="false" />
<config default="0" name="SCRHeaterMode" description="SCR HeatMode:0为Power,1为Pyro" max="1" min="0" paramter="" tag="" unit="" type="Integer" visible="false" />
<config default="12" name="SCRUpperRatio" description="SCR Upper Ratio" max="100" min="0" paramter="" tag="" unit="%" type="Double" />
<config default="7" name="SCRMiddleRatio" description="SCR Middle Ratio" max="100" min="0" paramter="" tag="" unit="%" type="Double" />
<config default="9" name="SCRLowerRatio" description="SCR Lower Ratio" max="100" min="0" paramter="" tag="" unit="%" type="Double" />

View File

@ -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))
@ -459,9 +464,7 @@ namespace SicRT.Equipments
}
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
{

View File

@ -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,6 +109,7 @@ namespace SicRT.Modules.Schedulers
&& WaferManager.Instance.CheckHasWafer(_module, _lastTransferSlot))
{
//EV.PostMessage(Module.ToString(), EventEnum.PJ_DONE, _module, (_lastTransferSlot + 1).ToString());
if(SC.SafeGetStringValue("System.ProcessDoneAlertMode", "PerJob") == "PerWafer")
OP.DoOperation("System.AlertJobDone", _module, _lastTransferSlot + 1);
}
}

View File

@ -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;
}

File diff suppressed because it is too large Load Diff

View File

@ -51,5 +51,5 @@ using System.Windows;
// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
// 方法是按如下所示使用“*”: :
[assembly: AssemblyVersion("1.3.0.40308")]
[assembly: AssemblyVersion("1.3.1.40315")]
[assembly: AssemblyInformationalVersion("自动通用版有EFEM")]

View File

@ -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修复

View File

@ -240,8 +240,6 @@ namespace SicUI.Client
return;
}
MaintainProvider2.Instance.Initialize();
BaseApp.Instance.Initialize();
_splashScreen?.SetMessage1("Preparing Environment ...");

View File

@ -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">
<UserControl.Resources>
<extendedControls:BindingProxy x:Key="proxy" Data="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=UserControl}}"/>
</UserControl.Resources>
<Viewbox Stretch="Uniform">
<Canvas
x:Name="root"
@ -66,10 +72,16 @@
</Common:AxisCanvas>
<Canvas.RenderTransform>
<TransformGroup>
<RotateTransform Angle="{Binding RotateAngle}" CenterY="30" />
<TranslateTransform x:Name="translate" X="{Binding TranslateX}" />
<RotateTransform Angle="{Binding Source={StaticResource proxy},Path=Data.RotateAngle,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" CenterY="30" />
<TranslateTransform x:Name="translate" X="{Binding Source={StaticResource proxy},Path=Data.TranslateX,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" />
</TransformGroup>
</Canvas.RenderTransform>
<!--<Canvas.RenderTransform>
<TransformGroup>
<RotateTransform Angle="{Binding Source={StaticResource proxy},Path=Data.RotateAngle}" CenterY="30" />
<TranslateTransform x:Name="translate" X="{Binding Source={StaticResource proxy},Path=Data.TranslateX}" />
</TransformGroup>
</Canvas.RenderTransform>-->
</Canvas>
</Viewbox>
</UserControl>

View File

@ -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
}
}
}

View File

@ -39,7 +39,7 @@
Canvas.Top="142"
Height="150"
Source="Images/tm.png" />
<Canvas Visibility="{Binding IsLLInstalled, Converter={StaticResource BoolVisibilityConverter}}">
<Canvas Visibility="{Binding IsLoadLockInstalled, Converter={StaticResource BoolVisibilityConverter}}">
<unitControls:Door
Canvas.Left="333"
Canvas.Top="155"
@ -153,12 +153,11 @@
Canvas.Top="189"
Height="40"
HasTray="{Binding TrayRobotHaveTray}"
HasWafer="{Binding TrayRobotIsArmWater}"
RobotMoveInfo="{Binding TrayRobotMoveInfo}"
ShowDock="False"
Wafer1="{Binding TrayRobotWafer}" />
<Canvas Visibility="{Binding IsLLInstalled, Converter={StaticResource BoolVisibilityConverter}}">
<Canvas Visibility="{Binding IsLoadLockInstalled, Converter={StaticResource BoolVisibilityConverter}}">
<Image
Canvas.Left="331"
Canvas.Top="161"
@ -171,10 +170,10 @@
Canvas.Left="232"
Canvas.Top="183"
Height="40"
HasWafer="{Binding WaferRobotIsArmWater}"
RobotMoveInfo="{Binding WaferRobotMoveInfo}"
ShowDock="False"
Wafer1="{Binding WaferRobotWafer}" />
Wafer1="{Binding WaferRobotWafer}"
EnableWaferClick="{Binding EnableWaferClick}"/>
<Canvas>
<Image
@ -241,7 +240,7 @@
IsEnabled="{Binding EnableWaferClick}"
WaferData="{Binding UnLoadWafer}" />
</Canvas>
<Canvas Visibility="{Binding IsLLInstalled, Converter={StaticResource BoolVisibilityConverter}}">
<Canvas Visibility="{Binding IsLoadLockInstalled, Converter={StaticResource BoolVisibilityConverter}}">
<controls:WaferCtrl
Canvas.Left="349"
Canvas.Top="180"

View File

@ -142,7 +142,7 @@
</unitControls:Door.RenderTransform>
</unitControls:Door>
</Canvas>
<Canvas Visibility="{Binding IsLLInstalled, Converter={StaticResource BoolVisibilityConverter}}">
<Canvas Visibility="{Binding IsLoadLockInstalled, Converter={StaticResource BoolVisibilityConverter}}">
<unitControls:Door
Canvas.Left="330"
Canvas.Top="455"
@ -191,14 +191,13 @@
Canvas.Top="189"
Height="40"
HasTray="{Binding TrayRobotHaveTray}"
HasWafer="{Binding TrayRobotIsArmWater}"
IsEnabled="{Binding EnableWaferClick}"
RobotMoveInfo="{Binding TrayRobotMoveInfo}"
ShowDock="False"
ToolTipService.ShowOnDisabled="True"
Wafer1="{Binding TrayRobotWafer}" />
<Canvas Visibility="{Binding IsLLInstalled, Converter={StaticResource BoolVisibilityConverter}}">
<Canvas Visibility="{Binding IsLoadLockInstalled, Converter={StaticResource BoolVisibilityConverter}}">
<Image
Canvas.Left="330"
Canvas.Top="158"
@ -211,12 +210,12 @@
Canvas.Left="232"
Canvas.Top="183"
Height="40"
HasWafer="{Binding WaferRobotIsArmWater}"
IsEnabled="{Binding EnableWaferClick}"
RobotMoveInfo="{Binding WaferRobotMoveInfo}"
ShowDock="False"
ToolTipService.ShowOnDisabled="True"
Wafer1="{Binding WaferRobotWafer}" />
Wafer1="{Binding WaferRobotWafer}"
EnableWaferClick="{Binding EnableWaferClick}"/>
<Image
Canvas.Left="275"
@ -408,7 +407,7 @@
ToolTipService.ShowOnDisabled="True"
WaferData="{Binding UnLoadWafer}" />
</Canvas>
<Canvas Visibility="{Binding IsLLInstalled, Converter={StaticResource BoolVisibilityConverter}}">
<Canvas Visibility="{Binding IsLoadLockInstalled, Converter={StaticResource BoolVisibilityConverter}}">
<!--<Image Source="Images/pm52.png" Canvas.Left="330" Canvas.Top="458" Visibility="{Binding LoadLockHaveTray}" Width="95"/>-->
<controls:WaferCtrl
Canvas.Left="348"

View File

@ -122,7 +122,7 @@
</unitControls:Door.RenderTransform>
</unitControls:Door>
</Canvas>
<Canvas Visibility="{Binding IsLLInstalled, Converter={StaticResource BoolVisibilityConverter}}">
<Canvas Visibility="{Binding IsLoadLockInstalled, Converter={StaticResource BoolVisibilityConverter}}">
<unitControls:Door
Canvas.Left="336"
Canvas.Top="455"
@ -227,7 +227,7 @@
IsEnabled="{Binding UnLoadEnableWaferClick}"
WaferData="{Binding UnLoadWafer}" />
</Canvas>
<Canvas Visibility="{Binding IsLLInstalled, Converter={StaticResource BoolVisibilityConverter}}">
<Canvas Visibility="{Binding IsLoadLockInstalled, Converter={StaticResource BoolVisibilityConverter}}">
<Image
Canvas.Left="330"
Canvas.Top="459"

View File

@ -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">
<UserControl.Resources>
<extendedControls:BindingProxy x:Key="proxy" Data="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=UserControl}}"/>
</UserControl.Resources>
<Viewbox Stretch="Uniform">
<Canvas
x:Name="root"
@ -60,8 +64,8 @@
</Common:AxisCanvas>
<Canvas.RenderTransform>
<TransformGroup>
<RotateTransform Angle="{Binding RotateAngle}" CenterY="30" />
<TranslateTransform x:Name="translate" X="{Binding TranslateX}" />
<RotateTransform Angle="{Binding Source={StaticResource proxy},Path=Data.RotateAngle}" CenterY="30" />
<TranslateTransform x:Name="translate" X="{Binding Source={StaticResource proxy},Path=Data.TranslateX}" />
</TransformGroup>
</Canvas.RenderTransform>
</Canvas>

View File

@ -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 });
}

View File

@ -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">
<UserControl.Resources>
<extendedControls:BindingProxy x:Key="proxy" Data="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=UserControl}}"/>
</UserControl.Resources>
<Viewbox Stretch="Uniform">
<Canvas
x:Name="root"
@ -61,8 +65,8 @@
</Common:AxisCanvas>
<Canvas.RenderTransform>
<TransformGroup>
<RotateTransform Angle="{Binding RotateAngle}" CenterY="30" />
<TranslateTransform x:Name="translate" X="{Binding TranslateX}" />
<RotateTransform Angle="{Binding Source={StaticResource proxy},Path=Data.RotateAngle}" CenterY="30" />
<TranslateTransform x:Name="translate" X="{Binding Source={StaticResource proxy},Path=Data.TranslateX}" />
</TransformGroup>
</Canvas.RenderTransform>
</Canvas>

View File

@ -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 });
}

View File

@ -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<Credential>(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

View File

@ -898,7 +898,7 @@
Margin="30,-30,0,0"
HorizontalAlignment="Left"
Orientation="Horizontal">
<Grid Margin="10,0" Visibility="{Binding IsLLInstalled, Converter={StaticResource BoolVisibilityConverter}}">
<Grid Margin="10,0" Visibility="{Binding IsLoadLockInstalled, Converter={StaticResource BoolVisibilityConverter}}">
<Grid.RowDefinitions>
<RowDefinition Height="24" />
<RowDefinition Height="32" />

View File

@ -863,7 +863,7 @@
</Border>
</Grid>
<Grid Margin="10,10" Visibility="{Binding IsLLInstalled, Converter={StaticResource BoolVisibilityConverter}}">
<Grid Margin="10,10" Visibility="{Binding IsLoadLockInstalled, Converter={StaticResource BoolVisibilityConverter}}">
<Grid.RowDefinitions>
<RowDefinition Height="24" />
<RowDefinition Height="32" />
@ -1323,7 +1323,7 @@
</Grid>
<Grid Margin="10" Visibility="{Binding IsLLInstalled, Converter={StaticResource BoolVisibilityConverter}}">
<Grid Margin="10" Visibility="{Binding IsLoadLockInstalled, Converter={StaticResource BoolVisibilityConverter}}">
<Grid.RowDefinitions>
<RowDefinition Height="24" />
<RowDefinition Height="32" />
@ -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}}" />
<!--<deviceControl:AITPressureMeter
Canvas.Left="113"

View File

@ -305,7 +305,7 @@ namespace SicUI.Client.Models.Platform.TM
public bool IsPM1Installed { get; set; }
public bool IsPM2Installed { get; set; }
public bool IsBufferInstalled { get; set; }
public bool IsLLInstalled { get; set; }
public bool IsLoadLockInstalled { get; set; }
public bool IsUnLoadInstalled { get; set; }
public bool IsTMInstalled { get; set; }
@ -568,7 +568,7 @@ namespace SicUI.Client.Models.Platform.TM
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");
IsTMInstalled = (bool)QueryDataClient.Instance.Service.GetConfig("System.SetUp.IsTMInstalled");
IsUnLoadInstalled = (bool)QueryDataClient.Instance.Service.GetConfig("System.SetUp.IsUnLoadInstalled");

View File

@ -93,8 +93,7 @@
<StackPanel>
<unitControls:FOUPFrontView
Margin="0,0,0,0"
UnitData="{Binding CassAL}"
Visibility="{Binding IsLP1Installed, Converter={StaticResource BoolVisibilityConverter}}" />
UnitData="{Binding CassAL}"/>
<StackPanel Orientation="Horizontal">
<TextBox
Width="50"
@ -214,8 +213,7 @@
<StackPanel Margin="5,0,0,0">
<unitControls:FOUPFrontView
Margin="0,0,0,0"
UnitData="{Binding CassAR}"
Visibility="{Binding IsLP1Installed, Converter={StaticResource BoolVisibilityConverter}}" />
UnitData="{Binding CassAR}"/>
<StackPanel Orientation="Horizontal">
<!--<Border BorderBrush="{DynamicResource Table_BD}" Height="25" BorderThickness="1" Background="{DynamicResource Table_BG_Content}" Padding="1" >-->
<TextBox
@ -337,22 +335,18 @@
<!-- Header="{Binding CassALWaferAssociation.ModuleData.ModuleID}" -->
<TabItem
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
Header="{lex:Loc {Binding CassALWaferAssociation.ModuleData.ModuleID}}"
Visibility="{Binding IsVCEAVisibility}">
Header="{lex:Loc {Binding CassALWaferAssociation.ModuleData.ModuleID}}">
<waferAssociation:WaferAssociationUnit
Margin="10,2"
HorizontalAlignment="Center"
IsEnabled="{Binding IsEnableJobCassAL}"
WAInfo="{Binding CassALWaferAssociation}" />
</TabItem>
<TabItem
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
Header="{lex:Loc {Binding CassARWaferAssociation.ModuleData.ModuleID}}"
Visibility="{Binding IsVCEBVisibility}">
Header="{lex:Loc {Binding CassARWaferAssociation.ModuleData.ModuleID}}">
<waferAssociation:WaferAssociationUnit
Margin="10,2"
HorizontalAlignment="Center"
IsEnabled="{Binding IsEnableJobCassAR}"
WAInfo="{Binding CassARWaferAssociation}" />
</TabItem>
</TabControl>
@ -620,11 +614,12 @@
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="0,1,1,1">
<TextBlock
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
VerticalAlignment="Center"
FontFamily="Arial"
FontSize="12"
Foreground="{DynamicResource FG_Black}"
Text="{Binding PM2Status}"
Text="{lex:Loc {Binding PM2Status}}"
TextWrapping="Wrap" />
</Border>
<Border
@ -793,8 +788,7 @@
<StackPanel Orientation="Vertical">
<unitControls:FOUPFrontView
Margin="0,0,0,0"
UnitData="{Binding CassBL}"
Visibility="{Binding IsLP1Installed, Converter={StaticResource BoolVisibilityConverter}}" />
UnitData="{Binding CassBL}"/>
<StackPanel Orientation="Horizontal">
<TextBox
Width="50"
@ -1151,7 +1145,7 @@
x:Name="Load_Info"
Canvas.Left="962"
Canvas.Top="590"
Visibility="{Binding IsLoadInstalled, Converter={StaticResource BoolVisibilityConverter}}">
Visibility="{Binding IsLoadLockInstalled, Converter={StaticResource BoolVisibilityConverter}}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="110" />
<ColumnDefinition Width="140" />
@ -1365,8 +1359,7 @@
Canvas.Top="321"
FontFamily="Arial"
FontSize="18"
Text="Buffer"
Visibility="{Binding IsPreHeatInstalled, Converter={StaticResource BoolVisibilityConverter}}" />
Text="Buffer"/>
<TextBlock
Canvas.Left="472"
Canvas.Top="317"

View File

@ -452,9 +452,9 @@
Grid.Row="9"
Grid.Column="1"
Padding="5,1"
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
BorderThickness="0,0,1,1">
<Label HorizontalContentAlignment="Center" FontSize="14">
<TextBlock Text="{lex:Loc {Binding strL1LoopMode, FallbackValue=Unknown}}" />
@ -464,9 +464,9 @@
Grid.Row="9"
Grid.Column="2"
Padding="5,1"
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
BorderThickness="0,0,1,1">
<Label HorizontalContentAlignment="Center" FontSize="14">
<TextBlock Text="{lex:Loc {Binding strL2LoopMode, FallbackValue=Unknown}}" />
@ -476,9 +476,9 @@
Grid.Row="9"
Grid.Column="3"
Padding="5,1"
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
BorderThickness="0,0,1,1">
<Label HorizontalContentAlignment="Center" FontSize="14">
<TextBlock Text="{lex:Loc {Binding strL3LoopMode, FallbackValue=Unknown}}" />
@ -688,9 +688,9 @@
Grid.Column="1"
Grid.ColumnSpan="3"
Padding="5,1"
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
BorderThickness="0,0,1,1">
<Label HorizontalContentAlignment="Center" FontSize="14">
<TextBlock Text="{lex:Loc {Binding strTCPyroMode, FallbackValue=Unknown}}" />
@ -931,7 +931,7 @@
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="0,0,1,1">
<Button Content="{lex:Loc {Binding PSU3EnableStr, FallbackValue=Unknown}}" IsEnabled="{Binding AllHeatEnable}">
<Button Content="{lex:Loc {Binding PSU2EnableStr, FallbackValue=Unknown}}" IsEnabled="{Binding AllHeatEnable}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="SetPSUEnable">
@ -1068,9 +1068,9 @@
Grid.Row="12"
Grid.Column="1"
Padding="5,1"
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
BorderThickness="0,1,1,1">
<Label HorizontalContentAlignment="Center" FontSize="14">
<TextBlock Text="{lex:Loc {Binding heaterMode, FallbackValue=Unknown}}" />
@ -2440,9 +2440,9 @@
Grid.Row="7"
Grid.Column="1"
Padding="5,1"
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
BorderThickness="0,0,1,1">
<Label HorizontalContentAlignment="Center" FontSize="14">
<TextBlock Text="{lex:Loc {Binding strL1LoopMode2, FallbackValue=Unknown}}" />
@ -2452,9 +2452,9 @@
Grid.Row="7"
Grid.Column="2"
Padding="5,1"
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
BorderThickness="0,0,1,1">
<Label HorizontalContentAlignment="Center" FontSize="14">
<TextBlock Text="{lex:Loc {Binding strL2LoopMode2, FallbackValue=Unknown}}" />
@ -2464,9 +2464,9 @@
Grid.Row="7"
Grid.Column="3"
Padding="5,1"
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
BorderThickness="0,0,1,1">
<Label HorizontalContentAlignment="Center" FontSize="14">
<TextBlock Text="{lex:Loc {Binding strL3LoopMode2, FallbackValue=Unknown}}" />
@ -2583,9 +2583,9 @@
Grid.Column="1"
Grid.ColumnSpan="3"
Padding="5,1"
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
BorderThickness="0,0,1,1">
<Label HorizontalContentAlignment="Center" FontSize="14">
<TextBlock Text="{lex:Loc {Binding strTCPyroMode2, FallbackValue=Unknown}}" />
@ -2855,9 +2855,9 @@
Grid.Row="1"
Grid.Column="1"
Padding="5,1"
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
BorderThickness="0,1,1,1">
<Label
HorizontalContentAlignment="Center"

View File

@ -1041,7 +1041,7 @@
BorderThickness="1,0,1,1">
<Label
HorizontalContentAlignment="Right"
Content="{lex:Loc ID_TXT_Swing_Lock}"
Content="{lex:Loc ID_TXT_Swing_unLock}"
FontSize="14" />
</Border>
<Border

View File

@ -54,5 +54,5 @@ using System.Windows;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.3.0.40308")]
[assembly: AssemblyVersion("1.3.1.40315")]
[assembly: AssemblyInformationalVersion("自动通用版有EFEM")]

Binary file not shown.