Bläddra i källkod

fixed loadport event notify;
fixed waferleft and waferArrive event notify;
fixed job event notify

chenkui 1 år sedan
förälder
incheckning
8bb5f3f4f9

+ 40 - 48
Venus/Framework/Common/SubstrateTrackings/WaferManager.cs

@@ -22,8 +22,8 @@ namespace MECF.Framework.Common.SubstrateTrackings
 
         Dictionary<ModuleName, Dictionary<int, WaferInfo>> _locationWafers = new Dictionary<ModuleName, Dictionary<int, WaferInfo>>();
 
-        private const string EventWaferLeft = "WaferLeftPosition";
-        private const string EventWaferArrive = "WaferArrivePosition";
+        private const string EventWaferLeft = "WAFER_LEFT_POSITION";
+        private const string EventWaferArrive = "WAFER_ARRIVE_POSITION";
 
         public WaferManager()
         {
@@ -132,59 +132,51 @@ namespace MECF.Framework.Common.SubstrateTrackings
 
             WaferMoveHistoryRecorder.WaferMoved(wafer.InnerId.ToString(), moduleTo.ToString(), slotTo, wafer.Status.ToString());
 
+            string fromCarrierId = "";
             if (ModuleHelper.IsLoadPort(moduleFrom))
             {
-                EV.Notify(EventWaferLeft,  new SerializableDictionary<string, string>()
-                {
-                    {"SLOT_NO", (slotFrom+1).ToString("D2")},
-
-                    {"WAFER_ID", wafer.WaferID},
-                    {"LOT_ID", wafer.LotId},
-                    { "CAR_ID", CarrierManager.Instance.GetCarrier(moduleFrom.ToString()).CarrierId ?? ""},
-                    { "LEFT_POS_NAME", $"{moduleFrom}.{(slotFrom+1).ToString("D2")}" },
-
-                    {"PortID", (wafer.OriginStation-(int)ModuleName.LP1+1).ToString()},
-                    {"SlotID", (wafer.OriginSlot+1).ToString()},
-                    {"StationName", moduleFrom.ToString()},
-
-                    
-                });
+                fromCarrierId = CarrierManager.Instance.GetCarrier(moduleFrom.ToString()).CarrierId ?? "";
             }
-            else
+            EV.Notify(EventWaferLeft, new SerializableDictionary<string, string>()
             {
-                EV.Notify(EventWaferLeft, new SerializableDictionary<string, string>()
-                {
-                    {"PortID", (wafer.OriginStation-(int)ModuleName.LP1+1).ToString()},
-                    {"SlotID", (wafer.OriginSlot+1).ToString()},
-                    {"StationName", moduleFrom.ToString()},
-                });
-            }
+                {"SLOT_NO", (slotFrom+1).ToString("D2")},
+                {"WAFER_ID", wafer.WaferID},
+                { "LotID", wafer.LotId},
+                {"LOT_ID", wafer.LotId},
+                { "CAR_ID", fromCarrierId},
+                { "CarrierID", fromCarrierId},
+                { "LEFT_POS_NAME", $"{moduleFrom}.{(slotFrom+1).ToString("D2")}" },
+                { "LocationID", $"{moduleTo}.{(slotTo + 1).ToString("D2")}" },
+                { "SubstLocState", "0" },
+                { "SubstProcState",((int)wafer.ProcessState).ToString()},
+                {"PortID", (wafer.OriginStation-(int)ModuleName.LP1+1).ToString()},
+                {"SlotID", (wafer.OriginSlot+1).ToString()}
 
-            if (ModuleHelper.IsLoadPort(moduleTo))
-            {
-                EV.Notify(EventWaferArrive, new SerializableDictionary<string, string>()
-                {
-                    {"SLOT_NO", (slotTo+1).ToString("D2")},
-                    {"WAFER_ID", wafer.WaferID},
-                    {"LOT_ID", wafer.LotId},
-                    { "CAR_ID", CarrierManager.Instance.GetCarrier(moduleTo.ToString()).CarrierId ?? ""},
-                    { "ARRIVE_POS_NAME", $"{moduleTo}.{(slotTo+1).ToString("D2")}" },
+            });
 
-                    {"PortID", (wafer.OriginStation-(int)ModuleName.LP1+1).ToString()},
-                    {"SlotID", (wafer.OriginSlot+1).ToString()},
-                    {"StationName", moduleTo.ToString()},
-                });
-            }
-            else
+            string toCarrierId = "";
+            if (ModuleHelper.IsLoadPort(moduleTo))
             {
-                EV.Notify(EventWaferArrive, new SerializableDictionary<string, string>()
-                {
-                    {"PortID", (wafer.OriginStation-(int)ModuleName.LP1+1).ToString()},
-                    {"SlotID", (wafer.OriginSlot+1).ToString()},
-                    {"StationName", moduleTo.ToString()},
-                });
-            }
-
+                toCarrierId = CarrierManager.Instance.GetCarrier(moduleTo.ToString()).CarrierId ?? "";
+            }
+
+            EV.Notify(EventWaferArrive, new SerializableDictionary<string, string>()
+            {
+                {"SLOT_NO", (slotTo+1).ToString("D2")},
+                {"SlotID", (wafer.OriginSlot+1).ToString()},
+                {"WAFER_ID", wafer.WaferID},
+                { "SubstID", wafer.WaferID},
+                { "LotID", wafer.LotId},
+                {"LOT_ID", wafer.LotId},
+                { "SubstLocID",((ModuleName)wafer.Station).ToString()},
+                { "SubstLocState", "1" },
+                { "SubstProcState",((int)wafer.ProcessState).ToString()},
+                { "CAR_ID", toCarrierId},
+                { "CarrierID", toCarrierId},
+                { "ARRIVE_POS_NAME", $"{moduleTo}.{(slotTo+1).ToString("D2")}" },
+                {"PortID", (wafer.OriginStation-(int)ModuleName.LP1+1).ToString()},
+                { "LocationID", $"{moduleTo}.{(slotTo + 1).ToString("D2")}" }
+            });
             Serialize();
         }
 

BIN
Venus/ThirdParty/SecsGem.Core.Application.dll


+ 120 - 309
Venus/Venus_RT/Devices/EFEM/Loadport.cs

@@ -7,6 +7,7 @@ using Aitex.Core.Util;
 using Aitex.Sorter.Common;
 using MECF.Framework.Common.Equipment;
 using MECF.Framework.Common.SubstrateTrackings;
+using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts;
 using System;
 using System.Collections;
 using System.Collections.Generic;
@@ -35,6 +36,12 @@ namespace Venus_RT.Devices.EFEM
         public bool JobDone { get; set; }
         public Stopwatch TimerNotifyJobDone { get; set; }
 
