整理PM中的部分仿真
This commit is contained in:
parent
9548e635ca
commit
0ef8d59d8c
@ -13,22 +13,17 @@
|
|||||||
|
|
||||||
|
|
||||||
</IoMfcs>
|
</IoMfcs>
|
||||||
<TcAdses classType="Aitex.Core.RT.Device.Devices.SicAds" assembly="MECF.Framework.RT.EquipmentLibrary">
|
|
||||||
<TcAds id="MainPLC" module="PM1" display="" schematicId="" unit="" option="true" scBasePath="PM.{module}" />
|
<WcfPlcs assembly="MECF.Framework.Common" classType="MECF.Framework.Common.PLC.WcfPlc">
|
||||||
<TcAds id="MainPLC" module="PM2" display="" schematicId="" unit="" option="true" scBasePath="PM.{module}" />
|
|
||||||
<TcAds id="MainPLC" module="TM" display="" schematicId="" unit="" option="true" scBasePath="{module}" />
|
|
||||||
</TcAdses>
|
|
||||||
<WcfPlcs assembly="MECF.Framework.Common" classType="MECF.Framework.Common.PLC.WcfPlc" >
|
|
||||||
<WcfPlc id="MainPLC" module="PM1" display="" schematicId="" unit="" option="true" />
|
<WcfPlc id="MainPLC" module="PM1" display="" schematicId="" unit="" option="true" />
|
||||||
<WcfPlc id="MainPLC" module="PM2" display="" schematicId="" unit="" option="true" />
|
<WcfPlc id="MainPLC" module="PM2" display="" schematicId="" unit="" option="true" />
|
||||||
<WcfPlc id="MainPLC" module="TM" display="" schematicId="" unit="" option="true" />
|
|
||||||
</WcfPlcs>
|
</WcfPlcs>
|
||||||
<!--<TcAdses assembly="SicModules" classType="SicModules.Devices.SicAds">
|
<TcAdses assembly="SicModules" classType="SicModules.Devices.SicAds">
|
||||||
<TcAds id="MainPLC" module="TM" display="" schematicId="" unit="" option="true" />
|
<TcAds id="MainPLC" module="TM" display="" schematicId="" unit="" option="true" />
|
||||||
</TcAdses>-->
|
</TcAdses>
|
||||||
<!--<WcfPlcs assembly="MECF.Framework.Common" classType="MECF.Framework.Common.PLC.WcfPlc">
|
<WcfPlcs assembly="MECF.Framework.Common" classType="MECF.Framework.Common.PLC.WcfPlc">
|
||||||
<WcfPlc id="MainPLC" module="TM" display="" schematicId="" unit="" option="true" />
|
<WcfPlc id="MainPLC" module="TM" display="" schematicId="" unit="" option="true" />
|
||||||
</WcfPlcs>-->
|
</WcfPlcs>
|
||||||
|
|
||||||
<IoSignalTowers classType="MECF.Framework.RT.EquipmentLibrary.Devices.IoSignalTower" assembly="MECF.Framework.RT.EquipmentLibrary">
|
<IoSignalTowers classType="MECF.Framework.RT.EquipmentLibrary.Devices.IoSignalTower" assembly="MECF.Framework.RT.EquipmentLibrary">
|
||||||
<IoSignalTower id="SignalTower" module="TM" display="SignalTower" schematicId="TMSignalTower"
|
<IoSignalTower id="SignalTower" module="TM" display="SignalTower" schematicId="TMSignalTower"
|
||||||
|
|||||||
@ -11,16 +11,16 @@
|
|||||||
|
|
||||||
-->
|
-->
|
||||||
<!--TM Simulator-->
|
<!--TM Simulator-->
|
||||||
<IoProvider load_condition="0" module="TM" name="io" map_module="TM" map_file="tm\IODefinePlatform.xml"
|
<IoProvider load_condition="0" module="TM" name="io" map_module="TM" map_file="tm\IODefinePlatform.xml" class="MECF.Framework.RT.Core.IoProviders.MCProtocolPlc" assembly="MECF.Framework.RT.Core">
|
||||||
class="MECF.Framework.RT.Core.IoProviders.MCProtocolPlc" assembly="MECF.Framework.RT.Core">
|
<Parameter ip="127.0.0.1" port="6833" network_id="1" station_id="1"></Parameter>
|
||||||
<Parameter ip="127.0.0.1" port="6833" network_id="1" station_id="1"></Parameter>
|
<Blocks>
|
||||||
<Blocks>
|
<Block type="di" index="0" size="640" value_type="" variable=""></Block>
|
||||||
<Block type="di" index="0" size="640" value_type="" variable=""></Block>
|
<Block type="do" index="0" size="640" value_type="" variable=""></Block>
|
||||||
<Block type="do" index="0" size="640" value_type="" variable=""></Block>
|
<Block type="ai" index="0" size="640" value_type="float"></Block>
|
||||||
<Block type="ai" index="0" size="640" value_type="float"></Block>
|
<Block type="ao" index="0" size="640" value_type="float" variable=""></Block>
|
||||||
<Block type="ao" index="0" size="640" value_type="float" variable=""></Block>
|
<!--<Block type="ai" index="1" size="640" value_type="float"></Block>-->
|
||||||
</Blocks>
|
</Blocks>
|
||||||
</IoProvider>
|
</IoProvider>
|
||||||
|
|
||||||
<!--PM1 Simulator-->
|
<!--PM1 Simulator-->
|
||||||
<IoProvider load_condition="0" module="PM1" name="io" map_module="PM1" map_file="pm\pm1\_ioDefinePM1.xml"
|
<IoProvider load_condition="0" module="PM1" name="io" map_module="PM1" map_file="pm\pm1\_ioDefinePM1.xml"
|
||||||
|
|||||||
@ -1,17 +1,9 @@
|
|||||||
using Aitex.Common.Util;
|
using Aitex.Core.RT.IOCore;
|
||||||
using Aitex.Core.RT.DataCenter;
|
|
||||||
using Aitex.Core.RT.IOCore;
|
|
||||||
using Aitex.Core.RT.Log;
|
using Aitex.Core.RT.Log;
|
||||||
using Aitex.Core.Util;
|
using Aitex.Core.Util;
|
||||||
using Aitex.Core.WCF;
|
using Aitex.Core.WCF;
|
||||||
using MECF.Framework.Common.Equipment;
|
|
||||||
using MECF.Framework.Common.PLC;
|
|
||||||
using MECF.Framework.Simulator.Core;
|
|
||||||
using SicSimulator.Views;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics.Eventing.Reader;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace SicSimulator.Instances
|
namespace SicSimulator.Instances
|
||||||
{
|
{
|
||||||
@ -23,7 +15,6 @@ namespace SicSimulator.Instances
|
|||||||
|
|
||||||
public SimulatorSystem()
|
public SimulatorSystem()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Initialize()
|
public void Initialize()
|
||||||
@ -36,18 +27,11 @@ namespace SicSimulator.Instances
|
|||||||
|
|
||||||
WcfServiceManager.Instance.Initialize(new Type[] { typeof(SimulatorAdsPlcService) });
|
WcfServiceManager.Instance.Initialize(new Type[] { typeof(SimulatorAdsPlcService) });
|
||||||
|
|
||||||
Singleton<SimulatorDeviceManager>.Instance.Initialize(PathManager.GetCfgDir() + "DevicePM.xml", "Sic", ModuleName.PM1, "PM1");
|
|
||||||
//Singleton<SimulatorDeviceManager>.Instance.Initialize(PathManager.GetCfgDir() + "DevicePM.xml", "Sic", ModuleName.PM2, "PM2");
|
|
||||||
Singleton<SimulatorDeviceManager>.Instance.Initialize(PathManager.GetCfgDir() + "DeviceTM.xml", "Sic", ModuleName.TM, "TM");
|
|
||||||
|
|
||||||
_thread = new PeriodicJob(200, OnMonitor, nameof(SimulatorSystem), true);
|
_thread = new PeriodicJob(200, OnMonitor, nameof(SimulatorSystem), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void SetTMDefaultValue(string mod)
|
private void SetTMDefaultValue(string mod)
|
||||||
{
|
{
|
||||||
IO.DO["DO_LoadLidClose"].Value = true;
|
|
||||||
|
|
||||||
IO.DI["DI_LoadLidLocked"].Value = true;
|
IO.DI["DI_LoadLidLocked"].Value = true;
|
||||||
IO.DI["DI_UnloadStationLifterCYDown"].Value = true;
|
IO.DI["DI_UnloadStationLifterCYDown"].Value = true;
|
||||||
IO.DI["DI_LoadWafeCYOpened"].Value = true;
|
IO.DI["DI_LoadWafeCYOpened"].Value = true;
|
||||||
@ -62,16 +46,12 @@ namespace SicSimulator.Instances
|
|||||||
IO.DI["DI_TMDryPump1Warning"].Value = true;
|
IO.DI["DI_TMDryPump1Warning"].Value = true;
|
||||||
IO.DI["DI_TMDryPump1Running"].Value = true;
|
IO.DI["DI_TMDryPump1Running"].Value = true;
|
||||||
|
|
||||||
IO.DI["DI_TMDryPump2Alarm"].Value = true;
|
|
||||||
IO.DI["DI_TMDryPump2Warning"].Value = true;
|
|
||||||
IO.DI["DI_TMDryPump2Running"].Value = true;
|
|
||||||
|
|
||||||
//IO.DI["DI_TMDryPump2Alarm"].Value = true;
|
//IO.DI["DI_TMDryPump2Alarm"].Value = true;
|
||||||
//IO.DI["DI_TMDryPump2Warning"].Value = true;
|
//IO.DI["DI_TMDryPump2Warning"].Value = true;
|
||||||
//IO.DI["DI_TMDryPump2Running"].Value = true;
|
//IO.DI["DI_TMDryPump2Running"].Value = true;
|
||||||
|
|
||||||
|
IO.DI["DI_LoadDoorClosed"].Value = true;
|
||||||
|
IO.DI["DI_ReactorADoorClosed"].Value = true;
|
||||||
IO.DI["DI_RobotOnBackPos"].Value = true;
|
IO.DI["DI_RobotOnBackPos"].Value = true;
|
||||||
|
|
||||||
IO.AI["AI_TMPressure1"].Value = 300;
|
IO.AI["AI_TMPressure1"].Value = 300;
|
||||||
@ -114,22 +94,17 @@ namespace SicSimulator.Instances
|
|||||||
|
|
||||||
IO.DO["DO_LoadLidLock"].Value = true;
|
IO.DO["DO_LoadLidLock"].Value = true;
|
||||||
IO.DO["DO_LoadLidUnlock"].Value = true;
|
IO.DO["DO_LoadLidUnlock"].Value = true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetDefaultValue(string mod)
|
private void SetDefaultValue(string mod)
|
||||||
{
|
{
|
||||||
SetWaterTemp(mod);
|
//SetWaterTemp(mod);
|
||||||
|
|
||||||
IO.DI[$"{mod}.DI_ConfinementRingDone"].Value = true;
|
IO.DI[$"{mod}.DI_ConfinementRingDone"].Value = true;
|
||||||
IO.DI[$"{mod}.DI_DryPumpAlarm"].Value = true;
|
IO.DI[$"{mod}.DI_DryPumpAlarm"].Value = true;
|
||||||
IO.DI[$"{mod}.DI_DryPump1Warning"].Value = true;
|
IO.DI[$"{mod}.DI_DryPump1Warning"].Value = true;
|
||||||
IO.DI[$"{mod}.DI_DryPump1Running"].Value = true;
|
IO.DI[$"{mod}.DI_DryPump1Running"].Value = true;
|
||||||
|
|
||||||
IO.DI[$"{mod}.DI_DryPump2Alarm"].Value = true;
|
|
||||||
IO.DI[$"{mod}.DI_DryPump2Warning"].Value = true;
|
|
||||||
IO.DI[$"{mod}.DI_DryPump2Running"].Value = true;
|
|
||||||
|
|
||||||
IO.DI[$"{mod}.DI_ServoReady"].Value = true;
|
IO.DI[$"{mod}.DI_ServoReady"].Value = true;
|
||||||
IO.AI[$"{mod}.AI_ForelinePress"].Value = 300;
|
IO.AI[$"{mod}.AI_ForelinePress"].Value = 300;
|
||||||
IO.AI[$"{mod}.AI_ChamPress"].Value = 300;
|
IO.AI[$"{mod}.AI_ChamPress"].Value = 300;
|
||||||
@ -141,7 +116,6 @@ namespace SicSimulator.Instances
|
|||||||
IO.DI[$"{mod}.DI_ChamTopFlowSW"].Value = true;
|
IO.DI[$"{mod}.DI_ChamTopFlowSW"].Value = true;
|
||||||
IO.DI[$"{mod}.DI_DryPump1Running"].Value = true;
|
IO.DI[$"{mod}.DI_DryPump1Running"].Value = true;
|
||||||
|
|
||||||
|
|
||||||
IO.DI[$"{mod}.DI_ChamLidPushButtonLocal"].Value = true;
|
IO.DI[$"{mod}.DI_ChamLidPushButtonLocal"].Value = true;
|
||||||
IO.DI[$"{mod}.DI_ChamMoveBodyDown"].Value = true;
|
IO.DI[$"{mod}.DI_ChamMoveBodyDown"].Value = true;
|
||||||
IO.DI[$"{mod}.DI_ChamMoveBodyFront"].Value = true;
|
IO.DI[$"{mod}.DI_ChamMoveBodyFront"].Value = true;
|
||||||
@ -156,7 +130,6 @@ namespace SicSimulator.Instances
|
|||||||
IO.DI[$"{mod}.DI_SHLidSwingLock"].Value = true;
|
IO.DI[$"{mod}.DI_SHLidSwingLock"].Value = true;
|
||||||
IO.DI[$"{mod}.DI_MiddleLidSwingLock"].Value = true;
|
IO.DI[$"{mod}.DI_MiddleLidSwingLock"].Value = true;
|
||||||
|
|
||||||
|
|
||||||
IO.DI[$"{mod}.DI_SHGasConnectorLoosen"].Value = false;
|
IO.DI[$"{mod}.DI_SHGasConnectorLoosen"].Value = false;
|
||||||
IO.DI[$"{mod}.DI_SHGasConnectorTighten"].Value = true;
|
IO.DI[$"{mod}.DI_SHGasConnectorTighten"].Value = true;
|
||||||
IO.DO[$"{mod}.DO_CleanRoutineSucceed"].Value = true;
|
IO.DO[$"{mod}.DO_CleanRoutineSucceed"].Value = true;
|
||||||
@ -193,7 +166,6 @@ namespace SicSimulator.Instances
|
|||||||
IO.DI[$"{mod}.DI_FacilityIntlkSW"].Value = true;
|
IO.DI[$"{mod}.DI_FacilityIntlkSW"].Value = true;
|
||||||
IO.DI[$"{mod}.DI_PowerRackWaterLeakSW"].Value = true;
|
IO.DI[$"{mod}.DI_PowerRackWaterLeakSW"].Value = true;
|
||||||
|
|
||||||
|
|
||||||
#region TC
|
#region TC
|
||||||
|
|
||||||
//IO.AI[$"{mod}.AI_L1WorkingOP"].Value = 10;
|
//IO.AI[$"{mod}.AI_L1WorkingOP"].Value = 10;
|
||||||
@ -267,7 +239,8 @@ namespace SicSimulator.Instances
|
|||||||
//IO.AO[$"{mod}.AO_L1TempLowLimit2"].Value = 80;
|
//IO.AO[$"{mod}.AO_L1TempLowLimit2"].Value = 80;
|
||||||
//IO.AO[$"{mod}.AO_L2TempLowLimit2"].Value = 80;
|
//IO.AO[$"{mod}.AO_L2TempLowLimit2"].Value = 80;
|
||||||
//IO.AO[$"{mod}.AO_L3TempLowLimit2"].Value = 80;
|
//IO.AO[$"{mod}.AO_L3TempLowLimit2"].Value = 80;
|
||||||
#endregion
|
|
||||||
|
#endregion TC
|
||||||
|
|
||||||
IO.DI[$"{mod}.DI_PMH2DetectorSW"].Value = true;
|
IO.DI[$"{mod}.DI_PMH2DetectorSW"].Value = true;
|
||||||
IO.DI[$"{mod}.DI_ProcessStopSW"].Value = false;
|
IO.DI[$"{mod}.DI_ProcessStopSW"].Value = false;
|
||||||
@ -285,6 +258,7 @@ namespace SicSimulator.Instances
|
|||||||
IO.DI[$"{mod}.DI_TCSAlarm"].Value = true;
|
IO.DI[$"{mod}.DI_TCSAlarm"].Value = true;
|
||||||
IO.DI[$"{mod}.DI_GBExhaustDPSW"].Value = true;
|
IO.DI[$"{mod}.DI_GBExhaustDPSW"].Value = true;
|
||||||
IO.DI[$"{mod}.DI_PMAExhaustDPSW"].Value = true;
|
IO.DI[$"{mod}.DI_PMAExhaustDPSW"].Value = true;
|
||||||
|
IO.DI[$"{mod}.DI_ServoDriverFaultSW"].Value = true;
|
||||||
|
|
||||||
IO.DI[$"{mod}.DI_ServoDriverFaultSW"].Value = true;
|
IO.DI[$"{mod}.DI_ServoDriverFaultSW"].Value = true;
|
||||||
|
|
||||||
@ -350,25 +324,25 @@ namespace SicSimulator.Instances
|
|||||||
IO.AI[$"{mod}.AI_Spare2Temp"].Value = (float)(WaterTempBase * _rnd.NextDouble()); ;
|
IO.AI[$"{mod}.AI_Spare2Temp"].Value = (float)(WaterTempBase * _rnd.NextDouble()); ;
|
||||||
IO.AI[$"{mod}.AI_SpareFlowTemp"].Value = (float)(WaterTempBase * _rnd.NextDouble()); ;
|
IO.AI[$"{mod}.AI_SpareFlowTemp"].Value = (float)(WaterTempBase * _rnd.NextDouble()); ;
|
||||||
|
|
||||||
#endregion
|
#endregion Water Flow
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool OnMonitor()
|
private bool OnMonitor()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
MonitorPressureTM();
|
//MonitorPressureTM();
|
||||||
//MonitorPressureLoad();
|
//MonitorPressureLoad();
|
||||||
//MonitorPressureUnLoad();
|
//MonitorPressureUnLoad();
|
||||||
//MonitorSlitValveFlow();
|
//MonitorSlitValveFlow();
|
||||||
//MonitorTMValve();
|
//MonitorTMValve();
|
||||||
|
|
||||||
MonitorPm("PM1");
|
//MonitorPm("PM1");
|
||||||
MonitorPm("PM2");
|
//MonitorPm("PM2");
|
||||||
MonitorValve("PM1");
|
MonitorValve("PM1");
|
||||||
MonitorValve("PM2");
|
//MonitorValve("PM2");
|
||||||
|
|
||||||
//MonitorFlowRamp("PM1");
|
MonitorFlowRamp("PM1");
|
||||||
//MonitorFlowRamp("PM2");
|
//MonitorFlowRamp("PM2");
|
||||||
//MonitorGasConnector("PM1");
|
//MonitorGasConnector("PM1");
|
||||||
//MonitorLid("PM1");
|
//MonitorLid("PM1");
|
||||||
@ -394,88 +368,57 @@ namespace SicSimulator.Instances
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MonitorFlowRamp(string pm)
|
private List<Tuple<string, string>> _mfc_pc = new List<Tuple<string, string>>
|
||||||
{
|
{
|
||||||
var rampList = new List<Tuple<string, string>>
|
Tuple.Create("AI_M1", "AO_M1"),
|
||||||
{
|
Tuple.Create("AI_M3", "AO_M3"),
|
||||||
new Tuple<string, string>(
|
Tuple.Create("AI_M4", "AO_M4"),
|
||||||
"AI_M1",
|
Tuple.Create("AI_M6", "AO_M6"),
|
||||||
"AO_M1"
|
Tuple.Create("AI_M7", "AO_M7"),
|
||||||
),
|
Tuple.Create("AI_M8", "AO_M8"),
|
||||||
new Tuple<string, string>(
|
Tuple.Create("AI_M9", "AO_M9"),
|
||||||
"AI_M2",
|
Tuple.Create("AI_M10", "AO_M10"),
|
||||||
"AO_M2"
|
Tuple.Create("AI_M11", "AO_M11"),
|
||||||
),
|
Tuple.Create("AI_M12", "AO_M12"),
|
||||||
new Tuple<string, string>("AI_M3","AO_M3"),
|
Tuple.Create("AI_M13", "AO_M13"),
|
||||||
new Tuple<string, string>("AI_M4","AO_M4"),
|
Tuple.Create("AI_M14", "AO_M14"),
|
||||||
new Tuple<string, string>("AI_M5","AO_M5"),
|
Tuple.Create("AI_M15", "AO_M15"),
|
||||||
new Tuple<string, string>("AI_M6","AO_M6"),
|
Tuple.Create("AI_M16", "AO_M16"),
|
||||||
new Tuple<string, string>("AI_M7","AO_M7"),
|
Tuple.Create("AI_M17", "AO_M17"),
|
||||||
new Tuple<string, string>("AI_M8","AO_M8"),
|
Tuple.Create("AI_M18", "AO_M18"),
|
||||||
new Tuple<string, string>("AI_M9","AO_M9"),
|
Tuple.Create("AI_M19", "AO_M19"),
|
||||||
new Tuple<string, string>("AI_M10","AO_M10"),
|
Tuple.Create("AI_M20", "AO_M20"),
|
||||||
new Tuple<string, string>("AI_M11","AO_M11"),
|
Tuple.Create("AI_M21", "AO_M21"),
|
||||||
new Tuple<string, string>("AI_M12","AO_M12"),
|
Tuple.Create("AI_M22", "AO_M22"),
|
||||||
new Tuple<string, string>("AI_M13","AO_M13"),
|
Tuple.Create("AI_M23", "AO_M23"),
|
||||||
new Tuple<string, string>("AI_M14","AO_M14"),
|
Tuple.Create("AI_M24", "AO_M24"),
|
||||||
new Tuple<string, string>("AI_M15","AO_M15"),
|
Tuple.Create("AI_M25", "AO_M25"),
|
||||||
new Tuple<string, string>("AI_M16","AO_M16"),
|
Tuple.Create("AI_M26", "AO_M26"),
|
||||||
new Tuple<string, string>("AI_M17","AO_M17"),
|
Tuple.Create("AI_M27", "AO_M27"),
|
||||||
new Tuple<string, string>("AI_M18","AO_M18"),
|
Tuple.Create("AI_M28", "AO_M28"),
|
||||||
new Tuple<string, string>("AI_M19","AO_M19"),
|
Tuple.Create("AI_M29", "AO_M29"),
|
||||||
new Tuple<string, string>("AI_M20","AO_M20"),
|
Tuple.Create("AI_M31", "AO_M31"),
|
||||||
new Tuple<string, string>("AI_M22","AO_M22"),
|
Tuple.Create("AI_M32", "AO_M32"),
|
||||||
new Tuple<string, string>("AI_M23","AO_M23"),
|
Tuple.Create("AI_M33", "AO_M33"),
|
||||||
new Tuple<string, string>("AI_M25","AO_M25"),
|
Tuple.Create("AI_M35", "AO_M35"),
|
||||||
new Tuple<string, string>("AI_M26","AO_M26"),
|
Tuple.Create("AI_M36", "AO_M36"),
|
||||||
new Tuple<string, string>("AI_M27","AO_M27"),
|
Tuple.Create("AI_M37", "AO_M37"),
|
||||||
new Tuple<string, string>("AI_M28","AO_M28"),
|
Tuple.Create("AI_M38", "AO_M38"),
|
||||||
new Tuple<string, string>("AI_M29","AO_M29"),
|
Tuple.Create("AI_M40", "AO_M40"),
|
||||||
new Tuple<string, string>("AI_M31","AO_M31"),
|
Tuple.Create("AI_PressCtrl1", "AO_PressCtrl1"),
|
||||||
new Tuple<string, string>("AI_M32","AO_M32"),
|
Tuple.Create("AI_PressCtrl2", "AO_PressCtrl2"),
|
||||||
new Tuple<string, string>("AI_M33","AO_M33"),
|
Tuple.Create("AI_PressCtrl3", "AO_PressCtrl3"),
|
||||||
|
Tuple.Create("AI_PressCtrl4", "AO_PressCtrl4"),
|
||||||
new Tuple<string, string>("AI_M35","AO_M35"),
|
Tuple.Create("AI_PressCtrl5", "AO_PressCtrl5"),
|
||||||
new Tuple<string, string>("AI_M36","AO_M36"),
|
Tuple.Create("AI_PressCtrl6", "AO_PressCtrl6"),
|
||||||
new Tuple<string, string>("AI_M37","AO_M37"),
|
Tuple.Create("AI_PressCtrl7", "AO_PressCtrl7"),
|
||||||
new Tuple<string, string>("AI_M38","AO_M38"),
|
Tuple.Create("AI_PressCtrl8", "AO_PressCtrl8"),
|
||||||
|
Tuple.Create("AI_PressCtrl9", "AO_PressCtrl9"),
|
||||||
new Tuple<string, string>("AI_M40","AO_M40"),
|
};
|
||||||
new Tuple<string, string>("AI_M41","AO_M41"),
|
|
||||||
new Tuple<string, string>("AI_M42","AO_M42"),
|
private void MonitorFlowRamp(string pm)
|
||||||
new Tuple<string, string>("AI_M43","AO_M43"),
|
{
|
||||||
new Tuple<string, string>("AI_M44","AO_M44"),
|
foreach (var item in _mfc_pc)
|
||||||
new Tuple<string, string>("AI_M45","AO_M45"),
|
|
||||||
|
|
||||||
new Tuple<string, string>("AI_PressCtrl1","AO_PressCtrl1"),
|
|
||||||
new Tuple<string, string>("AI_PressCtrl2","AO_PressCtrl2"),
|
|
||||||
new Tuple<string, string>("AI_PressCtrl3","AO_PressCtrl3"),
|
|
||||||
new Tuple<string, string>("AI_PressCtrl4","AO_PressCtrl4"),
|
|
||||||
new Tuple<string, string>("AI_PressCtrl5","AO_PressCtrl5"),
|
|
||||||
new Tuple<string, string>("AI_PressCtrl6","AO_PressCtrl6"),
|
|
||||||
new Tuple<string, string>("AI_PressCtrl7","AO_PressCtrl7"),
|
|
||||||
new Tuple<string, string>("AI_PressCtrl8","AO_PressCtrl8"),
|
|
||||||
new Tuple<string, string>("AI_PressCtrl9","AO_PressCtrl9"),
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//new Tuple<string, string>(
|
|
||||||
// "AI_Gas2Flow",
|
|
||||||
// "AO_Gas2Flow"
|
|
||||||
//),
|
|
||||||
|
|
||||||
//new Tuple<string, string>(
|
|
||||||
// "AI_Gas3Flow",
|
|
||||||
// "AO_Gas3Flow"
|
|
||||||
//),
|
|
||||||
|
|
||||||
//new Tuple<string, string>(
|
|
||||||
// "AI_Gas4Flow",
|
|
||||||
// "AO_Gas4Flow"
|
|
||||||
//),
|
|
||||||
};
|
|
||||||
|
|
||||||
foreach (var item in rampList)
|
|
||||||
{
|
{
|
||||||
float setpoint = 0;
|
float setpoint = 0;
|
||||||
float result = 0;
|
float result = 0;
|
||||||
@ -486,7 +429,6 @@ namespace SicSimulator.Instances
|
|||||||
setpoint = IO.AO[$"{pm}.{item.Item2}"].Value;
|
setpoint = IO.AO[$"{pm}.{item.Item2}"].Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (current >= setpoint)
|
if (current >= setpoint)
|
||||||
{
|
{
|
||||||
result = current - 50;
|
result = current - 50;
|
||||||
@ -505,7 +447,9 @@ namespace SicSimulator.Instances
|
|||||||
IO.AI[$"{pm}.{item.Item1}"].Value = result;
|
IO.AI[$"{pm}.{item.Item1}"].Value = result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public object locker = new object();
|
public object locker = new object();
|
||||||
|
|
||||||
private void MonitorPm(string pm)
|
private void MonitorPm(string pm)
|
||||||
{
|
{
|
||||||
IO.AI[$"{pm}.AI_TVmode"].Value = IO.AO[$"{pm}.AO_ValveModeSetpoint"].Value;
|
IO.AI[$"{pm}.AI_TVmode"].Value = IO.AO[$"{pm}.AO_ValveModeSetpoint"].Value;
|
||||||
@ -573,17 +517,13 @@ namespace SicSimulator.Instances
|
|||||||
//设置PT2的压力比PT1的小20
|
//设置PT2的压力比PT1的小20
|
||||||
|
|
||||||
IO.AI[$"{pm}.AI_ForelinePress"].Value = IO.AI[$"{pm}.AI_ChamPress"].Value - 20 > 0 ? IO.AI[$"{pm}.AI_ChamPress"].Value - 20 : 0;
|
IO.AI[$"{pm}.AI_ForelinePress"].Value = IO.AI[$"{pm}.AI_ChamPress"].Value - 20 > 0 ? IO.AI[$"{pm}.AI_ChamPress"].Value - 20 : 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MonitorPressureLoad()
|
private void MonitorPressureLoad()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
IO.DI["DI_LoadLidLocked"].Value = IO.DO["DO_LoadLidLock"].Value;
|
IO.DI["DI_LoadLidLocked"].Value = IO.DO["DO_LoadLidLock"].Value;
|
||||||
IO.DI["DI_LoadLidUnlocked"].Value = IO.DO["DO_LoadLidUnlock"].Value;
|
IO.DI["DI_LoadLidUnlocked"].Value = IO.DO["DO_LoadLidUnlock"].Value;
|
||||||
|
|
||||||
|
|
||||||
IO.DI["DI_LoadPressureATM"].Value = IO.AI["AI_LoadPressure"].Value > 960;
|
IO.DI["DI_LoadPressureATM"].Value = IO.AI["AI_LoadPressure"].Value > 960;
|
||||||
IO.DI["DI_LoadPressureVAC"].Value = IO.AI["AI_LoadPressure"].Value < 310;
|
IO.DI["DI_LoadPressureVAC"].Value = IO.AI["AI_LoadPressure"].Value < 310;
|
||||||
|
|
||||||
@ -591,7 +531,7 @@ namespace SicSimulator.Instances
|
|||||||
bool isFastPump = IO.DI["DI_LoadFastPumpFB"].Value;
|
bool isFastPump = IO.DI["DI_LoadFastPumpFB"].Value;
|
||||||
bool isSlowVent = IO.DI["DI_LoadVentFB"].Value;
|
bool isSlowVent = IO.DI["DI_LoadVentFB"].Value;
|
||||||
|
|
||||||
//200毫秒调用一次,10秒内实现从0到1020
|
//200毫秒调用一次,10秒内实现从0到1020
|
||||||
double pressure = IO.AI["AI_LoadPressure"].Value;
|
double pressure = IO.AI["AI_LoadPressure"].Value;
|
||||||
|
|
||||||
if (isFastPump || isSlowPum)
|
if (isFastPump || isSlowPum)
|
||||||
@ -645,7 +585,7 @@ namespace SicSimulator.Instances
|
|||||||
bool isFastPump = IO.DI["DI_UnloadFastPumpFB"].Value;
|
bool isFastPump = IO.DI["DI_UnloadFastPumpFB"].Value;
|
||||||
bool isSlowVent = IO.DI["DI_UnloadVentFB"].Value;
|
bool isSlowVent = IO.DI["DI_UnloadVentFB"].Value;
|
||||||
|
|
||||||
//200毫秒调用一次,10秒内实现从0到1020
|
//200毫秒调用一次,10秒内实现从0到1020
|
||||||
double pressure = IO.AI["AI_UnloadPressure"].Value;
|
double pressure = IO.AI["AI_UnloadPressure"].Value;
|
||||||
|
|
||||||
if (isFastPump || isSlowPum)
|
if (isFastPump || isSlowPum)
|
||||||
@ -718,7 +658,7 @@ namespace SicSimulator.Instances
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//200毫秒调用一次,10秒内实现从0到1020
|
//200毫秒调用一次,10秒内实现从0到1020
|
||||||
double pressure = IO.AI["AI_TMPressure1"].Value;
|
double pressure = IO.AI["AI_TMPressure1"].Value;
|
||||||
|
|
||||||
double factor = pressure / (3 * 10);
|
double factor = pressure / (3 * 10);
|
||||||
@ -783,7 +723,6 @@ namespace SicSimulator.Instances
|
|||||||
|
|
||||||
private void MonitorSlitValveFlow()
|
private void MonitorSlitValveFlow()
|
||||||
{
|
{
|
||||||
|
|
||||||
if (IO.DO["DO_LoadDoorClose"].Value != IO.DO["DO_LoadDoorOpen"].Value)
|
if (IO.DO["DO_LoadDoorClose"].Value != IO.DO["DO_LoadDoorOpen"].Value)
|
||||||
{
|
{
|
||||||
IO.DI["DI_LoadDoorOpened"].Value = IO.DO["DO_LoadDoorOpen"].Value;
|
IO.DI["DI_LoadDoorOpened"].Value = IO.DO["DO_LoadDoorOpen"].Value;
|
||||||
@ -802,6 +741,12 @@ namespace SicSimulator.Instances
|
|||||||
IO.DI["DI_ReactorBDoorClosed"].Value = IO.DO["DO_RectorBDoorClose"].Value;
|
IO.DI["DI_ReactorBDoorClosed"].Value = IO.DO["DO_RectorBDoorClose"].Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (IO.DO["DO_UnloadStationDoorOpen"].Value != IO.DO["DO_UnloadStationDoorClose"].Value)
|
||||||
|
{
|
||||||
|
IO.DI["DI_UnloadStationDoorOpened"].Value = IO.DO["DO_UnloadStationDoorOpen"].Value;
|
||||||
|
IO.DI["DI_UnloadStationDoorClosed"].Value = IO.DO["DO_UnloadStationDoorClose"].Value;
|
||||||
|
}
|
||||||
|
|
||||||
if (IO.DO["DO_BufferStationDoorOpen"].Value != IO.DO["DO_BufferStationDoorClose"].Value)
|
if (IO.DO["DO_BufferStationDoorOpen"].Value != IO.DO["DO_BufferStationDoorClose"].Value)
|
||||||
{
|
{
|
||||||
IO.DI["DI_BufferStationDoorOpened"].Value = IO.DO["DO_BufferStationDoorOpen"].Value;
|
IO.DI["DI_BufferStationDoorOpened"].Value = IO.DO["DO_BufferStationDoorOpen"].Value;
|
||||||
@ -820,14 +765,13 @@ namespace SicSimulator.Instances
|
|||||||
IO.DI["DI_LoadLSideDoorClosed"].Value = IO.DO["DO_LoadLSideDoorClose"].Value;
|
IO.DI["DI_LoadLSideDoorClosed"].Value = IO.DO["DO_LoadLSideDoorClose"].Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IO.DO["DO_LoadLockWaferCYDown"].Value != IO.DO["DO_LoadLockWaferCYUP"].Value)
|
if (IO.DO["DO_LoadRSideDoorOpen"].Value != IO.DO["DO_LoadRSideDoorClose"].Value)
|
||||||
{
|
{
|
||||||
IO.DI["DI_LoadRSideDoorOpened"].Value = IO.DO["DO_LoadLockWaferCYDown"].Value;
|
IO.DI["DI_LoadRSideDoorOpened"].Value = IO.DO["DO_LoadRSideDoorOpen"].Value;
|
||||||
IO.DI["DI_LoadRSideDoorClosed"].Value = IO.DO["DO_LoadLockWaferCYUP"].Value;
|
IO.DI["DI_LoadRSideDoorClosed"].Value = IO.DO["DO_LoadRSideDoorClose"].Value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private int time1 = 0;
|
private int time1 = 0;
|
||||||
private int time2 = 0;
|
private int time2 = 0;
|
||||||
private int time3 = 0;
|
private int time3 = 0;
|
||||||
@ -836,22 +780,16 @@ namespace SicSimulator.Instances
|
|||||||
|
|
||||||
private void MonitorTMValve()
|
private void MonitorTMValve()
|
||||||
{
|
{
|
||||||
|
|
||||||
//DI_LoadLidClose
|
|
||||||
IO.DI["DI_LoadLidClose"].Value = IO.DO["DO_LoadLidClose"].Value;
|
|
||||||
IO.DI["DI_LoadLidOpen"].Value = IO.DO["DO_LoadLidOpen"].Value;
|
|
||||||
IO.DI["DI_VacRobotExtendBufferEnableFB"].Value = IO.DO["DO_VacRobotExtendBufferEnable"].Value;
|
IO.DI["DI_VacRobotExtendBufferEnableFB"].Value = IO.DO["DO_VacRobotExtendBufferEnable"].Value;
|
||||||
IO.DI["DI_VacRobotExtenLoadEnableFB"].Value = IO.DO["DO_VacRobotExtenLoadEnable"].Value;
|
IO.DI["DI_VacRobotExtenLoadEnableFB"].Value = IO.DO["DO_VacRobotExtenLoadEnable"].Value;
|
||||||
IO.DI["DI_VacRobotExtendPMAEnableFB"].Value = IO.DO["DO_VacRobotExtendPMAEnable"].Value;
|
IO.DI["DI_VacRobotExtendPMAEnableFB"].Value = IO.DO["DO_VacRobotExtendPMAEnable"].Value;
|
||||||
IO.DI["DI_VacRobotExtendPMBEnableFB"].Value = IO.DO["DO_VacRobotExtendPMBEnable"].Value;
|
IO.DI["DI_VacRobotExtendPMBEnableFB"].Value = IO.DO["DO_VacRobotExtendPMBEnable"].Value;
|
||||||
IO.DI["DI_VacRobotExtendUnloadEnableFB"].Value = IO.DO["DO_VacRobotExtendUnloadEnable"].Value;
|
IO.DI["DI_VacRobotExtendUnloadEnableFB"].Value = IO.DO["DO_VacRobotExtendUnloadEnable"].Value;
|
||||||
|
|
||||||
|
|
||||||
IO.DI["DI_ATMRobotExtendUnloadEnableFB"].Value = IO.DO["DO_ATMRobotExtendUnloadEnable"].Value;
|
IO.DI["DI_ATMRobotExtendUnloadEnableFB"].Value = IO.DO["DO_ATMRobotExtendUnloadEnable"].Value;
|
||||||
IO.DI["DI_ATMRobotExtendLoadLSideEnableFB"].Value = IO.DO["DO_ATMRobotExtendLoaLSideEnable"].Value;
|
IO.DI["DI_ATMRobotExtendLoadLSideEnableFB"].Value = IO.DO["DO_ATMRobotExtendLoaLSideEnable"].Value;
|
||||||
IO.DI["DI_ATMRobotExtendLoadRSideEnableFB"].Value = IO.DO["DO_ATMRobotExtendLoaRSideEnable"].Value;
|
IO.DI["DI_ATMRobotExtendLoadRSideEnableFB"].Value = IO.DO["DO_ATMRobotExtendLoaRSideEnable"].Value;
|
||||||
|
|
||||||
|
|
||||||
IO.DI["DI_LoadSlowPumpFB"].Value = IO.DO["DO_LoadSlowPump"].Value;
|
IO.DI["DI_LoadSlowPumpFB"].Value = IO.DO["DO_LoadSlowPump"].Value;
|
||||||
IO.DI["DI_LoadFastPumpFB"].Value = IO.DO["DO_LoadFastPump"].Value;
|
IO.DI["DI_LoadFastPumpFB"].Value = IO.DO["DO_LoadFastPump"].Value;
|
||||||
IO.DI["DI_TMSlowPumpFB"].Value = IO.DO["DO_TMSlowPump"].Value;
|
IO.DI["DI_TMSlowPumpFB"].Value = IO.DO["DO_TMSlowPump"].Value;
|
||||||
@ -862,12 +800,10 @@ namespace SicSimulator.Instances
|
|||||||
IO.DI["DI_UnloadVentFB"].Value = IO.DO["DO_UnloadVent"].Value;
|
IO.DI["DI_UnloadVentFB"].Value = IO.DO["DO_UnloadVent"].Value;
|
||||||
IO.DI["DI_TMLoadBanlanceFB"].Value = IO.DO["DO_TMLoadBanlance"].Value;
|
IO.DI["DI_TMLoadBanlanceFB"].Value = IO.DO["DO_TMLoadBanlance"].Value;
|
||||||
|
|
||||||
|
|
||||||
IO.DI["DI_VacRobotExtenLoadEnableFB"].Value = IO.DO["DO_VacRobotExtenLoadEnable"].Value;
|
IO.DI["DI_VacRobotExtenLoadEnableFB"].Value = IO.DO["DO_VacRobotExtenLoadEnable"].Value;
|
||||||
IO.DI["DI_VacRobotExtendBufferEnableFB"].Value = IO.DO["DO_VacRobotExtendBufferEnable"].Value;
|
IO.DI["DI_VacRobotExtendBufferEnableFB"].Value = IO.DO["DO_VacRobotExtendBufferEnable"].Value;
|
||||||
IO.DI["DI_VacRobotExtendPMAEnableFB"].Value = IO.DO["DO_VacRobotExtendPMAEnable"].Value;
|
IO.DI["DI_VacRobotExtendPMAEnableFB"].Value = IO.DO["DO_VacRobotExtendPMAEnable"].Value;
|
||||||
|
|
||||||
|
|
||||||
if (IO.DO["DO_LoadLidLock"].Value != IO.DO["DO_LoadLidUnlock"].Value)
|
if (IO.DO["DO_LoadLidLock"].Value != IO.DO["DO_LoadLidUnlock"].Value)
|
||||||
{
|
{
|
||||||
time1++;
|
time1++;
|
||||||
@ -920,384 +856,75 @@ namespace SicSimulator.Instances
|
|||||||
}
|
}
|
||||||
|
|
||||||
//IO.DI["DI_LdRotationServoOn"].Value = IO.DO["DO_LdRotationServoOn"].Value;
|
//IO.DI["DI_LdRotationServoOn"].Value = IO.DO["DO_LdRotationServoOn"].Value;
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool[] _pre_DO_SpindleLoadAngleRun = new bool[2] { false, false };
|
|
||||||
private bool[] _pre_DO_SpindleHome = new bool[2] { false, false };
|
|
||||||
private bool[] _pre_DO_SpindleMoveSlot = new bool[2] { false, false };
|
|
||||||
|
|
||||||
private void PmMotion(string pm)
|
|
||||||
{
|
|
||||||
IO.DI[$"{pm}.DI_PMSlitValveCloseCompleted"].Value = IO.DI[$"TM.DI_PM{(pm == "PM1" ? "A" : "B")}SlitValveClose"].Value;
|
|
||||||
|
|
||||||
IO.DI[$"{pm}.DI_LockingCylinderLock"].Value = !IO.DO[$"{pm}.DO_LockingCylinderLockUnlock"].Value;
|
|
||||||
|
|
||||||
if (IO.DO[$"{pm}.DO_ChamLidMotorAUp"].Value)
|
|
||||||
{
|
|
||||||
IO.DI[$"{pm}.DI_PMChamberLidDownpositioning"].Value = true;
|
|
||||||
Task.Delay(2000).ContinueWith(x =>
|
|
||||||
{
|
|
||||||
IO.DI[$"{pm}.DI_PMChamberLidUppositioning"].Value = false;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IO.DO[$"{pm}.DO_ChamLidMotorADown"].Value)
|
|
||||||
{
|
|
||||||
IO.DI[$"{pm}.DI_PMChamberLidUppositioning"].Value = true;
|
|
||||||
Task.Delay(2000).ContinueWith(x =>
|
|
||||||
{
|
|
||||||
IO.DI[$"{pm}.DI_PMChamberLidDownpositioning"].Value = false;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
DelaySetDoToDi(pm, "DI_PMChamberLidTighten", "DO_ChamLidTighten");
|
|
||||||
DelaySetDoToDi(pm, "DI_PMChamberLidLoosen", "DO_ChamLidLoosen");
|
|
||||||
DelaySetDoToDi(pm, "DI_PMChamberLidSwingLock", "DO_ChamLidSwingLock");
|
|
||||||
DelaySetDoToDi(pm, "DI_PMChamberLidSwingUnLock", "DO_ChamLidSwingUnLock");
|
|
||||||
DelaySetDoToDi(pm, "DI_PMChamberLidLock", "DO_ChamLidLockPL");
|
|
||||||
DelaySetDoToDi(pm, "DI_PMChamberLidUnLock", "DO_ChamLidUnLockPL");
|
|
||||||
|
|
||||||
//磁流体仿真
|
|
||||||
int temp = pm == "PM1" ? 0 : 1;
|
|
||||||
|
|
||||||
if (!_pre_DO_SpindleHome[temp] && IO.DO[$"{pm}.DO_SpindleHome"].Value)
|
|
||||||
{
|
|
||||||
IO.DI[$"{pm}.DI_SpindleHomeFinish"].Value = false;
|
|
||||||
Task.Delay(1000).ContinueWith(x =>
|
|
||||||
{
|
|
||||||
IO.AI[$"{pm}.AI_SpindleCurrentPosition"].Value = 0;
|
|
||||||
IO.DI[$"{pm}.DI_SpindleHomeFinish"].Value = true;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
_pre_DO_SpindleHome[temp] = IO.DO[$"{pm}.DO_SpindleHome"].Value;
|
|
||||||
|
|
||||||
if (!_pre_DO_SpindleLoadAngleRun[temp] && IO.DO[$"{pm}.DO_SpindleLoadAngleRun"].Value)
|
|
||||||
{
|
|
||||||
IO.DI[$"{pm}.DI_SpindlePositionComplete"].Value = false;
|
|
||||||
Task.Delay(2000).ContinueWith(x =>
|
|
||||||
{
|
|
||||||
IO.AI[$"{pm}.AI_SpindleCurrentPosition"].Value += IO.AO[$"{pm}.AO_SpindleLoadAngle"].Value;
|
|
||||||
if (IO.AI[$"{pm}.AI_SpindleCurrentPosition"].Value >= 360)
|
|
||||||
{
|
|
||||||
IO.AI[$"{pm}.AI_SpindleCurrentPosition"].Value -= 360;
|
|
||||||
}
|
|
||||||
IO.DI[$"{pm}.DI_SpindlePositionComplete"].Value = true;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
_pre_DO_SpindleLoadAngleRun[temp] = IO.DO[$"{pm}.DO_SpindleLoadAngleRun"].Value;
|
|
||||||
|
|
||||||
if (!_pre_DO_SpindleMoveSlot[temp] && IO.DO[$"{pm}.DO_SpindleMoveSlot"].Value)
|
|
||||||
{
|
|
||||||
IO.AI[$"{pm}.AI_SpindleActualSlot"].Value = 0;
|
|
||||||
Task.Delay(2000).ContinueWith(x =>
|
|
||||||
{
|
|
||||||
var s = (int)IO.AO[$"{pm}.AO_SpindleSlot"].Value;
|
|
||||||
if (s > 0 && s < 9)
|
|
||||||
{
|
|
||||||
IO.AI[$"{pm}.AI_SpindleCurrentPosition"].Value = IO.AO[$"{pm}.AO_SpindlePosition{s}"].Value;
|
|
||||||
IO.AI[$"{pm}.AI_SpindleActualSlot"].Value = s;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
_pre_DO_SpindleMoveSlot[temp] = IO.DO[$"{pm}.DO_SpindleMoveSlot"].Value;
|
|
||||||
|
|
||||||
//shutter仿真
|
|
||||||
if (IO.DO[$"{pm}.DO_ShutterUp"].Value)
|
|
||||||
{
|
|
||||||
Task.Delay(2000).ContinueWith(x =>
|
|
||||||
{
|
|
||||||
IO.DI[$"{pm}.DI_ShutterUp"].Value = true;
|
|
||||||
IO.DI[$"{pm}.DI_ShutterDown"].Value = false;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (IO.DO[$"{pm}.DO_ShutterDown"].Value)
|
|
||||||
{
|
|
||||||
Task.Delay(2000).ContinueWith(x =>
|
|
||||||
{
|
|
||||||
IO.DI[$"{pm}.DI_ShutterUp"].Value = false;
|
|
||||||
IO.DI[$"{pm}.DI_ShutterDown"].Value = true;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (IO.DO[$"{pm}.DO_ShutterForward"].Value)
|
|
||||||
{
|
|
||||||
Task.Delay(2000).ContinueWith(x =>
|
|
||||||
{
|
|
||||||
IO.DI[$"{pm}.DI_ShutterForward"].Value = true;
|
|
||||||
IO.DI[$"{pm}.DI_ShutterBackward"].Value = false;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (IO.DO[$"{pm}.DO_ShutterBackward"].Value)
|
|
||||||
{
|
|
||||||
Task.Delay(2000).ContinueWith(x =>
|
|
||||||
{
|
|
||||||
IO.DI[$"{pm}.DI_ShutterForward"].Value = false;
|
|
||||||
IO.DI[$"{pm}.DI_ShutterBackward"].Value = true;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
////V99仿真
|
|
||||||
//if (IO.DO[$"{pm}.DO_PMPressureRelief"].Value && !IO.DO[$"{pm}.DO_PMPressureReliefClose"].Value)
|
|
||||||
//{
|
|
||||||
// IO.DI[$"{pm}.DI_PMPressureReliefOpenFB"].Value = true;
|
|
||||||
// IO.DI[$"{pm}.DI_PMPressureReliefCloseFB"].Value = false;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//if (IO.DO[$"{pm}.DO_PMPressureReliefClose"].Value && !IO.DO[$"{pm}.DO_PMPressureRelief"].Value)
|
|
||||||
//{
|
|
||||||
// IO.DI[$"{pm}.DI_PMPressureReliefOpenFB"].Value = false;
|
|
||||||
// IO.DI[$"{pm}.DI_PMPressureReliefCloseFB"].Value = true;
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void DelaySetDoToDi(string pm, string diName, string doName)
|
|
||||||
{
|
|
||||||
if (!IO.DO[$"{pm}.{doName}"].Value)
|
|
||||||
{
|
|
||||||
IO.DI[$"{pm}.{diName}"].Value = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (IO.DI[$"{pm}.{diName}"].Value != IO.DO[$"{pm}.{doName}"].Value)
|
|
||||||
{
|
|
||||||
Task.Delay(2000).ContinueWith(x =>
|
|
||||||
{
|
|
||||||
IO.DI[$"{pm}.{diName}"].Value = IO.DO[$"{pm}.{doName}"].Value;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void MonitorTVPm(string pm)
|
|
||||||
{
|
|
||||||
IO.AI[$"{pm}.AI_ButterflyValveActualMode"].Value = IO.AO[$"{pm}.AO_ButterflyValveSetMode"].Value;
|
|
||||||
//IO.AI[$"{pm}.AI_HeartBeat"].Value = IO.AO[$"{pm}.AO_HeartBeat"].Value;
|
|
||||||
|
|
||||||
IO.AI[$"{pm}.AI_ButterflyValveActualPosition"].Value = IO.AO[$"{pm}.AO_ButterflyValveSetPosition"].Value;
|
|
||||||
|
|
||||||
var mode = IO.AO[$"{pm}.AO_ButterflyValveSetMode"].Value;
|
|
||||||
//蝶阀开启,跟着蝶阀的设置值走
|
|
||||||
if (IO.DO[$"{pm}.DO_ButterflyEnable"].Value)
|
|
||||||
{
|
|
||||||
if (mode == 5)
|
|
||||||
{
|
|
||||||
if (IO.AI[$"{pm}.AI_ButterflyValveActualPressure"].Value > IO.AO[$"{pm}.AO_ButterflyValveSetPressure"].Value)
|
|
||||||
{
|
|
||||||
if (IO.AI[$"{pm}.AI_ButterflyValveActualPressure"].Value - 30 > IO.AO[$"{pm}.AO_ButterflyValveSetPressure"].Value)
|
|
||||||
{
|
|
||||||
IO.AI[$"{pm}.AI_ButterflyValveActualPressure"].Value -= 30;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
IO.AI[$"{pm}.AI_ButterflyValveActualPressure"].Value = IO.AO[$"{pm}.AO_ButterflyValveSetPressure"].Value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (IO.AI[$"{pm}.AI_ButterflyValveActualPressure"].Value < IO.AO[$"{pm}.AO_ButterflyValveSetPressure"].Value)
|
|
||||||
{
|
|
||||||
if (IO.AI[$"{pm}.AI_ButterflyValveActualPressure"].Value + 10 < IO.AO[$"{pm}.AO_ButterflyValveSetPressure"].Value)
|
|
||||||
{
|
|
||||||
IO.AI[$"{pm}.AI_ButterflyValveActualPressure"].Value += 10;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
IO.AI[$"{pm}.AI_ButterflyValveActualPressure"].Value = IO.AO[$"{pm}.AO_ButterflyValveSetPressure"].Value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
IO.AI[$"{pm}.AI_PMChamberPressure"].Value = IO.AI[$"{pm}.AI_ButterflyValveActualPressure"].Value;
|
|
||||||
}
|
|
||||||
if (mode == 2)
|
|
||||||
{
|
|
||||||
if (IO.AO[$"{pm}.AO_ButterflyValveSetPosition"].Value > 0)
|
|
||||||
{
|
|
||||||
if (IO.AI[$"{pm}.AI_ButterflyValveActualPressure"].Value > 0)
|
|
||||||
{
|
|
||||||
IO.AI[$"{pm}.AI_ButterflyValveActualPressure"].Value -= (IO.AO[$"{pm}.AO_ButterflyValveSetPosition"].Value) / 8;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
IO.AI[$"{pm}.AI_ButterflyValveActualPressure"].Value = 0;
|
|
||||||
}
|
|
||||||
IO.AI[$"{pm}.AI_PMChamberPressure"].Value = IO.AI[$"{pm}.AI_ButterflyValveActualPressure"].Value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
bool fontMfc = false;
|
|
||||||
for (int i = 70; i <= 89; i++)
|
|
||||||
{
|
|
||||||
if (IO.AI[$"{pm}.AI_M{i}"].Value > 100)
|
|
||||||
{
|
|
||||||
fontMfc = true;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fontMfc)
|
|
||||||
{
|
|
||||||
if (IO.AI[$"{pm}.AI_ButterflyValveActualPressure"].Value < 1200)
|
|
||||||
{
|
|
||||||
IO.AI[$"{pm}.AI_ButterflyValveActualPressure"].Value += 10;
|
|
||||||
}
|
|
||||||
IO.AI[$"{pm}.AI_PMChamberPressure"].Value = IO.AI[$"{pm}.AI_ButterflyValveActualPressure"].Value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//蝶阀Ramp有Bug,设置AO值可以化解
|
|
||||||
//if (IO.AI[$"{pm}.AI_ButterflyValveActualPressure"].Value >= 1100)
|
|
||||||
//{
|
|
||||||
// IO.AO[$"{pm}.AO_ButterflyValveSetPressure"].Value = IO.AI[$"{pm}.AI_ButterflyValveActualPressure"].Value;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//string s = pm == "PM1" ? "A" : "B";
|
|
||||||
//if (IO.DI[$"TM.DI_TMPM{s}BanlanceFB"].Value || IO.DI[$"TM.DI_PM{s}GateValveOpen"].Value)
|
|
||||||
//{
|
|
||||||
// var v1 = IO.AI[$"{pm}.AI_PMChamberPressure"].Value;
|
|
||||||
// var v2 = IO.AI[$"TM.AI_TMChamberPressure"].Value;
|
|
||||||
// if (v1 > v2)
|
|
||||||
// {
|
|
||||||
// IO.AI[$"TM.AI_TMChamberPressure"].Value = v1;
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// IO.AI[$"{pm}.AI_PMChamberPressure"].Value = v2;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
//else
|
|
||||||
// IO.AI[$"{pm}.AI_PMChamberPressure"].Value = IO.AI[$"{pm}.AI_ButterflyValveActualPressure"].Value;
|
|
||||||
|
|
||||||
//V27自动打开
|
|
||||||
//if (IO.AI[$"{pm}.AI_ChamPress"].Value > 1020 && IO.DO[$"{pm}.DO_PumpBypass(V27)"].Value != true)
|
|
||||||
//{
|
|
||||||
// IO.DO[$"{pm}.DO_PumpBypass(V27)"].Value = true;
|
|
||||||
//}
|
|
||||||
//if (IO.AI[$"{pm}.AI_ChamPress"].Value < 900 && IO.DO[$"{pm}.DO_PumpBypass(V27)"].Value)
|
|
||||||
//{
|
|
||||||
// IO.DO[$"{pm}.DO_PumpBypass(V27)"].Value = false;
|
|
||||||
//}
|
|
||||||
|
|
||||||
if (IO.DO[$"{pm}.DO_SpindleSpeedRun"].Value)
|
|
||||||
{
|
|
||||||
IO.AI[$"{pm}.AI_SpindleCurrentSpeed"].Value = IO.AO[$"{pm}.AO_SpindleVelocity"].Value;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
IO.AI[$"{pm}.AI_SpindleCurrentSpeed"].Value = 0;
|
|
||||||
|
|
||||||
//设置PT2的压力比PT1的小20
|
|
||||||
var pt2 = IO.AI[$"{pm}.AI_PMChamberPressure"].Value - 20;
|
|
||||||
if (pt2 > 0)
|
|
||||||
{
|
|
||||||
IO.AI[$"{pm}.AI_ColdtrapExitPressure"].Value = pt2;
|
|
||||||
}
|
|
||||||
IO.AI[$"{pm}.AI_ColdtrapExitPressure"].Value = IO.AI[$"{pm}.AI_PMChamberPressure"].Value - 20 > 0 ? IO.AI[$"{pm}.AI_PMChamberPressure"].Value - 20 : 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MonitorValve(string pm)
|
private void MonitorValve(string pm)
|
||||||
{
|
{
|
||||||
|
IO.DI[$"{pm}.DI_MoCO6CarrierOutletFB(V18)"].Value = IO.DO[$"{pm}.DO_MoCO6CarrierOutlet(V18)"].Value;
|
||||||
IO.DI[$"{pm}.DI_DORPressATMSW"].Value = IO.DI[$"{pm}.DI_DORRefillFB(V76)"].Value;
|
IO.DI[$"{pm}.DI_MoCO6BypassFB(V19)"].Value = IO.DO[$"{pm}.DO_MoCO6Bypass(V19)"].Value;
|
||||||
IO.DI[$"{pm}.DI_PSUEnableFB"].Value = IO.DO[$"{pm}.DO_HeaterEnable"].Value;
|
IO.DI[$"{pm}.DI_MoCO6InOutLeakTestFB(V20)"].Value = IO.DO[$"{pm}.DO_MoCO6InOutLeakTest(V20)"].Value;
|
||||||
|
IO.DI[$"{pm}.DI_MoResrvCarrierOutletFB(V21)"].Value = IO.DO[$"{pm}.DO_MoResrvCarrierOutlet(V21)"].Value;
|
||||||
IO.DI[$"{pm}.DI_InnerHeaterEnableFB"].Value = IO.DO[$"{pm}.DO_PSU1Enable"].Value;
|
IO.DI[$"{pm}.DI_MoResrvBypassFB(V22)"].Value = IO.DO[$"{pm}.DO_MoResrvBypass(V22)"].Value;
|
||||||
IO.DI[$"{pm}.DI_MiddleHeaterEnableFB"].Value = IO.DO[$"{pm}.DO_PSU2Enable"].Value;
|
IO.DI[$"{pm}.DI_MoResrvInoutLeakTestFB(V23)"].Value = IO.DO[$"{pm}.DO_MoResrvInoutLeakTest(V23)"].Value;
|
||||||
IO.DI[$"{pm}.DI_OuterHeaterEnableFB"].Value = IO.DO[$"{pm}.DO_PSU3Enable"].Value;
|
IO.DI[$"{pm}.DI_SideLeakIsolateFB(V25)"].Value = IO.DO[$"{pm}.DO_SideLeakIsolate(V25)"].Value;
|
||||||
|
IO.DI[$"{pm}.DI_PMLeakTestIsolateFB(V27)"].Value = IO.DO[$"{pm}.DO_PMLeakTestIsolate(V27)"].Value;
|
||||||
//IO.DI[$"{pm}.DI_SCR1Status"].Value = IO.DO[$"{pm}.DO_SCR1Enable"].Value;
|
IO.DI[$"{pm}.DI_H2InletCutOffFB(V31)"].Value = IO.DO[$"{pm}.DO_H2InletCutOff(V31)"].Value;
|
||||||
//IO.DI[$"{pm}.DI_SCR2Status"].Value = IO.DO[$"{pm}.DO_SCR2Enable"].Value;
|
IO.DI[$"{pm}.DI_N2InletCutOffFB(V32)"].Value = IO.DO[$"{pm}.DO_N2InletCutOff(V32)"].Value;
|
||||||
//IO.DI[$"{pm}.DI_SCR3Status"].Value = IO.DO[$"{pm}.DO_SCR3Enable"].Value;
|
IO.DI[$"{pm}.DI_SHH2ArSupplyFB(V33)"].Value = IO.DO[$"{pm}.DO_SHH2ArSupply(V33)"].Value;
|
||||||
|
IO.DI[$"{pm}.DI_PushGasSupplyFB(V35)"].Value = IO.DO[$"{pm}.DO_PushGasSupply(V35)"].Value;
|
||||||
|
IO.DI[$"{pm}.DI_RunVentGasSupplyFB(V36)"].Value = IO.DO[$"{pm}.DO_RunVentGasSupply(V36)"].Value;
|
||||||
|
IO.DI[$"{pm}.DI_O2CarrierSourceFB(V37)"].Value = IO.DO[$"{pm}.DO_O2CarrierSource(V37)"].Value;
|
||||||
IO.DI[$"{pm}.DI_ChamMoveBodyUpDownEnableFB"].Value = IO.DO[$"{pm}.DO_ChamMoveBodyUpDownEnable"].Value;
|
IO.DI[$"{pm}.DI_MoCO6RunVentFB(V39)"].Value = IO.DO[$"{pm}.DO_MoCO6RunVent(V39)"].Value;
|
||||||
|
IO.DI[$"{pm}.DI_MoResrvRunVentFB(V40)"].Value = IO.DO[$"{pm}.DO_MoResrvRunVent(V40)"].Value;
|
||||||
IO.DI[$"{pm}.DI_ArSafetyBypassFB(V19)"].Value = IO.DO[$"{pm}.DO_ArSafetyBypass(V19)"].Value;
|
IO.DI[$"{pm}.DI_WCO6RunFB(V41)"].Value = IO.DO[$"{pm}.DO_WCO6Run(V41)"].Value;
|
||||||
IO.DI[$"{pm}.DI_H2SupplyFB(V30)"].Value = IO.DO[$"{pm}.DO_H2Supply(V30)"].Value;
|
IO.DI[$"{pm}.DI_WCO6VentFB(V42)"].Value = IO.DO[$"{pm}.DO_WCO6Vent(V42)"].Value;
|
||||||
IO.DI[$"{pm}.DI_PumpBypassFB(V27)"].Value = IO.DO[$"{pm}.DO_PumpBypass(V27)"].Value;
|
IO.DI[$"{pm}.DI_WCO6CarrierFB(V43)"].Value = IO.DO[$"{pm}.DO_WCO6Carrier(V43)"].Value;
|
||||||
IO.DI[$"{pm}.DI_H2SupplyFB(V31)"].Value = IO.DO[$"{pm}.DO_H2Supply(V31)"].Value;
|
IO.DI[$"{pm}.DI_WCO6BypassFB(V45)"].Value = IO.DO[$"{pm}.DO_WCO6Bypass(V45)"].Value;
|
||||||
IO.DI[$"{pm}.DI_ArSupplyFB(V32)"].Value = IO.DO[$"{pm}.DO_ArSupply(V32)"].Value;
|
IO.DI[$"{pm}.DI_WCO6InLeakTestFB(V46)"].Value = IO.DO[$"{pm}.DO_WCO6InLeakTest(V46)"].Value;
|
||||||
IO.DI[$"{pm}.DI_SHH2/ArSwitchFB(V33)"].Value = IO.DO[$"{pm}.DO_SHH2/ArSwitch(V33)"].Value;
|
IO.DI[$"{pm}.DI_O2RunVentFB(V47)"].Value = IO.DO[$"{pm}.DO_O2RunVent(V47)"].Value;
|
||||||
IO.DI[$"{pm}.DI_H2ArLine1FB(V35)"].Value = IO.DO[$"{pm}.DO_H2ArLine1(V35)"].Value;
|
IO.DI[$"{pm}.DI_CS2CarrierFB(V48)"].Value = IO.DO[$"{pm}.DO_CS2Carrier(V48)"].Value;
|
||||||
IO.DI[$"{pm}.DI_H2ArLine2FB(V36)"].Value = IO.DO[$"{pm}.DO_H2ArLine2(V36)"].Value;
|
IO.DI[$"{pm}.DI_CS2BypassFB(V49)"].Value = IO.DO[$"{pm}.DO_CS2Bypass(V49)"].Value;
|
||||||
//IO.DI[$"{pm}.DI_DoppingDilute_FB"].Value = IO.DO[$"{pm}.DO_HighN2Flow"].Value;
|
IO.DI[$"{pm}.DI_CS2InOutLeakTestFB(V50)"].Value = IO.DO[$"{pm}.DO_CS2InOutLeakTest(V50)"].Value;
|
||||||
IO.DI[$"{pm}.DI_H2ArLine2FB(V36)"].Value = IO.DO[$"{pm}.DO_H2ArLine2(V36)"].Value;
|
IO.DI[$"{pm}.DI_H2SSourceCarrierFB(V51)"].Value = IO.DO[$"{pm}.DO_H2SSourceCarrier(V51)"].Value;
|
||||||
IO.DI[$"{pm}.DI_N2SourceFB(V38)"].Value = IO.DO[$"{pm}.DO_N2Source(V38)"].Value;
|
IO.DI[$"{pm}.DI_H2SeSourceCarrierFB(V52)"].Value = IO.DO[$"{pm}.DO_H2SeSourceCarrier(V52)"].Value;
|
||||||
IO.DI[$"{pm}.DI_TMASourceFB(V100)"].Value = IO.DO[$"{pm}.DO_TMASource(V100)"].Value;
|
IO.DI[$"{pm}.DI_CS2RunVentFB(V53)"].Value = IO.DO[$"{pm}.DO_CS2RunVent(V53)"].Value;
|
||||||
|
IO.DI[$"{pm}.DI_H2SRunVentFB(V54)"].Value = IO.DO[$"{pm}.DO_H2SRunVent(V54)"].Value;
|
||||||
IO.DI[$"{pm}.DI_HighN2Run/VentFB(V40)"].Value = IO.DO[$"{pm}.DO_HighN2Run/Vent(V40)"].Value;
|
IO.DI[$"{pm}.DI_H2SeRunFB(V55)"].Value = IO.DO[$"{pm}.DO_H2SeRun(V55)"].Value;
|
||||||
IO.DI[$"{pm}.DI_TMARunFB(V41)"].Value = IO.DO[$"{pm}.DO_TMARun(V41)"].Value;
|
IO.DI[$"{pm}.DI_H2SeVentFB(V56)"].Value = IO.DO[$"{pm}.DO_H2SeVent(V56)"].Value;
|
||||||
IO.DI[$"{pm}.DI_TMAVentFB(V42)"].Value = IO.DO[$"{pm}.DO_TMAVent(V42)"].Value;
|
IO.DI[$"{pm}.DI_SO2SourceCarrierFB(V58)"].Value = IO.DO[$"{pm}.DO_SO2SourceCarrier(V58)"].Value;
|
||||||
IO.DI[$"{pm}.DI_TMAReleaseFB(V43)"].Value = IO.DO[$"{pm}.DO_TMARelease(V43)"].Value;
|
IO.DI[$"{pm}.DI_SO2RunVentFB(V59)"].Value = IO.DO[$"{pm}.DO_SO2RunVent(V59)"].Value;
|
||||||
IO.DI[$"{pm}.DI_TMABypassFB(V45)"].Value = IO.DO[$"{pm}.DO_TMABypass(V45)"].Value;
|
IO.DI[$"{pm}.DI_SO2VentFB(V60)"].Value = IO.DO[$"{pm}.DO_SO2Vent(V60)"].Value;
|
||||||
IO.DI[$"{pm}.DI_TMAVacFB(V46)"].Value = IO.DO[$"{pm}.DO_TMAVac(V46)"].Value;
|
IO.DI[$"{pm}.DI_Run1MoWFB(V61)"].Value = IO.DO[$"{pm}.DO_Run1MoW(V61)"].Value;
|
||||||
IO.DI[$"{pm}.DI_TCSReleaseFB(V48)"].Value = IO.DO[$"{pm}.DO_TCSRelease(V48)"].Value;
|
IO.DI[$"{pm}.DI_Run2SSeFB(V62)"].Value = IO.DO[$"{pm}.DO_Run2SSe(V62)"].Value;
|
||||||
IO.DI[$"{pm}.DI_TCSBypassFB(V49)"].Value = IO.DO[$"{pm}.DO_TCSBypass(V49)"].Value;
|
IO.DI[$"{pm}.DI_Run3O2SO2FB(V63)"].Value = IO.DO[$"{pm}.DO_Run3O2SO2(V63)"].Value;
|
||||||
IO.DI[$"{pm}.DI_TCSVacFB(V50)"].Value = IO.DO[$"{pm}.DO_TCSVac(V50)"].Value;
|
IO.DI[$"{pm}.DI_SHPurgeH2FB(V66)"].Value = IO.DO[$"{pm}.DO_SHPurgeH2(V66)"].Value;
|
||||||
IO.DI[$"{pm}.DI_HCLSwitchFB(V51)"].Value = IO.DO[$"{pm}.DO_HCLSwitch(V51)"].Value;
|
IO.DI[$"{pm}.DI_SHPurgeN2FB(V67)"].Value = IO.DO[$"{pm}.DO_SHPurgeN2(V67)"].Value;
|
||||||
IO.DI[$"{pm}.DI_SiH4SwitchFB(V52)"].Value = IO.DO[$"{pm}.DO_SiH4Switch(V52)"].Value;
|
IO.DI[$"{pm}.DI_PMPurgeN2FB(V68)"].Value = IO.DO[$"{pm}.DO_PMPurgeN2(V68)"].Value;
|
||||||
IO.DI[$"{pm}.DI_TCSRun/VentFB(V53)"].Value = IO.DO[$"{pm}.DO_TCSRun/Vent(V53)"].Value;
|
IO.DI[$"{pm}.DI_SrcLeakTestPreFilterFB(V69)"].Value = IO.DO[$"{pm}.DO_SrcLeakTestPreFilter(V69)"].Value;
|
||||||
IO.DI[$"{pm}.DI_HCLRun/VentFB(V54)"].Value = IO.DO[$"{pm}.DO_HCLRun/Vent(V54)"].Value;
|
IO.DI[$"{pm}.DI_PMTMBalanceFB(V70)"].Value = IO.DO[$"{pm}.DO_PMTMBalance(V70)"].Value;
|
||||||
IO.DI[$"{pm}.DI_SiH4RunFB(V55)"].Value = IO.DO[$"{pm}.DO_SiH4Run(V55)"].Value;
|
IO.DI[$"{pm}.DI_VentGasDumpFB(V72)"].Value = IO.DO[$"{pm}.DO_VentGasDump(V72)"].Value;
|
||||||
IO.DI[$"{pm}.DI_SiH4VentFB(V56)"].Value = IO.DO[$"{pm}.DO_SiH4Vent(V56)"].Value;
|
IO.DI[$"{pm}.DI_SrcLeakTestPrePumpFB(V73)"].Value = IO.DO[$"{pm}.DO_SrcLeakTestPrePump(V73)"].Value;
|
||||||
IO.DI[$"{pm}.DI_DoppingN2Final(V57)"].Value = IO.DO[$"{pm}.DO_DoppingN2Final(V57)"].Value;
|
IO.DI[$"{pm}.DI_GasboxLeakTestFB(V74)"].Value = IO.DO[$"{pm}.DO_GasboxLeakTest(V74)"].Value;
|
||||||
IO.DI[$"{pm}.DI_C2H4SwitchFB(V58)"].Value = IO.DO[$"{pm}.DO_C2H4Switch(V58)"].Value;
|
IO.DI[$"{pm}.DI_DORVacuumFB(V75)"].Value = IO.DO[$"{pm}.DO_DORVacuum(V75)"].Value;
|
||||||
IO.DI[$"{pm}.DI_C2H4RunFB(V59)"].Value = IO.DO[$"{pm}.DO_C2H4Run(V59)"].Value;
|
IO.DI[$"{pm}.DI_DORPressureReliefFB(V76)"].Value = IO.DO[$"{pm}.DO_DORPressureRelief(V76)"].Value;
|
||||||
IO.DI[$"{pm}.DI_C2H4VentFB(V60)"].Value = IO.DO[$"{pm}.DO_C2H4Vent(V60)"].Value;
|
IO.DI[$"{pm}.DI_FinalSHPurgeFB(V87)"].Value = IO.DO[$"{pm}.DO_FinalSHPurge(V87)"].Value;
|
||||||
IO.DI[$"{pm}.DI_DoppingFinalFB(V61)"].Value = IO.DO[$"{pm}.DO_DoppingFinal(V61)"].Value;
|
IO.DI[$"{pm}.DI_FinalOuterGasFB(V88)"].Value = IO.DO[$"{pm}.DO_FinalOuterGas(V88)"].Value;
|
||||||
IO.DI[$"{pm}.DI_SilaneFinalFB(V62)"].Value = IO.DO[$"{pm}.DO_SilaneFinal(V62)"].Value;
|
IO.DI[$"{pm}.DI_FinalInnerGasFB(V89)"].Value = IO.DO[$"{pm}.DO_FinalInnerGas(V89)"].Value;
|
||||||
IO.DI[$"{pm}.DI_PropaneFinalFB(V63)"].Value = IO.DO[$"{pm}.DO_PropaneFinal(V63)"].Value;
|
IO.DI[$"{pm}.DI_FinalMiddleGasFB(V90)"].Value = IO.DO[$"{pm}.DO_FinalMiddleGas(V90)"].Value;
|
||||||
IO.DI[$"{pm}.DI_CarrierGasH2FB(V64)"].Value = IO.DO[$"{pm}.DO_CarrierGasH2(V64)"].Value;
|
IO.DI[$"{pm}.DI_FinalOpticPurgeFB(V91)"].Value = IO.DO[$"{pm}.DO_FinalOpticPurge(V91)"].Value;
|
||||||
IO.DI[$"{pm}.DI_CarrierGasArFB(V65)"].Value = IO.DO[$"{pm}.DO_CarrierGasAr(V65)"].Value;
|
IO.DI[$"{pm}.DI_FinalGasRingFB(V92)"].Value = IO.DO[$"{pm}.DO_FinalGasRing(V92)"].Value;
|
||||||
|
IO.DI[$"{pm}.DI_FinalChamberPurgeFB(V93)"].Value = IO.DO[$"{pm}.DO_FinalChamberPurge(V93)"].Value;
|
||||||
//IO.DI[$"{pm}.DI_GasRingH2Purge_FB"].Value = IO.DO[$"{pm}.DO_GasRingH2Purge"].Value;
|
IO.DI[$"{pm}.DI_FinalRotationPurgeFB(V94)"].Value = IO.DO[$"{pm}.DO_FinalRotationPurge(V94)"].Value;
|
||||||
//IO.DI[$"{pm}.DI_GasRingArPurge_FB"].Value = IO.DO[$"{pm}.DO_GasRingArPurge"].Value;
|
IO.DI[$"{pm}.DI_FinalShutterPurgeFB(V95)"].Value = IO.DO[$"{pm}.DO_FinalShutterPurge(V95)"].Value;
|
||||||
IO.DI[$"{pm}.DI_ChamBodyArPurgeFB(V68)"].Value = IO.DO[$"{pm}.DO_ChamBodyArPurge(V68)"].Value;
|
IO.DI[$"{pm}.DI_FinalHeaterWFPurgeFB(V96)"].Value = IO.DO[$"{pm}.DO_FinalHeaterWFPurge(V96)"].Value;
|
||||||
IO.DI[$"{pm}.DI_ReactorLeakCheckFB(V69)"].Value = IO.DO[$"{pm}.DO_ReactorLeakCheck(V69)"].Value;
|
IO.DI[$"{pm}.DI_FinalCarryGasFB(V97)"].Value = IO.DO[$"{pm}.DO_FinalCarryGas(V97)"].Value;
|
||||||
IO.DI[$"{pm}.DI_TMPressBalanceFB(V70)"].Value = IO.DO[$"{pm}.DO_TMPressBalance(V70)"].Value;
|
IO.DI[$"{pm}.DI_EPV1FB"].Value = IO.DO[$"{pm}.DO_EPV1"].Value;
|
||||||
IO.DI[$"{pm}.DI_CarryGasFinalFB(V97)"].Value = IO.DO[$"{pm}.DO_CarryGasFinal(V97)"].Value;
|
IO.DI[$"{pm}.DI_EPV2FB"].Value = IO.DO[$"{pm}.DO_EPV2"].Value;
|
||||||
IO.DI[$"{pm}.DI_GasBoxVentPumpFB(V72)"].Value = IO.DO[$"{pm}.DO_GasBoxVentPump(V72)"].Value;
|
|
||||||
IO.DI[$"{pm}.DI_MOVacFB(V73)"].Value = IO.DO[$"{pm}.DO_MOVac(V73)"].Value;
|
|
||||||
IO.DI[$"{pm}.DI_GasboxLeakCheckFB(V74)"].Value = IO.DO[$"{pm}.DO_GasboxLeakCheck(V74)"].Value;
|
|
||||||
IO.DI[$"{pm}.DI_DORVacFB(V75)"].Value = IO.DO[$"{pm}.DO_DORVac(V75)"].Value;
|
|
||||||
IO.DI[$"{pm}.DI_DORRefillFB(V76)"].Value = IO.DO[$"{pm}.DO_DORRefill(V76)"].Value;
|
|
||||||
IO.DI[$"{pm}.DI_SHPurgeFinalFB(V87)"].Value = IO.DO[$"{pm}.DO_SHPurgeFinal(V87)"].Value;
|
|
||||||
IO.DI[$"{pm}.DI_OuterGasFinalFB(V88)"].Value = IO.DO[$"{pm}.DO_OuterGasFinal(V88)"].Value;
|
|
||||||
IO.DI[$"{pm}.DI_InnerGasFinalFB(V89)"].Value = IO.DO[$"{pm}.DO_InnerGasFinal(V89)"].Value;
|
|
||||||
IO.DI[$"{pm}.DI_MiddleGasFinalFB(V90)"].Value = IO.DO[$"{pm}.DO_MiddleGasFinal(V90)"].Value;
|
|
||||||
IO.DI[$"{pm}.DI_OpticPurgeFinalFB(V91)"].Value = IO.DO[$"{pm}.DO_GasRingPurgeFinal(V92)"].Value;
|
|
||||||
IO.DI[$"{pm}.DI_GasRingPurgeFinalFB(V92)"].Value = IO.DO[$"{pm}.DO_OpticPurgeFinal(V91)"].Value;
|
|
||||||
IO.DI[$"{pm}.DI_ChamberPurgeFinalFB(V93)"].Value = IO.DO[$"{pm}.DO_ChamberPurgeFinal(V93)"].Value;
|
|
||||||
IO.DI[$"{pm}.DI_RotationUpPurgeFinalFB(V94)"].Value = IO.DO[$"{pm}.DO_RotationUpPurgeFinal(V94)"].Value;
|
|
||||||
IO.DI[$"{pm}.DI_ConfinementRingFinalFB(V95)"].Value = IO.DO[$"{pm}.DO_ConfinementRingFinal(V95)"].Value;
|
|
||||||
IO.DI[$"{pm}.DI_HeaterWFFinalFB(V96)"].Value = IO.DO[$"{pm}.DO_HeaterWFFinal(V96)"].Value;
|
|
||||||
IO.DI[$"{pm}.DI_HeaterWFFinalFB(V96)"].Value = IO.DO[$"{pm}.DO_HeaterWFFinal(V96)"].Value;
|
|
||||||
IO.DI[$"{pm}.DI_N2SwitchFB(V37)"].Value = IO.DO[$"{pm}.DO_N2Switch(V37)"].Value;
|
|
||||||
IO.DI[$"{pm}.DI_TMASourceFB(V100)"].Value = IO.DO[$"{pm}.DO_TMASource(V100)"].Value;
|
|
||||||
|
|
||||||
IO.DI[$"{pm}.DI_NdopeDiluteVentFB(V103)"].Value = IO.DO[$"{pm}.DO_NdopeDiluteVent(V103)"].Value;
|
|
||||||
IO.DI[$"{pm}.DI_PdopeDiluteVentFB(V105)"].Value = IO.DO[$"{pm}.DO_PdopeDiluteVent(V105)"].Value;
|
|
||||||
//diOpen = "DI_PN2Run/VentFB(V47)" doOpen = "DO_PN2Run/Vent(V47)"
|
|
||||||
//IO.DI[$"{pm}.DI_CarrierGasH2_FB"].Value = IO.DO[$"{pm}.DO_CarrierGasH2"].Value;
|
|
||||||
//IO.DI[$"{pm}.DI_CarrierGasAr_FB"].Value = IO.DO[$"{pm}.DO_CarrierGasAr"].Value;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
IO.DI[$"{pm}.DI_OpticPurgeFinalFB(V91)"].Value = IO.DO[$"{pm}.DO_OpticPurgeFinal(V91)"].Value;
|
|
||||||
IO.DI[$"{pm}.DI_GasRingPurgeFinalFB(V92)"].Value = IO.DO[$"{pm}.DO_GasRingPurgeFinal(V92)"].Value;
|
|
||||||
|
|
||||||
//IO.DI[$"{pm}.DI_GasBoxVentBypass"].Value = IO.DO[$"{pm}.DO_GasBoxVentBypass(V25)"].Value;
|
|
||||||
//IO.DI[$"{pm}.DI_C2H4SwitchHTPurge"].Value = IO.DO[$"{pm}.DO_C2H4SwitchHTPurge"].Value;
|
|
||||||
|
|
||||||
IO.DI[$"{pm}.DI_EPV1-1FB"].Value = IO.DO[$"{pm}.DO_EPV1"].Value;
|
|
||||||
IO.DI[$"{pm}.DI_EPV2-1FB"].Value = IO.DO[$"{pm}.DO_EPV2"].Value;
|
|
||||||
|
|
||||||
IO.AI[$"{pm}.AI_PressCtrl1"].Value = IO.AO[$"{pm}.AO_PressCtrl1"].Value;
|
|
||||||
IO.AI[$"{pm}.AI_PressCtrl2"].Value = IO.AO[$"{pm}.AO_PressCtrl2"].Value;
|
|
||||||
IO.AI[$"{pm}.AI_PressCtrl3"].Value = IO.AO[$"{pm}.AO_PressCtrl3"].Value;
|
|
||||||
IO.AI[$"{pm}.AI_PressCtrl4"].Value = IO.AO[$"{pm}.AO_PressCtrl4"].Value;
|
|
||||||
IO.AI[$"{pm}.AI_PressCtrl5"].Value = IO.AO[$"{pm}.AO_PressCtrl5"].Value;
|
|
||||||
IO.AI[$"{pm}.AI_PressCtrl6"].Value = IO.AO[$"{pm}.AO_PressCtrl6"].Value;
|
|
||||||
IO.AI[$"{pm}.AI_PressCtrl7"].Value = IO.AO[$"{pm}.AO_PressCtrl7"].Value;
|
|
||||||
IO.AI[$"{pm}.AI_PressCtrl8"].Value = IO.AO[$"{pm}.AO_PressCtrl8"].Value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int timeMoveUp = 0;
|
private int timeMoveUp = 0;
|
||||||
int timeMove = 0;
|
private int timeMove = 0;
|
||||||
R_TRIG _UpTrig = new R_TRIG();
|
private R_TRIG _UpTrig = new R_TRIG();
|
||||||
|
|
||||||
private void MonitorChamberMoveBodyUp(string pm)
|
private void MonitorChamberMoveBodyUp(string pm)
|
||||||
{
|
{
|
||||||
@ -1316,8 +943,9 @@ namespace SicSimulator.Instances
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
R_TRIG forwardLatch_R = new R_TRIG();
|
private R_TRIG forwardLatch_R = new R_TRIG();
|
||||||
R_TRIG backLatchLatch_R = new R_TRIG();
|
private R_TRIG backLatchLatch_R = new R_TRIG();
|
||||||
|
|
||||||
private void MonitorChamberMoveBody(string pm)
|
private void MonitorChamberMoveBody(string pm)
|
||||||
{
|
{
|
||||||
if (IO.DO[$"{pm}.DO_ChamMoveBodyForward"].Value != IO.DO[$"{pm}.DO_ChamMoveBodyBackward"].Value)
|
if (IO.DO[$"{pm}.DO_ChamMoveBodyForward"].Value != IO.DO[$"{pm}.DO_ChamMoveBodyBackward"].Value)
|
||||||
@ -1376,6 +1004,7 @@ namespace SicSimulator.Instances
|
|||||||
//IO.AI[$"{pm}.AI_Loop3ActualPower"].Value = IO.AO[$"{pm}.AO_Loop3ManualOP"].Value;
|
//IO.AI[$"{pm}.AI_Loop3ActualPower"].Value = IO.AO[$"{pm}.AO_Loop3ManualOP"].Value;
|
||||||
//IO.DI[$"{pm}.DI_OuterHeaterEnable"].Value = IO.DO[$"{pm}.DO_OuterHeaterEnable"].Value;
|
//IO.DI[$"{pm}.DI_OuterHeaterEnable"].Value = IO.DO[$"{pm}.DO_OuterHeaterEnable"].Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MonitorGasConnector(string pm)
|
private void MonitorGasConnector(string pm)
|
||||||
{
|
{
|
||||||
if (IO.DO[$"{pm}.DO_SHGasConnectorLoosen"].Value != IO.DO[$"{pm}.DO_SHGasConnectorTighten"].Value)
|
if (IO.DO[$"{pm}.DO_SHGasConnectorLoosen"].Value != IO.DO[$"{pm}.DO_SHGasConnectorTighten"].Value)
|
||||||
@ -1387,7 +1016,6 @@ namespace SicSimulator.Instances
|
|||||||
|
|
||||||
private void MonitorLid(string pm)
|
private void MonitorLid(string pm)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (IO.DO[$"{pm}.DO_SHLidLoosen"].Value != IO.DO[$"{pm}.DO_SHLidTighten"].Value)
|
if (IO.DO[$"{pm}.DO_SHLidLoosen"].Value != IO.DO[$"{pm}.DO_SHLidTighten"].Value)
|
||||||
{
|
{
|
||||||
timeMove++;
|
timeMove++;
|
||||||
@ -1418,7 +1046,6 @@ namespace SicSimulator.Instances
|
|||||||
|
|
||||||
private void MonitorLidSwing(string pm)
|
private void MonitorLidSwing(string pm)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (IO.DO[$"{pm}.DO_SHLidSwingLock"].Value != IO.DO[$"{pm}.DO_SHLidSwingUnlock"].Value)
|
if (IO.DO[$"{pm}.DO_SHLidSwingLock"].Value != IO.DO[$"{pm}.DO_SHLidSwingUnlock"].Value)
|
||||||
{
|
{
|
||||||
IO.DI[$"{pm}.DI_SHLidSwingLock"].Value = IO.DO[$"{pm}.DO_SHLidSwingLock"].Value;
|
IO.DI[$"{pm}.DI_SHLidSwingLock"].Value = IO.DO[$"{pm}.DO_SHLidSwingLock"].Value;
|
||||||
@ -1429,10 +1056,8 @@ namespace SicSimulator.Instances
|
|||||||
IO.DI[$"{pm}.DI_MiddleLidSwingLock"].Value = IO.DO[$"{pm}.DO_MiddleLidSwingLock"].Value;
|
IO.DI[$"{pm}.DI_MiddleLidSwingLock"].Value = IO.DO[$"{pm}.DO_MiddleLidSwingLock"].Value;
|
||||||
IO.DI[$"{pm}.DI_MiddleLidSwingUnlock"].Value = IO.DO[$"{pm}.DO_MiddleLidSwingUnlock"].Value;
|
IO.DI[$"{pm}.DI_MiddleLidSwingUnlock"].Value = IO.DO[$"{pm}.DO_MiddleLidSwingUnlock"].Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void MonitorConfinementRing(string pm)
|
private void MonitorConfinementRing(string pm)
|
||||||
{
|
{
|
||||||
if (IO.DO[$"{pm}.DO_ConfinementRingMoveDown"].Value != IO.DO[$"{pm}.DO_ConfinementRingMoveUp"].Value)
|
if (IO.DO[$"{pm}.DO_ConfinementRingMoveDown"].Value != IO.DO[$"{pm}.DO_ConfinementRingMoveUp"].Value)
|
||||||
@ -1456,14 +1081,11 @@ namespace SicSimulator.Instances
|
|||||||
IO.AI[$"{pm}.AI_ConfinementRingDownPos"].Value = IO.AO[$"{pm}.AO_ConfinementRingDownPos"].Value;
|
IO.AI[$"{pm}.AI_ConfinementRingDownPos"].Value = IO.AO[$"{pm}.AO_ConfinementRingDownPos"].Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void MonitorRotation(string pm)
|
private void MonitorRotation(string pm)
|
||||||
{
|
{
|
||||||
IO.AI[$"{pm}.AI_ActualSpeed"].Value = IO.AO[$"{pm}.AO_SpindleSpeed"].Value;
|
IO.AI[$"{pm}.AI_ActualSpeed"].Value = IO.AO[$"{pm}.AO_SpindleSpeed"].Value;
|
||||||
|
|
||||||
IO.DI[$"{pm}.DI_ConfinementRingServoOn"].Value = IO.DO[$"{pm}.DO_ConfinementRingServoOn"].Value;
|
IO.DI[$"{pm}.DI_ConfinementRingServoOn"].Value = IO.DO[$"{pm}.DO_ConfinementRingServoOn"].Value;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Terminate()
|
public void Terminate()
|
||||||
@ -1471,4 +1093,4 @@ namespace SicSimulator.Instances
|
|||||||
_thread.Stop();
|
_thread.Stop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user