|
@@ -19,6 +19,7 @@ namespace FurnaceSimulator.Instances
|
|
|
private PeriodicJob _thread;
|
|
|
private int _shuttleServoStation;
|
|
|
private int _robotServoStation;
|
|
|
+ private bool _enableN2purge = false;
|
|
|
|
|
|
Random _rd = new Random();
|
|
|
|
|
@@ -198,72 +199,72 @@ namespace FurnaceSimulator.Instances
|
|
|
|
|
|
private bool OnMonitor()
|
|
|
{
|
|
|
- //return true;
|
|
|
- //MonitorValve();
|
|
|
- MonitorLP("PM1", "LP1");
|
|
|
- MonitorLP("PM1", "LP2");
|
|
|
- MonitorFIMS("PM1", "FIMS1");
|
|
|
- MonitorFIMS("PM1", "FIMS2");
|
|
|
- MonitorBuffer();
|
|
|
- MonitorMFC();
|
|
|
- MonitorDoor();
|
|
|
- MonitorRAxis("PM1");
|
|
|
- MonitorZAxis("PM1");
|
|
|
- MonitorHeater();
|
|
|
- MonitorAPC();
|
|
|
- // MonitorHeaterBand();
|
|
|
-
|
|
|
- if (IO.DO[$"PM1.DO_ShutterOpen"].Value)
|
|
|
- {
|
|
|
- IO.DI[$"PM1.DI_FurnaceShutterOpened"].Value = IO.DO[$"PM1.DO_ShutterOpen"].Value;
|
|
|
- IO.DI[$"PM1.DI_FurnaceShutterClosed"].Value = IO.DO[$"PM1.DO_ShutterClose"].Value;
|
|
|
- }
|
|
|
- if (IO.DO[$"PM1.DO_ShutterClose"].Value)
|
|
|
- {
|
|
|
- IO.DI[$"PM1.DI_FurnaceShutterOpened"].Value = IO.DO[$"PM1.DO_ShutterOpen"].Value;
|
|
|
- IO.DI[$"PM1.DI_FurnaceShutterClosed"].Value = IO.DO[$"PM1.DO_ShutterClose"].Value;
|
|
|
- }
|
|
|
+ //return true;
|
|
|
+ //MonitorValve();
|
|
|
+ MonitorLP("PM1", "LP1");
|
|
|
+ MonitorLP("PM1", "LP2");
|
|
|
+ MonitorFIMS("PM1", "FIMS1");
|
|
|
+ MonitorFIMS("PM1", "FIMS2");
|
|
|
+ MonitorBuffer();
|
|
|
+ MonitorMFC();
|
|
|
+ MonitorDoor();
|
|
|
+ MonitorRAxis("PM1");
|
|
|
+ MonitorZAxis("PM1");
|
|
|
+ MonitorHeater();
|
|
|
+ MonitorAPC();
|
|
|
+ // MonitorHeaterBand();
|
|
|
+
|
|
|
+ if (IO.DO[$"PM1.DO_ShutterOpen"].Value)
|
|
|
+ {
|
|
|
+ IO.DI[$"PM1.DI_FurnaceShutterOpened"].Value = IO.DO[$"PM1.DO_ShutterOpen"].Value;
|
|
|
+ IO.DI[$"PM1.DI_FurnaceShutterClosed"].Value = IO.DO[$"PM1.DO_ShutterClose"].Value;
|
|
|
+ }
|
|
|
+ if (IO.DO[$"PM1.DO_ShutterClose"].Value)
|
|
|
+ {
|
|
|
+ IO.DI[$"PM1.DI_FurnaceShutterOpened"].Value = IO.DO[$"PM1.DO_ShutterOpen"].Value;
|
|
|
+ IO.DI[$"PM1.DI_FurnaceShutterClosed"].Value = IO.DO[$"PM1.DO_ShutterClose"].Value;
|
|
|
+ }
|
|
|
|
|
|
- IO.AI[$"PM1.AI_BufferTargetPosFb"].FloatValue = IO.AO[$"PM1.AO_TargetPositionBufferAxis"].FloatValue;
|
|
|
- IO.AI[$"PM1.AI_BoatTargetPosFb"].FloatValue = IO.AO[$"PM1.AO_BoatPosition"].FloatValue;
|
|
|
+ IO.AI[$"PM1.AI_BufferTargetPosFb"].FloatValue = IO.AO[$"PM1.AO_TargetPositionBufferAxis"].FloatValue;
|
|
|
+ IO.AI[$"PM1.AI_BoatTargetPosFb"].FloatValue = IO.AO[$"PM1.AO_BoatPosition"].FloatValue;
|
|
|
|
|
|
- IO.DI[$"PM1.DI_VaccumPumpBothOn"].Value = true;
|
|
|
+ IO.DI[$"PM1.DI_VaccumPumpBothOn"].Value = true;
|
|
|
|
|
|
|
|
|
- if (IO.DO[$"PM1.DO_ValveAV91"] != null && IO.DI[$"PM1.DI_AV91_1RHCAirInOpened"] != null) { IO.DI[$"PM1.DI_AV91_1RHCAirInOpened"].Value = IO.DO[$"PM1.DO_ValveAV91"].Value; }
|
|
|
- if (IO.DO[$"PM1.DO_ValveAV91"] != null && IO.DI[$"PM1.DI_AV91_2RHCAirInOpened"] != null) { IO.DI[$"PM1.DI_AV91_2RHCAirInOpened"].Value = IO.DO[$"PM1.DO_ValveAV91"].Value; }
|
|
|
- if (IO.DO[$"PM1.DO_ValveAV91"] != null && IO.DI[$"PM1.DI_AV91_3RHCAirOutOpened"] != null) { IO.DI[$"PM1.DI_AV91_3RHCAirOutOpened"].Value = IO.DO[$"PM1.DO_ValveAV91"].Value; }
|
|
|
- if (IO.DO[$"PM1.DO_ValveAV91"] != null && IO.DI[$"PM1.DI_AV91_4RHCAirOutOpened"] != null) { IO.DI[$"PM1.DI_AV91_4RHCAirOutOpened"].Value = IO.DO[$"PM1.DO_ValveAV91"].Value; }
|
|
|
- if (IO.DO[$"PM1.DO_ValveAV91"] != null && IO.DI[$"PM1.DI_AV91_1RHCAirInClosed"] != null) { IO.DI[$"PM1.DI_AV91_1RHCAirInClosed"].Value = !IO.DO[$"PM1.DO_ValveAV91"].Value; }
|
|
|
- if (IO.DO[$"PM1.DO_ValveAV91"] != null && IO.DI[$"PM1.DI_AV91_2RHCAirInClosed"] != null) { IO.DI[$"PM1.DI_AV91_2RHCAirInClosed"].Value = !IO.DO[$"PM1.DO_ValveAV91"].Value; }
|
|
|
- if (IO.DO[$"PM1.DO_ValveAV91"] != null && IO.DI[$"PM1.DI_AV91_3RHCAirOutClosed"] != null) { IO.DI[$"PM1.DI_AV91_3RHCAirOutClosed"].Value = !IO.DO[$"PM1.DO_ValveAV91"].Value; }
|
|
|
- if (IO.DO[$"PM1.DO_ValveAV91"] != null && IO.DI[$"PM1.DI_AV91_4RHCAirOutClosed"] != null) { IO.DI[$"PM1.DI_AV91_4RHCAirOutClosed"].Value = !IO.DO[$"PM1.DO_ValveAV91"].Value; }
|
|
|
- if (IO.DO[$"PM1.DO_LAExhaustValveOpen"] != null && IO.DO[$"PM1.DO_LAExhaustValveClose"] != null &&
|
|
|
- (IO.DO[$"PM1.DO_LAExhaustValveOpen"].Value || IO.DO[$"PM1.DO_LAExhaustValveClose"].Value))
|
|
|
- {
|
|
|
- IO.DI[$"PM1.DI_AV66CommonExhaustOpened"].Value = IO.DO[$"PM1.DO_LAExhaustValveOpen"].Value;
|
|
|
- IO.DI[$"PM1.DI_AV66CommonExhaustClosed"].Value = IO.DO[$"PM1.DO_LAExhaustValveClose"].Value;
|
|
|
- }
|
|
|
+ if (IO.DO[$"PM1.DO_ValveAV91"] != null && IO.DI[$"PM1.DI_AV91_1RHCAirInOpened"] != null) { IO.DI[$"PM1.DI_AV91_1RHCAirInOpened"].Value = IO.DO[$"PM1.DO_ValveAV91"].Value; }
|
|
|
+ if (IO.DO[$"PM1.DO_ValveAV91"] != null && IO.DI[$"PM1.DI_AV91_2RHCAirInOpened"] != null) { IO.DI[$"PM1.DI_AV91_2RHCAirInOpened"].Value = IO.DO[$"PM1.DO_ValveAV91"].Value; }
|
|
|
+ if (IO.DO[$"PM1.DO_ValveAV91"] != null && IO.DI[$"PM1.DI_AV91_3RHCAirOutOpened"] != null) { IO.DI[$"PM1.DI_AV91_3RHCAirOutOpened"].Value = IO.DO[$"PM1.DO_ValveAV91"].Value; }
|
|
|
+ if (IO.DO[$"PM1.DO_ValveAV91"] != null && IO.DI[$"PM1.DI_AV91_4RHCAirOutOpened"] != null) { IO.DI[$"PM1.DI_AV91_4RHCAirOutOpened"].Value = IO.DO[$"PM1.DO_ValveAV91"].Value; }
|
|
|
+ if (IO.DO[$"PM1.DO_ValveAV91"] != null && IO.DI[$"PM1.DI_AV91_1RHCAirInClosed"] != null) { IO.DI[$"PM1.DI_AV91_1RHCAirInClosed"].Value = !IO.DO[$"PM1.DO_ValveAV91"].Value; }
|
|
|
+ if (IO.DO[$"PM1.DO_ValveAV91"] != null && IO.DI[$"PM1.DI_AV91_2RHCAirInClosed"] != null) { IO.DI[$"PM1.DI_AV91_2RHCAirInClosed"].Value = !IO.DO[$"PM1.DO_ValveAV91"].Value; }
|
|
|
+ if (IO.DO[$"PM1.DO_ValveAV91"] != null && IO.DI[$"PM1.DI_AV91_3RHCAirOutClosed"] != null) { IO.DI[$"PM1.DI_AV91_3RHCAirOutClosed"].Value = !IO.DO[$"PM1.DO_ValveAV91"].Value; }
|
|
|
+ if (IO.DO[$"PM1.DO_ValveAV91"] != null && IO.DI[$"PM1.DI_AV91_4RHCAirOutClosed"] != null) { IO.DI[$"PM1.DI_AV91_4RHCAirOutClosed"].Value = !IO.DO[$"PM1.DO_ValveAV91"].Value; }
|
|
|
+ if (IO.DO[$"PM1.DO_LAExhaustValveOpen"] != null && IO.DO[$"PM1.DO_LAExhaustValveClose"] != null &&
|
|
|
+ (IO.DO[$"PM1.DO_LAExhaustValveOpen"].Value || IO.DO[$"PM1.DO_LAExhaustValveClose"].Value))
|
|
|
+ {
|
|
|
+ IO.DI[$"PM1.DI_AV66CommonExhaustOpened"].Value = IO.DO[$"PM1.DO_LAExhaustValveOpen"].Value;
|
|
|
+ IO.DI[$"PM1.DI_AV66CommonExhaustClosed"].Value = IO.DO[$"PM1.DO_LAExhaustValveClose"].Value;
|
|
|
+ }
|
|
|
|
|
|
- if (IO.DO[$"PM1.DO_FFUAirInValveOpen"] != null && IO.DO[$"PM1.DO_FFUAirInValveClose"] != null &&
|
|
|
- (IO.DO[$"PM1.DO_FFUAirInValveOpen"].Value || IO.DO[$"PM1.DO_FFUAirInValveClose"].Value))
|
|
|
- {
|
|
|
- // IO.DI[$"PM1.DI_AV65FFUAirInOpened"].Value = IO.DO[$"PM1.DO_FFUAirInValveOpen"].Value;
|
|
|
- //IO.DI[$"PM1.DI_AV65FFUAirInClosed"].Value = IO.DO[$"PM1.DO_FFUAirInValveClose"].Value;
|
|
|
- }
|
|
|
+ if (IO.DO[$"PM1.DO_FFUAirInValveOpen"] != null && IO.DO[$"PM1.DO_FFUAirInValveClose"] != null &&
|
|
|
+ (IO.DO[$"PM1.DO_FFUAirInValveOpen"].Value || IO.DO[$"PM1.DO_FFUAirInValveClose"].Value))
|
|
|
+ {
|
|
|
+ // IO.DI[$"PM1.DI_AV65FFUAirInOpened"].Value = IO.DO[$"PM1.DO_FFUAirInValveOpen"].Value;
|
|
|
+ //IO.DI[$"PM1.DI_AV65FFUAirInClosed"].Value = IO.DO[$"PM1.DO_FFUAirInValveClose"].Value;
|
|
|
+ }
|
|
|
|
|
|
- if (IO.AI[$"PM1.AI_FOUPRobotActionCommand"] != null && IO.AO[$"PM1.AO_FOUPRobotActionCommand"] != null)
|
|
|
- {
|
|
|
- IO.AI[$"PM1.AI_FOUPRobotActionCommand"].FloatValue = IO.AO[$"PM1.AO_FOUPRobotActionCommand"].FloatValue;
|
|
|
- }
|
|
|
+ if (IO.AI[$"PM1.AI_FOUPRobotActionCommand"] != null && IO.AO[$"PM1.AO_FOUPRobotActionCommand"] != null)
|
|
|
+ {
|
|
|
+ IO.AI[$"PM1.AI_FOUPRobotActionCommand"].FloatValue = IO.AO[$"PM1.AO_FOUPRobotActionCommand"].FloatValue;
|
|
|
+ }
|
|
|
|
|
|
- if (IO.AI[$"PM1.AI_WaferRobotActionCommand"] != null && IO.AO[$"PM1.AO_WaferRobotActionCommand"] != null)
|
|
|
- {
|
|
|
- IO.AI[$"PM1.AI_WaferRobotActionCommand"].FloatValue = IO.AO[$"PM1.AO_WaferRobotActionCommand"].FloatValue;
|
|
|
- }
|
|
|
+ if (IO.AI[$"PM1.AI_WaferRobotActionCommand"] != null && IO.AO[$"PM1.AO_WaferRobotActionCommand"] != null)
|
|
|
+ {
|
|
|
+ IO.AI[$"PM1.AI_WaferRobotActionCommand"].FloatValue = IO.AO[$"PM1.AO_WaferRobotActionCommand"].FloatValue;
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
|
|
|
- return true;
|
|
|
-
|
|
|
}
|
|
|
|
|
|
public void Terminate()
|
|
@@ -716,7 +717,11 @@ namespace FurnaceSimulator.Instances
|
|
|
{
|
|
|
IO.AI[$"PM1.AI_O2Concentration"].FloatValue = i;
|
|
|
|
|
|
- // System.Threading.Thread.Sleep(300); // 延迟500毫秒以便观察输出
|
|
|
+ if (_enableN2purge)
|
|
|
+ {
|
|
|
+ System.Threading.Thread.Sleep(300);
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
increasing = false; // 切换方向
|
|
|
}
|
|
@@ -725,7 +730,11 @@ namespace FurnaceSimulator.Instances
|
|
|
for (int i = end; i >= start; i--)
|
|
|
{
|
|
|
IO.AI[$"PM1.AI_O2Concentration"].FloatValue = i;
|
|
|
- // System.Threading.Thread.Sleep(300);// 延迟500毫秒以便观察输出
|
|
|
+ if (_enableN2purge)
|
|
|
+ {
|
|
|
+ System.Threading.Thread.Sleep(300); // 延迟500毫秒以便观察输出
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
increasing = true; // 切换方向
|
|
|
}
|