+        public IE87CallBack LPCallBack
+        {
+            get { return _lpCallBack; }
+            set { _lpCallBack = value; }
+        }
+        private IE87CallBack _lpCallBack;
         public bool IsThicknessValid
         {
             get
@@ -50,6 +57,10 @@ namespace Venus_RT.Devices.EFEM
                 return _waferThicknessType;
             }
         }
+        public string PortId
+        {
+            get; private set;
+        }
 
         public bool IsClamped { get; set; }
         public bool IsLoaded { get; set; }
@@ -77,16 +88,6 @@ namespace Venus_RT.Devices.EFEM
                 return string.Join("", _slotMap);
             }
         }
-        private string Port1CassetteArrive = "Port1CassetteArrive";
-        private string Port1CassetteRemoved = "Port1CassetteRemoved";
-        private string Port1MappingComplete = "Port1MappingComplete";
-        private string Port1MappingFailed = "Port1MappingFailed";
-
-        private string Port2CassetteArrive = "Port2CassetteArrive";
-        private string Port2CassetteRemoved = "Port2CassetteRemoved";
-        private string Port2MappingComplete = "Port2MappingComplete";
-        private string Port2MappingFailed = "Port2MappingFailed";
-
         private string _waferThicknessType;
 
         private bool _enableThickness;
@@ -98,6 +99,7 @@ namespace Venus_RT.Devices.EFEM
         public Loadport(ModuleName mod, EfemBase efem)
         {
             Module = mod;
+            PortId = ((int)mod - (int)ModuleName.LP1 + 1).ToString();
             _controller = efem;
 			
 			TimerNotifyJobDone = new Stopwatch();
@@ -105,17 +107,6 @@ namespace Venus_RT.Devices.EFEM
 
             _enableThickness = false;// SC.GetValue<bool>("System.WaferThickness.EnableThickness");
 
-            EV.Subscribe(new EventItem("Event", Port1CassetteArrive, "Port1CassetteArrive"));
-            EV.Subscribe(new EventItem("Event", Port1CassetteRemoved, "Port1CassetteRemoved"));
-            EV.Subscribe(new EventItem("Event", Port1MappingComplete, "Port1MappingComplete"));
-            EV.Subscribe(new EventItem("Event", Port1MappingFailed, "Port1MappingFailed"));
-
-            EV.Subscribe(new EventItem("Event", Port2CassetteArrive, "Port2CassetteArrive"));
-            EV.Subscribe(new EventItem("Event", Port2CassetteRemoved, "Port2CassetteRemoved"));
-            EV.Subscribe(new EventItem("Event", Port2MappingComplete, "Port2MappingComplete"));
-            EV.Subscribe(new EventItem("Event", Port2MappingFailed, "Port2MappingFailed"));
-
-
             EV.Subscribe(new EventItem("Event", AlarmWaferProtrude, "Wafer protrude", EventLevel.Alarm, EventType.HostNotification));
 
 
@@ -244,6 +235,14 @@ namespace Venus_RT.Devices.EFEM
             _controller.Load(Module);
         }
 
+        public void LoadStart()
+        {
+            if(_lpCallBack!=null)
+            {
+                _lpCallBack.LoadStart();
+            }
+        }
+
         public void OnLoadFailed(string data)
         {
             IsError = true;
@@ -262,6 +261,10 @@ namespace Venus_RT.Devices.EFEM
             IsMapped = true;
 
             _faCallback.LoadComplete(this);
+            if(_lpCallBack!=null)
+            {
+                _lpCallBack.LoadComplete();
+            }
         }
         #endregion
 
@@ -293,6 +296,13 @@ namespace Venus_RT.Devices.EFEM
             _controller.Unload(Module);
         }
 
+        public void UnloadStart()
+        {
+            if(_lpCallBack!=null)
+            {
+                _lpCallBack.UnLoadStart();
+            }
+        }
         public void OnUnloadFailed(string data)
         {
             IsError = true;
@@ -632,22 +642,16 @@ namespace Venus_RT.Devices.EFEM
                             else
                             {
                                 resultNormal = false;
-                                //EV.PostAlarmLog(this.Module.ToString(), $"Found {st} Wafer on Slot {index + 1} {WaferSize}");
                             }
                         }
                     }
-
-                    var dvidMap = new SerializableDictionary<string, string>();
-                    dvidMap[DVIDName.SlotMap] = sWaferInfo;
-                    dvidMap[DVIDName.PortID] = Module == ModuleName.LP1 ? "1" : "2";
                     if (resultNormal)
                     {
-                        //EV.Notify(Module == ModuleName.LP1 ? Port1MappingComplete : Port2MappingComplete, dvidMap);
+                        _faCallback.CarrierSlotMapComplete(this);
                     }
                     else
                     {
-                        //EV.Notify(Module == ModuleName.LP1 ? Port1MappingFailed : Port2MappingFailed, dvidMap);
-                        //EV.PostAlarmLog(Module == ModuleName.LP1 ? "Port1" : "Port2", " MappingFailed");
+                        _faCallback.CarrierSlotMapFailed(this);
                     }
 
                     this.IsMapped = true;
@@ -690,9 +694,7 @@ namespace Venus_RT.Devices.EFEM
                             CarrierManager.Instance.DeleteCarrier(Module.ToString());
                             WaferManager.Instance.DeleteWafer(this.Module, 0, 25);
 
-                            SerializableDictionary<string, string> dvid = new SerializableDictionary<string, string>();
-                            dvid["PortID"] = mod == ModuleName.LP1 ? "1" : "2";
-                            EV.Notify(mod == ModuleName.LP1 ? Port1CassetteRemoved : Port2CassetteRemoved, dvid);
+                            _faCallback.CarrierRemoved(this);
                             JobDone = false;
                             _waferThicknessType = "";
                         }
@@ -703,11 +705,8 @@ namespace Venus_RT.Devices.EFEM
                         {
                             this.HasCassette = true;
                             CarrierManager.Instance.CreateCarrier(Module.ToString());
-                            EV.PostInfoLog(mod.ToString(), $"Cassette {WaferSize} arrived");
+                            _faCallback.CarrierArrived(this);                            
 
-                            //var dvid1 = new SerializableDictionary<string, string>();
-                            //dvid1["PortID"] = mod == ModuleName.LP1 ? "1" : "2";
-                            //EV.Notify(mod == ModuleName.LP1 ? Port1CassetteArrive : Port2CassetteArrive, dvid1);
                             JobDone = false;
                             _waferThicknessType = "";
                         }
