Merge branch 'Sic8ToSic6' into 添加DI-45

# Conflicts:
#	SicUI/Properties/AssemblyInfo.cs
This commit is contained in:
Han Qiang Qiang 2023-12-14 16:58:02 +08:00
commit ec0db0ed21
25 changed files with 134 additions and 79 deletions

View File

@ -308,6 +308,14 @@
<IoPTOffsetAndK id="PT1_K" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT1_K" />
<IoPTOffsetAndK id="PT2_Offset" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT2_Offset" />
<IoPTOffsetAndK id="PT2_K" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT2_K" />
<IoPTOffsetAndK id="PT3_Offset" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT3_Offset" />
<IoPTOffsetAndK id="PT3_K" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT3_K" />
<IoPTOffsetAndK id="PT4_Offset" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT4_Offset" />
<IoPTOffsetAndK id="PT4_K" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT4_K" />
<IoPTOffsetAndK id="PT9_Offset" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT9_Offset" />
<IoPTOffsetAndK id="PT9_K" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT9_K" />
<IoPTOffsetAndK id="PT10_Offset" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT10_Offset" />
<IoPTOffsetAndK id="PT10_K" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT10_K" />
<IoPTOffsetAndK id="U1_Water" module="" display="WaterTemp" schematicId="" unit="" aioType="float" aoOffset="AO_AI3_Offset" />
<IoPTOffsetAndK id="U2_Water" module="" display="WaterTemp" schematicId="" unit="" aioType="float" aoOffset="AO_AI4_Offset" />
<IoPTOffsetAndK id="U3_Water" module="" display="WaterTemp" schematicId="" unit="" aioType="float" aoOffset="AO_AI5_Offset" />

View File

@ -188,14 +188,6 @@
<TMRobot id="TMRobot" module="TMRobot" display="" schematicId="" unit="" />
</TMRobots>
<WaferRobots assembly="SicModules" classType="SicModules.EFEMs.SicWaferRobot">
<WaferRobot id="WaferRobot" module="WaferRobot" display="" schematicId="" unit="" />
</WaferRobots>
<TrayRobots assembly="SicModules" classType="SicModules.EFEMs.SicTrayRobot">
<TrayRobot id="TrayRobot" module="TrayRobot" display="" schematicId="" unit="" />
</TrayRobots>
<Cassettes assembly="SicModules" classType="SicModules.Cassettes.SicCassette">
<Cassette id="CassAL" module="CassAL" display="" schematicId="" unit="" />
<Cassette id="CassAR" module="CassAR" display="" schematicId="" unit="" />

View File

