| 
					
				 | 
			
			
				@@ -1,4 +1,5 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using Aitex.Core.RT.DataCenter;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using Aitex.Core.RT.Device.Unit;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using Aitex.Core.RT.Event;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using Aitex.Core.RT.IOCore;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using Aitex.Core.RT.Log;
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -32,18 +33,28 @@ namespace FurnaceRT.Equipments.PMs 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private int _vac1PumpTimeS = 120;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private int _vac2PumpTimeS = 120;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private int _vac3PumpTimeS = 120;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private int _foolProofTime = 5;   
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private DeviceTimer _plcFoolProofTime = null;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private RD_TRIG _trigPLCConnected = null; 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private void InitInterlock()
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             OP.AddCheck($"{Module}.{Name}.Disconnect", new CheckPlcConnect(this));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //OP.AddCheck($"{ChamberDoor.Module}.{ChamberDoor.Name}.Open", new CheckOpenDoor(this));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (SC.ContainsItem("System.PLCConnectSensorFoolTime"))
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                _foolProofTime = SC.GetValue<int>("System.PLCConnectSensorFoolTime");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             _configAutoControlCoolingValve = SC.GetConfigItem($"PM.{Module}.AutoControlCoolingValve");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             _configVacuumSensorPressure = SC.GetConfigItem($"PM.{Module}.VacuumSensorPressure");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             _configAutoControlChiller = SC.GetConfigItem($"PM.{Module}.Chiller.EnableAutoAdjust");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             _chillerTurnOffIfTempBelow = SC.GetConfigItem($"PM.{Module}.Chiller.TurnOffIfTempBelow");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             _chillerTurnOnIfTempAbove = SC.GetConfigItem($"PM.{Module}.Chiller.TurnOnIfTempAbove");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (SensorPLCHeartBeatPC != null)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                _trigPLCConnected = new RD_TRIG();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                _plcFoolProofTime = new DeviceTimer();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                _plcFoolProofTime.Start((_foolProofTime + 2) * 1000);//首次
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             _threadMonitor = new PeriodicJob(100, OnTimer, "interlock thread", true);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private void InitUserDefineInterlock()
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -141,7 +152,7 @@ namespace FurnaceRT.Equipments.PMs 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //MonitorVAC1();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //MonitorVAC2();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //MonitorVAC3();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                MonitorPLCConnected();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //foreach (var item in _inCommandLst)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //    if (item == null)
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -242,6 +253,22 @@ namespace FurnaceRT.Equipments.PMs 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return true;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private void MonitorPLCConnected()
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (SensorPLCHeartBeatPC != null)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                _trigPLCConnected.CLK = SensorPLCHeartBeatPC.Value;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (_trigPLCConnected.T || _trigPLCConnected.R)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    _plcFoolProofTime.Start(_foolProofTime * 1000);    
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (_plcFoolProofTime.IsTimeout())
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    _plcFoolProofTime.Stop();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SensorPLCConnectedAlarm.Set($"Connected Status keep {_trigPLCConnected.CLK} out of {_foolProofTime}s");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private void ProcessAlarmSignal()
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             bool isTrig = false;
 
			 |