@@ -854,350 +853,162 @@ namespace Venus_RT.Devices.EFEM
 
         sealed class LoadPortFACallback
         {
-            private const string Port1LoadComplete = "Port1LoadComplete";
-            private const string Port1LoadFailed = "Port1LoadFailed";
-            private const string Port1UnloadComplete = "Port1UnloadComplete";
-            private const string Port1UnloadFailed = "Port1UnloadFailed";
-
-            private const string Port1Clamped = "Port1Clamped";
-            private const string Port1Unclamped = "Port1Unclamped";
-            private const string Port1IDRead = "Port1IDRead";
-            private const string Port1ReadIDFailed = "Port1ReadIDFailed";
-            private const string Port1IDWrite = "Port1IDWrite";
-            private const string Port1WriteIDFailed = "Port1WriteIDFailed";
-            private const string Port1TagDataRead = "Port1TagDataRead";
-            private const string Port1ReadTagDataFailed = "Port1ReadTagDataFailed";
-            private const string Port1TagDataWrite = "Port1TagDataWrite";
-            private const string Port1WriteTagDataFailed = "Port1WriteTagDataFailed";
-
-            private const string Port2LoadComplete = "Port2LoadComplete";
-            private const string Port2LoadFailed = "Port2LoadFailed";
-            private const string Port2UnloadComplete = "Port2UnloadComplete";
-            private const string Port2UnloadFailed = "Port2UnloadFailed";
-
-            private const string Port2Clamped = "Port2Clamped";
-            private const string Port2Unclamped = "Port2Unclamped";
-            private const string Port2IDRead = "Port2IDRead";
-            private const string Port2ReadIDFailed = "Port2ReadIDFailed";
-            private const string Port2IDWrite = "Port2IDWrite";
-            private const string Port2WriteIDFailed = "Port2WriteIDFailed";
-            private const string Port2TagDataRead = "Port2TagDataRead";
-            private const string Port2ReadTagDataFailed = "Port2ReadTagDataFailed";
-            private const string Port2TagDataWrite = "Port2TagDataWrite";
-            private const string Port2WriteTagDataFailed = "Port2WriteTagDataFailed";
-
-            private const string Port3LoadComplete = "Port3LoadComplete";
-            private const string Port3LoadFailed = "Port3LoadFailed";
-            private const string Port3UnloadComplete = "Port3UnloadComplete";
-            private const string Port3UnloadFailed = "Port3UnloadFailed";
-
-            private const string Port3Clamped = "Port3Clamped";
-            private const string Port3Unclamped = "Port3Unclamped";
-            private const string Port3IDRead = "Port3IDRead";
-            private const string Port3ReadIDFailed = "Port3ReadIDFailed";
-            private const string Port3IDWrite = "Port3IDWrite";
-            private const string Port3WriteIDFailed = "Port3WriteIDFailed";
-            private const string Port3TagDataRead = "Port3TagDataRead";
-            private const string Port3ReadTagDataFailed = "Port3ReadTagDataFailed";
-            private const string Port3TagDataWrite = "Port3TagDataWrite";
-            private const string Port3WriteTagDataFailed = "Port3WriteTagDataFailed";
-            private Dictionary<ModuleName, string> PortLoadComplete = new Dictionary<ModuleName, string>()
-        {
-            {ModuleName.LP1, Port1LoadComplete},
-            {ModuleName.LP2, Port2LoadComplete},
-            {ModuleName.LP3, Port3LoadComplete},
-        };
+            private string CARRIER_ARRIVED = "CARRIER_ARRIVED";
+            private string CARRIER_REMOVED = "CARRIER_REMOVED";
+            private string SLOT_MAP_AVAILABLE = "SLOT_MAP_AVAILABLE";
+            private string SLOT_MAP_FAILED = "SLOT_MAP_FAILED";
+            private const string CARRIER_LOADED = "CARRIER_LOADED";
+            private const string PortLoadFailed = "PortLoadFailed";
+            private const string CARRIER_UNLOADED = "CARRIER_UNLOADED";
+            private const string PortUnloadFailed = "PortUnloadFailed";
+            private const string PortClamped = "PortClamped";
+            private const string PortUnclamped = "PortUnclamped";
+            private const string CARRIER_ID_READ = "CARRIER_ID_READ";
+            private const string PortReadIDFailed = "PortReadIDFailed";
+            private const string PortIDWrite = "PortIDWrite";
+            private const string PortWriteIDFailed = "PortWriteIDFailed";
+            private const string PortTagDataRead = "PortTagDataRead";
+            private const string PortReadTagDataFailed = "PortReadTagDataFailed";
+            private const string PortTagDataWrite = "PortTagDataWrite";
+            private const string PortWriteTagDataFailed = "PortWriteTagDataFailed";
 
-            private Dictionary<ModuleName, string> PortLoadFailed = new Dictionary<ModuleName, string>()
-        {
-            {ModuleName.LP1, Port1LoadFailed},
-            {ModuleName.LP2, Port2LoadFailed},
-            {ModuleName.LP3, Port3LoadFailed},
-        };
 
-            private Dictionary<ModuleName, string> PortUnloadComplete = new Dictionary<ModuleName, string>()
-        {
-            {ModuleName.LP1, Port1UnloadComplete},
-            {ModuleName.LP2, Port2UnloadComplete},
-            {ModuleName.LP3, Port3UnloadComplete},
-        };
-
-            private Dictionary<ModuleName, string> PortUnloadFailed = new Dictionary<ModuleName, string>()
-        {
-            {ModuleName.LP1, Port1UnloadFailed},
-            {ModuleName.LP2, Port2UnloadFailed},
-            {ModuleName.LP3, Port3UnloadFailed},
-        };
-            private Dictionary<ModuleName, string> PortClamped = new Dictionary<ModuleName, string>()
-        {
-            {ModuleName.LP1, Port1Clamped},
-            {ModuleName.LP2, Port2Clamped},
-            {ModuleName.LP3, Port3Clamped},
-        };
-            private Dictionary<ModuleName, string> PortUnclamped = new Dictionary<ModuleName, string>()
-        {
-            {ModuleName.LP1, Port1Unclamped},
-            {ModuleName.LP2, Port2Unclamped},
-            {ModuleName.LP3, Port3Unclamped},
-        };
-            private Dictionary<ModuleName, string> PortIDRead = new Dictionary<ModuleName, string>()
-        {
-            {ModuleName.LP1, Port1IDRead},
-            {ModuleName.LP2, Port2IDRead},
-            {ModuleName.LP3, Port3IDRead},
-        };
-            private Dictionary<ModuleName, string> PortReadIDFailed = new Dictionary<ModuleName, string>()
-        {
-            {ModuleName.LP1, Port1ReadIDFailed},
-            {ModuleName.LP2, Port2ReadIDFailed},
-            {ModuleName.LP3, Port3ReadIDFailed},
-        };
-            private Dictionary<ModuleName, string> PortIDWrite = new Dictionary<ModuleName, string>()
-            {
-                {ModuleName.LP1, Port1IDWrite},
-                {ModuleName.LP2, Port2IDWrite},
-                {ModuleName.LP3, Port3IDWrite},
-            };
-            private Dictionary<ModuleName, string> PortWriteIDFailed = new Dictionary<ModuleName, string>()
+            public LoadPortFACallback()
             {
-                {ModuleName.LP1, Port1WriteIDFailed},
-                {ModuleName.LP2, Port2WriteIDFailed},
-                {ModuleName.LP3, Port3WriteIDFailed},
-            };
+                EV.Subscribe(new EventItem("Event", CARRIER_ARRIVED, "Carrier Arrived"));
+                EV.Subscribe(new EventItem("Event", CARRIER_REMOVED, "Carrier Removed"));
+                EV.Subscribe(new EventItem("Event", SLOT_MAP_AVAILABLE, "Slot map available"));
+                EV.Subscribe(new EventItem("Event", SLOT_MAP_FAILED, "Slot map failed"));
+                EV.Subscribe(new EventItem("Event", CARRIER_LOADED, "Carrier Loaded"));
+                EV.Subscribe(new EventItem("Event", PortLoadFailed, PortLoadFailed));
+                EV.Subscribe(new EventItem("Event", CARRIER_UNLOADED, "Carrier Unloaded"));
+                EV.Subscribe(new EventItem("Event", PortUnloadFailed, PortUnloadFailed));
+                EV.Subscribe(new EventItem("Event", PortClamped, "Port Clamped"));
+                EV.Subscribe(new EventItem("Event", PortUnclamped, PortUnclamped));
+                EV.Subscribe(new EventItem("Event", CARRIER_ID_READ, "Carrier Id Read"));
+                EV.Subscribe(new EventItem("Event", PortReadIDFailed, PortReadIDFailed));
+                EV.Subscribe(new EventItem("Event", PortIDWrite, PortIDWrite));
+                EV.Subscribe(new EventItem("Event", PortWriteIDFailed, PortWriteIDFailed));
+                EV.Subscribe(new EventItem("Event", PortTagDataRead, PortTagDataRead));
+                EV.Subscribe(new EventItem("Event", PortReadTagDataFailed, PortReadTagDataFailed));
+                EV.Subscribe(new EventItem("Event", PortTagDataWrite, PortTagDataWrite));
+                EV.Subscribe(new EventItem("Event", PortWriteTagDataFailed, PortWriteTagDataFailed));
+            }
 