@ -10,7 +10,9 @@ using MECF.Framework.Common.SubstrateTrackings;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Aligners.HiWinAligner;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.EFEM;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.HwinRobot;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.RobotBase;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.Sunway;
using static MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.RobotBase.RobotBaseDevice;
using IoInterLock = SicModules.Devices.IoInterLock;
@ -59,8 +61,24 @@ namespace SicModules.EFEMs.Routines.Base
public EfemBaseRoutine() : base(ModuleName.EFEM.ToString())
{
_waferRobot = DEVICE.GetDevice<SicWaferRobot>($"WaferRobot.WaferRobot");
_trayRobot = DEVICE.GetDevice<SicTrayRobot>($"TrayRobot.TrayRobot");
if (SC.GetStringValue("WaferRobot.RobotType") == "SunwayRobot")
{
_waferRobot = DEVICE.GetDevice<SunwayRobot>($"WaferRobot.WaferRobot");
}
else
{
_waferRobot = DEVICE.GetDevice<HwinRobot>($"WaferRobot.WaferRobot");
}
if (SC.GetStringValue("TrayRobot.RobotType") == "SunwayRobot")
{
_trayRobot = DEVICE.GetDevice<SunwayRobot>($"TrayRobot.TrayRobot");
}
else
{
_trayRobot = DEVICE.GetDevice<HwinRobotB>($"TrayRobot.TrayRobot");
}
_efemDevice = DEVICE.GetDevice<SicEFEM>($"EFEM.EFEM");
_loadTrayHomeSensor = DEVICE.GetDevice<IoSensor>($"TM.LoadTrayHomeSensor");
_alignerDevice = DEVICE.GetDevice<HwAlignerGuide>($"Aligner.HiWinAligner");

View File

@ -43,7 +43,8 @@ namespace SicModules.EFEMs.Routines
SetExtendToDo,
Pick,
CheckTrayStatuBeforePick,
ClearRobortExtendToDo
ClearRobortExtendToDo,
ExtendForPick
}
public TrayRobotPickRoutine()
@ -112,26 +113,33 @@ namespace SicModules.EFEMs.Routines
{
try
{
CheckRobotReady((int)RoutineStep.CheckRobotReady, TrayRobot, _pickTimeout);
if (SC.GetStringValue("TrayRobot.RobotType") != "SunwayRobot")
{
CheckTrayStatuBeforePick((int)RoutineStep.CheckTrayStatuBeforePick, TrayRobot, 10); //Pick前先检查
}
if (_source == ModuleName.LoadLock)
{
CheckRobotReady((int)RoutineStep.CheckRobotReady, TrayRobot, _pickTimeout);
CheckTrayStatuBeforePick((int)RoutineStep.CheckTrayStatuBeforePick, TrayRobot, 10); //Pick前先检查
ExecuteRoutine((int)RoutineStep.OpenSlitValve, _efemSlitValveOpenRoutine); //打开闸板阀
SetTrayRobortExtendToDO((int)RoutineStep.SetExtendToDo, _source, 10); //设置ExtendToDO,用于检测InterLock
}
Pick((int)RoutineStep.Pick, TrayRobot, _source, _sourceSlot, _pickTimeout);
if (SC.GetStringValue("TrayRobot.RobotType") == "SunwayRobot")
{
ExtendForPick((int)RoutineStep.ExtendForPick, TrayRobot, _source, _sourceSlot, _pickTimeout); //机械手到位
}
ClearRobortExtendToDO((int)RoutineStep.ClearRobortExtendToDo);
Pick((int)RoutineStep.Pick, TrayRobot, _source, _sourceSlot, _pickTimeout);
ClearRobortExtendToDO((int)RoutineStep.ClearRobortExtendToDo);
if (_source == ModuleName.LoadLock)
{
TimeDelay((int)RoutineStep.TimeDelay1, 1);
ExecuteRoutine((int)RoutineStep.CloseSlitValve, _efemSlitValveCloseRoutine); //关闭闸板阀
}
else
{
CheckRobotReady((int)RoutineStep.CheckRobotReady, TrayRobot, _pickTimeout);
CheckTrayStatuBeforePick((int)RoutineStep.CheckTrayStatuBeforePick, TrayRobot, 10); //Pick前先检查
Pick((int)RoutineStep.Pick, TrayRobot, _source, _sourceSlot, _pickTimeout); //机械手到位,夹爪打开
ClearRobortExtendToDO((int)RoutineStep.ClearRobortExtendToDo);
}
}
catch (RoutineBreakException)
{

View File

@ -61,6 +61,7 @@ namespace SicModules.EFEMs.Routines
SetExtendToDo,
ClearRobortExtendToDo,
CheckTraySensor,
ExtendForPlace,
TimeDelay1,
TimeDelay2,
@ -150,12 +151,6 @@ namespace SicModules.EFEMs.Routines
{
try
{
/* DI_LoadTrayPresence
* DI_LoadWaferPlaced Wafer有无
* DI_LoadHomeTraySensor
*/
if (_source == ModuleName.LoadLock)
{
@ -164,6 +159,12 @@ namespace SicModules.EFEMs.Routines
ExecuteRoutine((int)RoutineStep.OpenSlitValve, _efemSlitValveOpenRoutine); //打开闸板阀
SetTrayRobortExtendToDO((int)RoutineStep.SetExtendToDo, _source, 10); //设置ExtendToDO,用于检测InterLock
CheckRobotReady((int)RoutineStep.CheckRobotReady, TrayRobot, _placeTimeout); //判断机械手当前是否空闲
if (SC.GetStringValue("TrayRobot.RobotType") == "SunwayRobot")
{
ExtendForPlace((int)RoutineStep.ExtendForPlace, TrayRobot, _source, _sourceSlot, _placeTimeout); //伸出,关真空
}
Place((int)RoutineStep.Place, TrayRobot, _source, _sourceSlot, _placeTimeout); //机械手
ClearRobortExtendToDO((int)RoutineStep.ClearRobortExtendToDo);
@ -183,6 +184,12 @@ namespace SicModules.EFEMs.Routines
{
CheckRobotReady((int)RoutineStep.CheckRobotReady, TrayRobot, _placeTimeout); //判断机械手当前是否空闲
SetTrayRobortExtendToDO((int)RoutineStep.SetExtendToDo, _source, 10); //设置ExtendToDO,用于检测InterLock
if (SC.GetStringValue("TrayRobot.RobotType") == "SunwayRobot")
{
ExtendForPlace((int)RoutineStep.ExtendForPlace, TrayRobot, _source, _sourceSlot, _placeTimeout); //伸出,关真空
}
Place((int)RoutineStep.Place, TrayRobot, _source, _sourceSlot, _placeTimeout); //机械手
ClearRobortExtendToDO((int)RoutineStep.ClearRobortExtendToDo);
}

View File

@ -37,6 +37,7 @@ namespace SicModules.EFEMs.Routines
TimeDelay1,
ExtendForPick,
Pick,
Map,
}
public WaferRobotMapRoutine()
@ -98,7 +99,7 @@ namespace SicModules.EFEMs.Routines
try
{
CheckRobotReady((int)RoutineStep.CheckRobotReady, WaferRobot, _pickTimeout); //判断机械手当前是否空闲
Map((int)RoutineStep.Pick, WaferRobot, _source, _pickTimeout); //机械手吸住,收回
Map((int)RoutineStep.Map, WaferRobot, _source, _pickTimeout); //机械手吸住,收回
}
catch (RoutineBreakException)
{

View File

@ -186,8 +186,11 @@ namespace SicModules.EFEMs.Routines
CheckRobotReady((int)RoutineStep.CheckRobotReady, WaferRobot, _pickTimeout);
//开始前先检查Wafer
CheckWaferStatuBeforePick((int)RoutineStep.CheckWaferStatuBeforePick, WaferRobot, 10);
if (SC.GetStringValue("WaferRobot.RobotType") != "SunwayRobot")
{
CheckWaferStatuBeforePick((int)RoutineStep.CheckWaferStatuBeforePick, WaferRobot, 10);
}
TimeDelay((int)RoutineStep.TimeDelay2, 3);
////执行Load Tray 找原点

View File

@ -176,6 +176,7 @@ namespace SicModules.EFEMs.Routines
ExecuteRoutine((int)RoutineStep.OpenSlitValve, _efemSlitValveOpenRoutine); //打开闸板阀
SetWaferRobortExtendToDO((int)RoutineStep.SetExtendToDo, _target, 10); //设置ExtendToDO,用于检测InterLock
CheckRobotReady((int)RoutineStep.CheckRobotReady, WaferRobot, _placeTimeout); //判断机械手当前是否空闲
ExtendForPlace((int)RoutineStep.ExtendForPlace, WaferRobot, _target, _targetSlot, _placeTimeout); //伸出,关真空
//夹爪打开,顶针上升
@ -203,7 +204,12 @@ namespace SicModules.EFEMs.Routines
ClearRobortExtendToDO((int)RoutineStep.ClearRobortExtendToDo);
TimeDelay((int)RoutineStep.TimeDelay1, 1);
CheckWaferStatuAfterPlace((int)RoutineStep.CheckWaferStatusByRq, WaferRobot, 10); //结束后检查Wafer
if (SC.GetStringValue("WaferRobot.RobotType") != "SunwayRobot")
{
CheckWaferStatuAfterPlace((int)RoutineStep.CheckWaferStatusByRq, WaferRobot, 10); //结束后检查Wafer
}
ExecuteRoutine((int)RoutineStep.CloseSlitValve, _efemSlitValveCloseRoutine); //关闭闸板阀
}
catch (RoutineBreakException)

View File

@ -1,19 +0,0 @@
using System.Xml;
using MECF.Framework.Common.Equipment;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.HwinRobot;
namespace SicModules.EFEMs
{
public class SicTrayRobot : HwinRobotB
{
private ModuleName _module;
public SicTrayRobot(string module, XmlElement node, string ioModule = "") : base("TrayRobot", "TrayRobot", "\r\n")
{
var attrModule = node.GetAttribute("module");
base.Module = string.IsNullOrEmpty(attrModule) ? module : attrModule;
base.Name = node.GetAttribute("id");
_module = ModuleHelper.Converter(Module);
}
}
}

View File

@ -1,19 +0,0 @@
using System.Xml;
using MECF.Framework.Common.Equipment;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.HwinRobot;
namespace SicModules.EFEMs
{
public class SicWaferRobot : HwinRobot
{
private ModuleName _module;
public SicWaferRobot(string module, XmlElement node, string ioModule = "") : base("WaferRobot", "WaferRobot", "\r\n")
{
var attrModule = node.GetAttribute("module");
base.Module = string.IsNullOrEmpty(attrModule) ? module : attrModule;
base.Name = node.GetAttribute("id");
_module = ModuleHelper.Converter(Module);
}
}
}

View File

@ -4,10 +4,14 @@ using Aitex.Core.RT.Device;
using Aitex.Core.RT.Fsm;
using Aitex.Core.RT.OperationCenter;
using Aitex.Core.RT.Routine;
using Aitex.Core.RT.SCCore;
using Aitex.Core.Utilities;
using Aitex.Sorter.Common;
using MECF.Framework.Common.Equipment;
using MECF.Framework.Common.Fsm;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.HwinRobot;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.RobotBase;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.Sunway;
using SicModules.EFEMs.Routines;
namespace SicModules.EFEMs
@ -45,7 +49,7 @@ namespace SicModules.EFEMs
Map,
};
public SicTrayRobot TrayRobotDevice { get; set; }
public RobotBaseDevice TrayRobotDevice { get; set; }
public bool IsReady => FsmState == (int)STATE.Idle && CheckAllMessageProcessed();
@ -112,7 +116,14 @@ namespace SicModules.EFEMs
private void InitDevice()
{
TrayRobotDevice = DEVICE.GetDevice<SicTrayRobot>($"{ModuleName.TrayRobot}.{ModuleName.TrayRobot}");
if (SC.GetStringValue("TrayRobot.RobotType") == "SunwayRobot")
{
TrayRobotDevice = DEVICE.GetDevice<SunwayRobot>($"TrayRobot.TrayRobot");
}
else
{
TrayRobotDevice = DEVICE.GetDevice<HwinRobotB>($"TrayRobot.TrayRobot");
}
}
private void InitFsm()

View File

@ -3,10 +3,14 @@ using Aitex.Core.RT.Device;
using Aitex.Core.RT.Fsm;
using Aitex.Core.RT.OperationCenter;
using Aitex.Core.RT.Routine;
using Aitex.Core.RT.SCCore;
using Aitex.Core.Utilities;
using Aitex.Sorter.Common;
using MECF.Framework.Common.Equipment;
using MECF.Framework.Common.Fsm;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.HwinRobot;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.RobotBase;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.Sunway;
using SicModules.EFEMs.Routines;
namespace SicModules.EFEMs
@ -80,7 +84,7 @@ namespace SicModules.EFEMs
#region Properties
public SicWaferRobot WaferRobotDevice { get; set; }
public RobotBaseDevice WaferRobotDevice { get; set; }
public bool IsReady => FsmState == (int)STATE.Idle && CheckAllMessageProcessed();
@ -126,7 +130,14 @@ namespace SicModules.EFEMs
private void InitDevice()
{
WaferRobotDevice = DEVICE.GetDevice<SicWaferRobot>($"{ModuleName.WaferRobot}.{ModuleName.WaferRobot}");
if (SC.GetStringValue("WaferRobot.RobotType") == "SunwayRobot")
{
WaferRobotDevice = DEVICE.GetDevice<SunwayRobot>($"WaferRobot.WaferRobot");
}
else
{
WaferRobotDevice = DEVICE.GetDevice<HwinRobot>($"WaferRobot.WaferRobot");
}
}
private void InitFsm()

View File

@ -103,8 +103,6 @@
<Compile Include="EFEMs\Routines\WaferRobotMapRoutine.cs" />
<Compile Include="EFEMs\Routines\WaferRobotPickRoutine.cs" />
<Compile Include="EFEMs\Routines\WaferRobotPlaceRoutine.cs" />
<Compile Include="EFEMs\SicTrayRobot.cs" />
<Compile Include="EFEMs\SicWaferRobot.cs" />
<Compile Include="EFEMs\TrayRobotModule.cs" />
<Compile Include="EFEMs\WaferRobotModule.cs" />
<Compile Include="EFEMs\EFEMModule.cs" />

View File

@ -1688,6 +1688,7 @@
<config default="50" name="MaxPressureDiffOpenSlitValve" description="闸板阀允许打开的最大压力差" max="1200" min="0" paramter="" tag="" unit="mbar" type="Double" />
</configs>
<configs name="WaferRobot">
<config default="HwinRobot" name="RobotType" description="Wafer Robot类型" max="" min="" paramter="HwinRobot;SunwayRobot" tag="ReadOnlySelection" unit="" type="String" />
<config default="120" name="PickTimeout" description="pick time out" max="600" min="1" paramter="" tag="" unit="s" type="Integer" />
<config default="120" name="PlaceTimeout" description="place time out" max="600" min="1" paramter="" tag="" unit="s" type="Integer" />
<config default="120" name="GotoTimeout" description="Goto time out" max="600" min="1" paramter="" tag="" unit="s" type="Integer" />
@ -1702,6 +1703,7 @@
<config default="true" name="Blade2Enable" description="Blade2 Enable" max="0" min="0" paramter="" tag="" unit="" type="Bool" visible="false" />
</configs>
<configs name="TrayRobot">
<config default="HwinRobot" name="RobotType" description="Tray Robot类型" max="" min="" paramter="HwinRobot;SunwayRobot" tag="ReadOnlySelection" unit="" type="String" />
<config default="120" name="PickTimeout" description="pick time out" max="600" min="1" paramter="" tag="" unit="s" type="Integer" />
<config default="120" name="PlaceTimeout" description="place time out" max="600" min="1" paramter="" tag="" unit="s" type="Integer" />
<config default="120" name="GotoTimeout" description="Goto time out" max="600" min="1" paramter="" tag="" unit="s" type="Integer" />

View File

@ -7,6 +7,8 @@ using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.UPS;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.MachineVision.Keyence;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Temps.P116PIDTC;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Temps;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.Sunway;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.HwinRobot;
namespace SicRT.Instances
{
@ -125,6 +127,32 @@ namespace SicRT.Instances
QueueDevice(AkOptics);
}
if (SC.GetStringValue($"WaferRobot.RobotType") == "SunwayRobot")
{
var waferRobot = new SunwayRobot("WaferRobot", "WaferRobot");
waferRobot.Initialize();
QueueDevice(waferRobot);
}
else
{
var waferRobot = new HwinRobot("WaferRobot", "WaferRobot");
waferRobot.Initialize();
QueueDevice(waferRobot);
}
if (SC.GetStringValue($"TrayRobot.RobotType") == "SunwayRobot")
{
var trayRobot = new SunwayRobot("TrayRobot", "TrayRobot");
trayRobot.Initialize();
QueueDevice(trayRobot);
}
else
{
var trayRobot = new HwinRobotB("TrayRobot", "TrayRobot");
trayRobot.Initialize();
QueueDevice(trayRobot);
}
return true;
}

View File

@ -8,8 +8,8 @@
<SubView Id="io2" Name="PM2-IO" ViewClass="SicSimulator.Views.SimulatorIOPM2View" Assembly="SicSimulator"/>
<SubView Id="io3" Name="TM-IO" ViewClass="SicSimulator.Views.SimulatorIOTMView" Assembly="SicSimulator"/>
<SubView Id="tmRobot" Name="TM-Robot" ViewClass="MECF.Framework.Simulator.Core.Robots.BrooksMag7RobotView" Assembly="MECF.Framework.Simulator.Core"/>
<SubView Id="WaferRobot" Name="WaferRobot" ViewClass="MECF.Framework.Simulator.Core.Robots.HwinRobotView" Assembly="MECF.Framework.Simulator.Core"/>
<SubView Id="TrayRobot" Name="TrayRobot" ViewClass="MECF.Framework.Simulator.Core.Robots.TrayRobotView" Assembly="MECF.Framework.Simulator.Core"/>
<SubView Id="WaferRobot" Name="WaferRobot" ViewClass="MECF.Framework.Simulator.Core.Robots.HwinRobotView" Assembly="MECF.Framework.Simulator.Core"/>
<SubView Id="TrayRobot" Name="TrayRobot" ViewClass="MECF.Framework.Simulator.Core.Robots.TrayRobotView" Assembly="MECF.Framework.Simulator.Core"/>
<SubView Id="TempOmron" Name="Omron-Temp" ViewClass="MECF.Framework.Simulator.Core.Temperature.OmronTempView" Assembly="MECF.Framework.Simulator.Core"/>
<SubView Id="NSXBreaker" Name="NSX-Breaker" ViewClass="MECF.Framework.Simulator.Core.Breakers.NSXBreakerView" Assembly="MECF.Framework.Simulator.Core"/>
<SubView Id="NAISSevor" Name="NAIS-Sevor" ViewClass="MECF.Framework.Simulator.Core.Sevors.NAIS.NAISSevorView" Assembly="MECF.Framework.Simulator.Core"/>

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.1.4.9")]
[assembly: AssemblyVersion("1.1.5.0")]
[assembly: AssemblyInformationalVersion("自动通用版有EFEM")]

BIN
ThirdParty/MECF.Framework/KXGEM.dll vendored Normal file

Binary file not shown.

Binary file not shown.