|
@@ -15,24 +15,6 @@ using MECF.Framework.Common.Schedulers;
|
|
|
|
|
|
namespace MECF.Framework.Common.SubstrateTrackings
|
|
|
{
|
|
|
- struct DulicatedWaferInfo
|
|
|
- {
|
|
|
- public Guid waferId;
|
|
|
- public ModuleName source;
|
|
|
- public int sourceSlot;
|
|
|
- public ModuleName destination;
|
|
|
- public int destSlot;
|
|
|
-
|
|
|
- public DulicatedWaferInfo(Guid id, ModuleName Source, int SrcSlot, ModuleName Destination, int DestSlot)
|
|
|
- {
|
|
|
- waferId = id;
|
|
|
- source = Source;
|
|
|
- sourceSlot = SrcSlot;
|
|
|
- destination = Destination;
|
|
|
- destSlot = DestSlot;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
public class WaferManager : Singleton<WaferManager>
|
|
|
{
|
|
|
Dictionary<string, WaferInfo> _dict = new Dictionary<string, WaferInfo>();
|
|
@@ -60,6 +42,7 @@ namespace MECF.Framework.Common.SubstrateTrackings
|
|
|
if (_locationWafers != null)
|
|
|
{
|
|
|
BinarySerializer<Dictionary<ModuleName, Dictionary<int, WaferInfo>>>.ToStream(_locationWafers, "WaferManager");
|
|
|
+ BinarySerializer<List<DulicatedWaferInfo>>.ToStream(_duplicatedWafers, "DuplicatedWafers");
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
@@ -88,6 +71,12 @@ namespace MECF.Framework.Common.SubstrateTrackings
|
|
|
}
|
|
|
_locationWafers = ccc;
|
|
|
}
|
|
|
+
|
|
|
+ var duplicatedWafers = BinarySerializer<List<DulicatedWaferInfo>>.FromStream("DuplicatedWafers");
|
|
|
+ if (duplicatedWafers != null)
|
|
|
+ {
|
|
|
+ _duplicatedWafers = duplicatedWafers;
|
|
|
+ }
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
@@ -497,7 +486,7 @@ namespace MECF.Framework.Common.SubstrateTrackings
|
|
|
_locationWafers[source][sourceSlot].IsDuplicated = true;
|
|
|
|
|
|
WaferInfo wafer = CopyWaferInfo(destination, destSlot, _locationWafers[source][sourceSlot]);
|
|
|
- _duplicatedWafers.Add(new DulicatedWaferInfo(wafer.InnerId, source, sourceSlot, destination, destSlot));
|
|
|
+ _duplicatedWafers.Add(new DulicatedWaferInfo(wafer.InnerId, (int)source, sourceSlot, (int)destination, destSlot));
|
|
|
|
|
|
LOG.Write(eEvent.EV_WAFER_DUPLICATED, ModuleName.System, waferOrigin, source.ToString(), (source + 1).ToString(), destination.ToString(), (destSlot + 1).ToString());
|
|
|
|
|
@@ -507,7 +496,7 @@ namespace MECF.Framework.Common.SubstrateTrackings
|
|
|
private void deleteDuplicatedWafer(ModuleName module, int slot)
|
|
|
{
|
|
|
var id = _locationWafers[module][slot].InnerId;
|
|
|
- var infoIndex = _duplicatedWafers.FindIndex(info => info.waferId == id && ((info.source == module && info.sourceSlot == slot) || (info.destination == module && info.destSlot == slot)));
|
|
|
+ var infoIndex = _duplicatedWafers.FindIndex(info => info.waferId == id && ((info.source == (int)module && info.sourceSlot == slot) || (info.destination == (int)module && info.destSlot == slot)));
|
|
|
if(infoIndex == -1)
|
|
|
{
|
|
|
LOG.Write(eEvent.ERR_WAFER_MANAGER_FAILED, ModuleName.System, string.Format("Delete Duplicated Wafer failed, {0},{1}", module, slot + 1));
|
|
@@ -515,16 +504,16 @@ namespace MECF.Framework.Common.SubstrateTrackings
|
|
|
}
|
|
|
|
|
|
var duplicatgedInfo = _duplicatedWafers[infoIndex];
|
|
|
- var peerModule = duplicatgedInfo.source == module ? duplicatgedInfo.destination : duplicatgedInfo.source;
|
|
|
- var peerSlot = duplicatgedInfo.source == module ? duplicatgedInfo.destSlot : duplicatgedInfo.sourceSlot;
|
|
|
- if(_locationWafers[peerModule][peerSlot].IsEmpty ||!_locationWafers[peerModule][peerSlot].IsDuplicated)
|
|
|
+ var peerModule = duplicatgedInfo.source == (int)module ? duplicatgedInfo.destination : duplicatgedInfo.source;
|
|
|
+ var peerSlot = duplicatgedInfo.source == (int)module ? duplicatgedInfo.destSlot : duplicatgedInfo.sourceSlot;
|
|
|
+ if((_locationWafers[(ModuleName)peerModule][peerSlot].IsEmpty || !_locationWafers[(ModuleName)peerModule][peerSlot].IsDuplicated) && !ModuleHelper.IsLoadPort((ModuleName)peerModule))
|
|
|
{
|
|
|
LOG.Write(eEvent.ERR_WAFER_MANAGER_FAILED, ModuleName.System, string.Format("Delete Duplicated Wafer failed, the opponent wafer at {0},{1} is not a duplicated wafer", peerModule, peerSlot + 1));
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
_locationWafers[module][slot].SetEmpty();
|
|
|
- _locationWafers[peerModule][peerSlot].IsDuplicated = false;
|
|
|
+ _locationWafers[(ModuleName)peerModule][peerSlot].IsDuplicated = false;
|
|
|
_duplicatedWafers.RemoveAt(infoIndex);
|
|
|
}
|
|
|
|