-            private Dictionary<ModuleName, string> PortTagDataRead = new Dictionary<ModuleName, string>()
-            {
-                {ModuleName.LP1, Port1TagDataRead},
-                {ModuleName.LP2, Port2TagDataRead},
-                 {ModuleName.LP3, Port3TagDataRead},
-            };
-            private Dictionary<ModuleName, string> PortReadTagDataFailed = new Dictionary<ModuleName, string>()
-            {
-                {ModuleName.LP1, Port1ReadTagDataFailed},
-                {ModuleName.LP2, Port2ReadTagDataFailed},
-                {ModuleName.LP3, Port3ReadTagDataFailed},
-            };
-            private Dictionary<ModuleName, string> PortTagDataWrite = new Dictionary<ModuleName, string>()
-            {
-                {ModuleName.LP1, Port1TagDataWrite},
-                {ModuleName.LP2, Port2TagDataWrite},
-                {ModuleName.LP3, Port3TagDataWrite},
-            };
-            private Dictionary<ModuleName, string> PortWriteTagDataFailed = new Dictionary<ModuleName, string>()
+
+            public void CarrierArrived(Loadport lp)
             {
-                {ModuleName.LP1, Port1WriteTagDataFailed},
-                {ModuleName.LP2, Port2WriteTagDataFailed},
-                {ModuleName.LP3, Port3WriteTagDataFailed},
-            };
+                SerializableDictionary<string, string> dvid = new SerializableDictionary<string, string>();
+                dvid["PortID"] = lp.PortId;
 
-            private Dictionary<ModuleName, string> PortId = new Dictionary<ModuleName, string>()
-        {
-            {ModuleName.LP1, "1"},
-            {ModuleName.LP2, "2"},
-            {ModuleName.LP3, "3"},
-        };
+                EV.Notify(CARRIER_ARRIVED, dvid);
+            }
 
-            public LoadPortFACallback()
+            public void CarrierRemoved(Loadport lp)
             {
-                EV.Subscribe(new EventItem("Event", Port1LoadComplete, Port1LoadComplete));
-                EV.Subscribe(new EventItem("Event", Port1LoadFailed, Port1LoadFailed));
-                EV.Subscribe(new EventItem("Event", Port1UnloadComplete, Port1UnloadComplete));
-                EV.Subscribe(new EventItem("Event", Port1UnloadFailed, Port1UnloadFailed));
-
-                EV.Subscribe(new EventItem("Event", Port1Clamped, Port1Clamped));
-                EV.Subscribe(new EventItem("Event", Port1Unclamped, Port1Unclamped));
-                EV.Subscribe(new EventItem("Event", Port1IDRead, Port1IDRead));
-                EV.Subscribe(new EventItem("Event", Port1ReadIDFailed, Port1ReadIDFailed));
-                EV.Subscribe(new EventItem("Event", Port1IDWrite, Port1IDWrite));
-                EV.Subscribe(new EventItem("Event", Port1WriteIDFailed, Port1WriteIDFailed));
-                EV.Subscribe(new EventItem("Event", Port1TagDataRead, Port1TagDataRead));
-                EV.Subscribe(new EventItem("Event", Port1ReadTagDataFailed, Port1ReadTagDataFailed));
-                EV.Subscribe(new EventItem("Event", Port1TagDataWrite, Port1TagDataWrite));
-                EV.Subscribe(new EventItem("Event", Port1WriteTagDataFailed, Port1WriteTagDataFailed));
-
-                EV.Subscribe(new EventItem("Event", Port2LoadComplete, Port2LoadComplete));
-                EV.Subscribe(new EventItem("Event", Port2LoadFailed, Port2LoadFailed));
-                EV.Subscribe(new EventItem("Event", Port2UnloadComplete, Port2UnloadComplete));
-                EV.Subscribe(new EventItem("Event", Port2UnloadFailed, Port2UnloadFailed));
-
-                EV.Subscribe(new EventItem("Event", Port2Clamped, Port2Clamped));
-                EV.Subscribe(new EventItem("Event", Port2Unclamped, Port2Unclamped));
-                EV.Subscribe(new EventItem("Event", Port2IDRead, Port2IDRead));
-                EV.Subscribe(new EventItem("Event", Port2ReadIDFailed, Port2ReadIDFailed));
-                EV.Subscribe(new EventItem("Event", Port2IDWrite, Port2IDWrite));
-                EV.Subscribe(new EventItem("Event", Port2WriteIDFailed, Port2WriteIDFailed));
-                EV.Subscribe(new EventItem("Event", Port2TagDataRead, Port2TagDataRead));
-                EV.Subscribe(new EventItem("Event", Port2ReadTagDataFailed, Port2ReadTagDataFailed));
-                EV.Subscribe(new EventItem("Event", Port2TagDataWrite, Port2TagDataWrite));
-                EV.Subscribe(new EventItem("Event", Port2WriteTagDataFailed, Port2WriteTagDataFailed));
-
-                EV.Subscribe(new EventItem("Event", Port3LoadComplete, Port3LoadComplete));
-                EV.Subscribe(new EventItem("Event", Port3LoadFailed, Port3LoadFailed));
-                EV.Subscribe(new EventItem("Event", Port3UnloadComplete, Port3UnloadComplete));
-                EV.Subscribe(new EventItem("Event", Port3UnloadFailed, Port3UnloadFailed));
-
-                EV.Subscribe(new EventItem("Event", Port3Clamped, Port3Clamped));
-                EV.Subscribe(new EventItem("Event", Port3Unclamped, Port3Unclamped));
-                EV.Subscribe(new EventItem("Event", Port3IDRead, Port3IDRead));
-                EV.Subscribe(new EventItem("Event", Port3ReadIDFailed, Port3ReadIDFailed));
-                EV.Subscribe(new EventItem("Event", Port3IDWrite, Port3IDWrite));
-                EV.Subscribe(new EventItem("Event", Port3WriteIDFailed, Port3WriteIDFailed));
-                EV.Subscribe(new EventItem("Event", Port3TagDataRead, Port3TagDataRead));
-                EV.Subscribe(new EventItem("Event", Port3ReadTagDataFailed, Port3ReadTagDataFailed));
-                EV.Subscribe(new EventItem("Event", Port3TagDataWrite, Port3TagDataWrite));
-                EV.Subscribe(new EventItem("Event", Port3WriteTagDataFailed, Port3WriteTagDataFailed));
+                SerializableDictionary<string, string> dvid = new SerializableDictionary<string, string>();
+                dvid["PortID"] = lp.PortId;
+                dvid["CarrierID"] = lp.CarrierId ?? "";
+                EV.Notify(CARRIER_REMOVED, dvid);
             }
 
-            public void LoadComplete(Loadport lp)
+            public void CarrierSlotMapComplete(Loadport lp)
             {
-                ModuleName moduleName = lp.Module;
+                SerializableDictionary<string, string> dvid = new SerializableDictionary<string, string>();
 
-                EV.Notify(PortLoadComplete[moduleName], new SerializableDictionary<string, string>()
-            {
-                {DVIDName.PortID, PortId[lp.Module] },
-            });
+                dvid["SlotMap"] = lp.SlotMap;
+                dvid["PortID"] = lp.PortId;
+                dvid["CarrierID"] = lp.CarrierId ?? "";
+
+                EV.Notify(SLOT_MAP_AVAILABLE, dvid);
             }
 
-            public void LoadFailed(Loadport lp)
+            public void CarrierSlotMapFailed(Loadport lp)
             {
-                ModuleName moduleName = lp.Module;
 
-                EV.Notify(PortLoadFailed[moduleName], new SerializableDictionary<string, string>()
-            {
-                {DVIDName.PortID, PortId[lp.Module] },
-            });
             }
-
-            public void UnloadComplete(Loadport lp)
+            public void LoadComplete(Loadport lp)
             {
                 ModuleName moduleName = lp.Module;
+                var dvid = new SerializableDictionary<string, string>
+                {
+                    ["CarrierID"] = lp.CarrierId ?? "",
+                    ["PortID"] = lp.PortId.ToString()
+                };
+                EV.Notify(CARRIER_LOADED, dvid);
+            }
 
-                EV.Notify(PortUnloadComplete[moduleName], new SerializableDictionary<string, string>()
+            public void LoadFailed(Loadport lp)
             {
-                {DVIDName.PortID, PortId[lp.Module] },
-            });
             }
 
-            public void UnloadFailed(Loadport lp)
+            public void UnloadComplete(Loadport lp)
             {
                 ModuleName moduleName = lp.Module;
+                var dvid = new SerializableDictionary<string, string>
+                {
+                    ["CarrierID"] = lp.CarrierId ?? "",
+                    ["PortID"] = lp.PortId.ToString()
+                };
+                EV.Notify(CARRIER_UNLOADED, dvid);
+            }
 
-                EV.Notify(PortUnloadFailed[moduleName], new SerializableDictionary<string, string>()
+            public void UnloadFailed(Loadport lp)
             {
-                {DVIDName.PortID, PortId[lp.Module] },
-            });
+               
             }
 
             public void Clamped(Loadport lp)
             {
-                ModuleName moduleName = lp.Module;
-
-                EV.Notify(PortClamped[moduleName], new SerializableDictionary<string, string>()
-            {
-                {DVIDName.PortID, PortId[lp.Module] },
-            });
+               
             }
 
             public void Unclamped(Loadport lp)
             {
-                ModuleName moduleName = lp.Module;
-
-                EV.Notify(PortUnclamped[moduleName], new SerializableDictionary<string, string>()
-            {
-                {DVIDName.PortID, PortId[lp.Module] },
-            });
+               
             }
 
             public void IDRead(Loadport lp)
             {
-                ModuleName moduleName = lp.Module;
-
-                EV.Notify(PortIDRead[moduleName], new SerializableDictionary<string, string>()
-            {
-                {DVIDName.PortID, PortId[lp.Module] },
-                {DVIDName.CarrierID, lp.CarrierId },
-                {DVIDName.LotID, lp.LotId },
-            });
+                
             }
 
             public void ReadIDFailed(Loadport lp)
             {
-                ModuleName moduleName = lp.Module;
-
-                EV.Notify(PortReadIDFailed[moduleName], new SerializableDictionary<string, string>()
-            {
-                {DVIDName.PortID, PortId[lp.Module] },
-            });
+                
             }
 
 
             public void IDWrite(Loadport lp)
             {
-                ModuleName moduleName = lp.Module;
-
-                EV.Notify(PortIDWrite[moduleName], new SerializableDictionary<string, string>()
-                {
-                    {DVIDName.PortID, PortId[lp.Module] },
-                    {DVIDName.CarrierID, lp.CarrierId },
-                });
+               
             }
 
             public void WriteIDFailed(Loadport lp)
             {
-                ModuleName moduleName = lp.Module;
-
-                EV.Notify(PortWriteIDFailed[moduleName], new SerializableDictionary<string, string>()
-                {
-                    {DVIDName.PortID, PortId[lp.Module] },
-                });
+                
             }
 
 
 
             public void TagDataRead(Loadport lp)
             {
-                ModuleName moduleName = lp.Module;
-
-                EV.Notify(PortTagDataRead[moduleName], new SerializableDictionary<string, string>()
-                {
-                    {DVIDName.PortID, PortId[lp.Module] },
-                    {DVIDName.TagData, lp.SmartTag },
-                    {DVIDName.CarrierID, lp.CarrierId },
-                    {DVIDName.LotID, lp.LotId },
-                });
+                
             }
 
             public void ReadTagDataFailed(Loadport lp)
             {
-                ModuleName moduleName = lp.Module;
-
-                EV.Notify(PortReadTagDataFailed[moduleName], new SerializableDictionary<string, string>()
-                {
-                    {DVIDName.PortID, PortId[lp.Module] },
-                });
             }
 
 
             public void TagDataWrite(Loadport lp)
             {
-                ModuleName moduleName = lp.Module;
-
-                EV.Notify(PortTagDataWrite[moduleName], new SerializableDictionary<string, string>()
-                {
-                    {DVIDName.PortID, PortId[lp.Module] },
-                    {DVIDName.CarrierID, lp.CarrierId },
-                    {DVIDName.TagData, lp.SmartTag },
-                });
+                
             }
 
             public void WriteTagDataFailed(Loadport lp)
             {
-                ModuleName moduleName = lp.Module;
-
-                EV.Notify(PortWriteTagDataFailed[moduleName], new SerializableDictionary<string, string>()
-                {
-                    {DVIDName.PortID, PortId[lp.Module] },
-                });
+              
             }
         }
     }

+ 33 - 162
Venus/Venus_RT/Modules/Autotransfer_LP_FA.cs

@@ -32,122 +32,17 @@ namespace Venus_RT.Modules
     }
     public class SchedulerFACallback : ISchedulerFACallback
     {
-        private const string Port1JobStarted = "Port1JobStarted";
-        private const string Port1JobStopped = "Port1JobStopped";
-        private const string Port1JobPaused = "Port1JobPaused";
-        private const string Port1JobResumed = "Port1JobResumed";
-        private const string Port1JobAborted = "Port1JobAborted";
-        private const string Port1JobFinished = "Port1JobFinished";
-        private const string Port1JobFailed = "Port1JobFailed";
-        private const string Port1SequenceSelected = "Port1SequenceSelected";
-        private const string Port1SequenceSelectFailed = "Port1SequenceSelectFailed";
-        private const string Port1JobWaferStart = "Port1JobWaferStart";
-        private const string Port1JobWaferEnd = "Port1JobWaferEnd";
-
-        private const string Port2JobStarted = "Port2JobStarted";
-        private const string Port2JobStopped = "Port2JobStopped";
-        private const string Port2JobPaused = "Port2JobPaused";
-        private const string Port2JobResumed = "Port2JobResumed";
-        private const string Port2JobAborted = "Port2JobAborted";
-        private const string Port2JobFinished = "Port2JobFinished";
-        private const string Port2JobFailed = "Port2JobFailed";
-        private const string Port2SequenceSelected = "Port2SequenceSelected";
-        private const string Port2SequenceSelectFailed = "Port2SequenceSelectFailed";
-        private const string Port2JobWaferStart = "Port2JobWaferStart";
-        private const string Port2JobWaferEnd = "Port2JobWaferEnd";
-
-        private const string Port3JobStarted = "Port3JobStarted";
-        private const string Port3JobStopped = "Port3JobStopped";
-        private const string Port3JobPaused = "Port3JobPaused";
-        private const string Port3JobResumed = "Port3JobResumed";
-        private const string Port3JobAborted = "Port3JobAborted";
-        private const string Port3JobFinished = "Port3JobFinished";
-        private const string Port3JobFailed = "Port3JobFailed";
-        private const string Port3SequenceSelected = "Port3SequenceSelected";
-        private const string Port3SequenceSelectFailed = "Port3SequenceSelectFailed";
-        private const string Port3JobWaferStart = "Port3JobWaferStart";
-        private const string Port3JobWaferEnd = "Port3JobWaferEnd";
-        private Dictionary<ModuleName, string> PortJobWaferStart = new Dictionary<ModuleName, string>()
-        {
-            {ModuleName.LP1, Port1JobWaferStart},
-            {ModuleName.LP2, Port2JobWaferStart},
-            {ModuleName.LP3, Port3JobWaferStart},
-
-            {ModuleName.VCE1, Port1JobWaferStart},
-        };
-
-        private Dictionary<ModuleName, string> PortJobWaferEnd = new Dictionary<ModuleName, string>()
-        {
-            {ModuleName.LP1, Port1JobWaferEnd},
-            {ModuleName.LP2, Port2JobWaferEnd},
-            {ModuleName.LP3, Port3JobWaferEnd},
-            {ModuleName.VCE1, Port1JobWaferEnd},
-        };
-
-        private Dictionary<ModuleName, string> PortJobStarted = new Dictionary<ModuleName, string>()
-        {
-            {ModuleName.LP1, Port1JobStarted},
-            {ModuleName.LP2, Port2JobStarted},
-            {ModuleName.LP3, Port3JobStarted},
-            {ModuleName.VCE1, Port1JobStarted},
-        };
-
-        private Dictionary<ModuleName, string> PortJobStopped = new Dictionary<ModuleName, string>()
-        {
-            {ModuleName.LP1, Port1JobStopped},
-            {ModuleName.LP2, Port2JobStopped},
-             {ModuleName.LP3, Port3JobStopped},
-            {ModuleName.VCE1, Port1JobStopped},
-        };
-        private Dictionary<ModuleName, string> PortJobPaused = new Dictionary<ModuleName, string>()
-        {
-            {ModuleName.LP1, Port1JobPaused},
-            {ModuleName.LP2, Port2JobPaused},
-            {ModuleName.LP3, Port3JobPaused},
-            {ModuleName.VCE1, Port1JobPaused},
-        };
-        private Dictionary<ModuleName, string> PortJobResumed = new Dictionary<ModuleName, string>()
-        {
-            {ModuleName.LP1, Port1JobResumed},
-            {ModuleName.LP2, Port2JobResumed},
-            {ModuleName.LP3, Port3JobResumed},
-            {ModuleName.VCE1, Port1JobResumed},
-        };
-        private Dictionary<ModuleName, string> PortJobAborted = new Dictionary<ModuleName, string>()
-        {
-            {ModuleName.LP1, Port1JobAborted},
-            {ModuleName.LP2, Port2JobAborted},
-            {ModuleName.LP3, Port3JobAborted},
-            {ModuleName.VCE1, Port1JobAborted},
-        };
-        private Dictionary<ModuleName, string> PortJobFinished = new Dictionary<ModuleName, string>()
-        {
-            {ModuleName.LP1, Port1JobFinished},
-            {ModuleName.LP2, Port2JobFinished},
-            {ModuleName.LP3, Port3JobFinished},
-            {ModuleName.VCE1, Port1JobFinished},
-        };
-        private Dictionary<ModuleName, string> PortJobFailed = new Dictionary<ModuleName, string>()
-        {
-            {ModuleName.LP1, Port1JobFailed},
-            {ModuleName.LP2, Port2JobFailed},
-            {ModuleName.LP3, Port3JobFailed},
-            {ModuleName.VCE1, Port1JobFailed},
-        };
-        private Dictionary<ModuleName, string> PortSequenceSelected = new Dictionary<ModuleName, string>()
-        {
-            {ModuleName.LP1, Port1SequenceSelected},
-            {ModuleName.LP2, Port2SequenceSelected},
-            {ModuleName.LP3, Port3SequenceSelected},
-            {ModuleName.VCE1, Port1SequenceSelected},
-        };
-        private Dictionary<ModuleName, string> PortSequenceSelectFailed = new Dictionary<ModuleName, string>()
-        {
-            {ModuleName.LP1, Port1SequenceSelectFailed},
-            {ModuleName.LP2, Port2SequenceSelectFailed},
-            {ModuleName.LP3, Port3SequenceSelectFailed},
-            {ModuleName.VCE1, Port1SequenceSelectFailed},
-        };
+        private const string PortJobStarted = "PortJobStarted";
+        private const string PortJobStopped = "PortJobStopped";
+        private const string PortJobPaused = "PortJobPaused";
+        private const string PortJobResumed = "PortJobResumed";
+        private const string PortJobAborted = "PortJobAborted";
+        private const string PortJobFinished = "PortJobFinished";
+        private const string PortJobFailed = "PortJobFailed";
+        private const string PortSequenceSelected = "PortPPSelected";
+        private const string PortSequenceSelectFailed = "PortPPSelectFailed";
+        private const string PortJobWaferStart = "PortJobWaferStart";
+        private const string PortJobWaferEnd = "PortJobWaferEnd";
 
         private Dictionary<ModuleName, string> PortId = new Dictionary<ModuleName, string>()
         {
@@ -158,47 +53,23 @@ namespace Venus_RT.Modules
         };
         public SchedulerFACallback()
         {
-            EV.Subscribe(new EventItem("Event", Port1JobStarted, Port1JobStarted));
-            EV.Subscribe(new EventItem("Event", Port1JobStopped, Port1JobStopped));
-            EV.Subscribe(new EventItem("Event", Port1JobPaused, Port1JobPaused));
-            EV.Subscribe(new EventItem("Event", Port1JobResumed, Port1JobResumed));
-            EV.Subscribe(new EventItem("Event", Port1JobAborted, Port1JobAborted));
-            EV.Subscribe(new EventItem("Event", Port1JobFinished, Port1JobFinished));
-            EV.Subscribe(new EventItem("Event", Port1JobFailed, Port1JobFailed));
-            EV.Subscribe(new EventItem("Event", Port1SequenceSelected, Port1SequenceSelected));
-            EV.Subscribe(new EventItem("Event", Port1SequenceSelectFailed, Port1SequenceSelectFailed));
-            EV.Subscribe(new EventItem("Event", Port1JobWaferStart, Port1JobWaferStart));
-            EV.Subscribe(new EventItem("Event", Port1JobWaferEnd, Port1JobWaferEnd));
-
-            EV.Subscribe(new EventItem("Event", Port2JobStarted, Port2JobStarted));
-            EV.Subscribe(new EventItem("Event", Port2JobStopped, Port2JobStopped));
-            EV.Subscribe(new EventItem("Event", Port2JobPaused, Port2JobPaused));
-            EV.Subscribe(new EventItem("Event", Port2JobResumed, Port2JobResumed));
-            EV.Subscribe(new EventItem("Event", Port2JobAborted, Port2JobAborted));
-            EV.Subscribe(new EventItem("Event", Port2JobFinished, Port2JobFinished));
-            EV.Subscribe(new EventItem("Event", Port2JobFailed, Port2JobFailed));
-            EV.Subscribe(new EventItem("Event", Port2SequenceSelected, Port2SequenceSelected));
-            EV.Subscribe(new EventItem("Event", Port2SequenceSelectFailed, Port2SequenceSelectFailed));
-            EV.Subscribe(new EventItem("Event", Port2JobWaferStart, Port2JobWaferStart));
-            EV.Subscribe(new EventItem("Event", Port2JobWaferEnd, Port2JobWaferEnd));
-
-            EV.Subscribe(new EventItem("Event", Port3JobStarted, Port3JobStarted));
-            EV.Subscribe(new EventItem("Event", Port3JobStopped, Port3JobStopped));
-            EV.Subscribe(new EventItem("Event", Port3JobPaused, Port3JobPaused));
-            EV.Subscribe(new EventItem("Event", Port3JobResumed, Port3JobResumed));
-            EV.Subscribe(new EventItem("Event", Port3JobAborted, Port3JobAborted));
-            EV.Subscribe(new EventItem("Event", Port3JobFinished, Port3JobFinished));
-            EV.Subscribe(new EventItem("Event", Port3JobFailed, Port3JobFailed));
-            EV.Subscribe(new EventItem("Event", Port3SequenceSelected, Port3SequenceSelected));
-            EV.Subscribe(new EventItem("Event", Port3SequenceSelectFailed, Port3SequenceSelectFailed));
-            EV.Subscribe(new EventItem("Event", Port3JobWaferStart, Port3JobWaferStart));
-            EV.Subscribe(new EventItem("Event", Port3JobWaferEnd, Port3JobWaferEnd));
+            EV.Subscribe(new EventItem("Event", PortJobStarted, PortJobStarted));
+            EV.Subscribe(new EventItem("Event", PortJobStopped, PortJobStopped));
+            EV.Subscribe(new EventItem("Event", PortJobPaused, PortJobPaused));
+            EV.Subscribe(new EventItem("Event", PortJobResumed, PortJobResumed));
+            EV.Subscribe(new EventItem("Event", PortJobAborted, PortJobAborted));
+            EV.Subscribe(new EventItem("Event", PortJobFinished, PortJobFinished));
+            EV.Subscribe(new EventItem("Event", PortJobFailed, PortJobFailed));
+            EV.Subscribe(new EventItem("Event", PortSequenceSelected, PortSequenceSelected));
+            EV.Subscribe(new EventItem("Event", PortSequenceSelectFailed, PortSequenceSelectFailed));
+            EV.Subscribe(new EventItem("Event", PortJobWaferStart, PortJobWaferStart));
+            EV.Subscribe(new EventItem("Event", PortJobWaferEnd, PortJobWaferEnd));
         }
         public void JobCreated(ControlJobInfo cj, ProcessJobInfo pj)
         {
             ModuleName module = ModuleHelper.Converter(cj.Module);
 
-            EV.Notify(PortSequenceSelected[module], new SerializableDictionary<string, string>()
+            EV.Notify(PortSequenceSelected, new SerializableDictionary<string, string>()
             {
                 {DVIDName.LotID,  pj.LotName},
                 {DVIDName.JobID,  pj.ControlJobName},
@@ -210,7 +81,7 @@ namespace Venus_RT.Modules
         {
             ModuleName moduleName = ModuleHelper.Converter(module);
 
-            EV.Notify(PortSequenceSelectFailed[moduleName], new SerializableDictionary<string, string>()
+            EV.Notify(PortSequenceSelectFailed, new SerializableDictionary<string, string>()
             {
                 {DVIDName.LotID,  lotID},
                 {DVIDName.JobID,  jobID},
@@ -221,7 +92,7 @@ namespace Venus_RT.Modules
         public void JobStarted(ControlJobInfo cj,ProcessJobInfo pj)
         {
             ModuleName module= ModuleHelper.Converter(cj.Module);
-            EV.Notify(PortJobStarted[module], new SerializableDictionary<string, string>()
+            EV.Notify(PortJobStarted, new SerializableDictionary<string, string>()
             {
                 {DVIDName.LotID,  pj.LotName},
                 {DVIDName.JobID,  pj.ControlJobName},
@@ -234,7 +105,7 @@ namespace Venus_RT.Modules
         {
             ModuleName module = ModuleHelper.Converter(cj.Module);
 
-            EV.Notify(PortJobStopped[module], new SerializableDictionary<string, string>()
+            EV.Notify(PortJobStopped, new SerializableDictionary<string, string>()
             {
                 {DVIDName.LotID,  pj.LotName},
                 {DVIDName.JobID,  pj.ControlJobName},
@@ -246,7 +117,7 @@ namespace Venus_RT.Modules
         {
             ModuleName module = ModuleHelper.Converter(cj.Module);
 
-            EV.Notify(PortJobPaused[module], new SerializableDictionary<string, string>()
+            EV.Notify(PortJobPaused, new SerializableDictionary<string, string>()
             {
                 {DVIDName.LotID,  pj.LotName},
                 {DVIDName.JobID,  pj.ControlJobName},
@@ -258,7 +129,7 @@ namespace Venus_RT.Modules
         {
             ModuleName module = ModuleHelper.Converter(cj.Module);
 
-            EV.Notify(PortJobResumed[module], new SerializableDictionary<string, string>()
+            EV.Notify(PortJobResumed, new SerializableDictionary<string, string>()
             {
                 {DVIDName.LotID,  pj.LotName},
                 {DVIDName.JobID,  pj.ControlJobName},
@@ -271,7 +142,7 @@ namespace Venus_RT.Modules
         {
             ModuleName module = ModuleHelper.Converter(cj.Module);
 
-            EV.Notify(PortJobAborted[module], new SerializableDictionary<string, string>()
+            EV.Notify(PortJobAborted, new SerializableDictionary<string, string>()
             {
                 {DVIDName.LotID,  cj.LotName},
                 {DVIDName.JobID,  cj.Name},
@@ -284,7 +155,7 @@ namespace Venus_RT.Modules
             ModuleName module = ModuleHelper.Converter(cj.Module);
 
             int count = pj.SlotWafers.Count;
-            EV.Notify(PortJobFinished[module], new SerializableDictionary<string, string>()
+            EV.Notify(PortJobFinished, new SerializableDictionary<string, string>()
             {
                 {DVIDName.LotID,  pj.LotName},
                 {DVIDName.JobID,  pj.ControlJobName},
@@ -298,7 +169,7 @@ namespace Venus_RT.Modules
         {
             ModuleName module = ModuleHelper.Converter(cj.Module);
 
-            EV.Notify(PortJobFailed[module], new SerializableDictionary<string, string>()
+            EV.Notify(PortJobFailed, new SerializableDictionary<string, string>()
             {
                 {DVIDName.LotID,  pj.LotName},
                 {DVIDName.JobID,  pj.ControlJobName},
@@ -311,7 +182,7 @@ namespace Venus_RT.Modules
         {
             ModuleName module = ModuleHelper.Converter(cj.Module);
 
-            EV.Notify(PortJobWaferStart[module], new SerializableDictionary<string, string>()
+            EV.Notify(PortJobWaferStart, new SerializableDictionary<string, string>()
             {
                 {DVIDName.LotID,  pj.LotName},
                 {DVIDName.JobID,  pj.ControlJobName},
@@ -327,7 +198,7 @@ namespace Venus_RT.Modules
 
             WaferInfo wafer = WaferManager.Instance.GetWafer(ModuleHelper.Converter(module1), slotID);
 
-            EV.Notify(PortJobWaferEnd[module], new SerializableDictionary<string, string>()
+            EV.Notify(PortJobWaferEnd, new SerializableDictionary<string, string>()
             {
                 {DVIDName.LotID,  pj.LotName},
                 {DVIDName.JobID,  pj.ControlJobName},

+ 8 - 0
Venus/Venus_RT/Modules/LPs/LoadPortModule.cs

@@ -439,6 +439,10 @@ namespace Venus_RT.Modules.LPs
             RState ret = StartRoutine(_unload);
             if (ret == RState.Failed || ret == RState.End)
                 return false;
+            if(ret == RState.Running)
+            {
+                _lpDevice.UnloadStart();
+            }
             return ret == RState.Running;
         }
 
@@ -447,6 +451,10 @@ namespace Venus_RT.Modules.LPs
             RState ret = StartRoutine(_load);
             if (ret == RState.Failed || ret == RState.End)
                 return false;
+            if (ret == RState.Running)
+            {
+                _lpDevice.LoadStart();
+            }
             return ret == RState.Running;
         }
 

+ 2 - 1
Venus/Venus_Simulator/Devices/EfemSimulator.cs

@@ -313,7 +313,8 @@ namespace Venus_Simulator.Devices
             Random _rd = new Random();
             for (int i = 0; i < _slotMap.Length; i++)
             {
-                _slotMap[i] = (i % 9).ToString();// _rd.Next(0, 10) < 6 ? "0" : "1";
+                //_slotMap[i] = (i % 9).ToString();
+                _slotMap[i]= _rd.Next(0, 10) < 6 ? "0" : "1";
             }
         }