12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900 |
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.Linq;
- using System.Windows;
- using System.Windows.Media;
- using Aitex.Core.Common;
- using Aitex.Core.Common.DeviceData;
- using Aitex.Core.Util;
- using Aitex.Core.Utilities;
- using Caliburn.Micro;
- using MECF.Framework.Common.DataCenter;
- using MECF.Framework.Common.Equipment;
- using MECF.Framework.Common.OperationCenter;
- using MECF.Framework.Common.RecipeCenter;
- using OpenSEMI.ClientBase;
- using VirgoCommon;
- using VirgoUI.Client.Models.Recipe;
- using VirgoUI.Client.Models.Sys;
- using Ax = Aitex.Core.Common;
- namespace VirgoUI.Client.Models.PMs
- {
- public class PmOverviewViewModel : ModuleUiViewModelBase, ISupportMultipleSystem
- {
- private object[] _oldmfc = new object[5] { 0.0, 0.0, 0.0, 0.0, 0.0 };
- //public Ax.WaferInfo PMWafer { get; set; }
- //private Ax.WaferSize _PMWaferType = Ax.WaferSize.WS6;
- //public Ax.WaferSize PMWaferType
- //{
- // get
- // {
- // return _PMWaferType;
- // }
- // set
- // {
- // _PMWaferType = value;
- // NotifyOfPropertyChange("PMWaferType");
- // }
- //}
- private int _BottomPinStatus = 0;
- public int BottomPinStatus
- {
- get
- {
- return _BottomPinStatus;
- }
- set
- {
- _BottomPinStatus = value;
- NotifyOfPropertyChange("BottomPinStatus");
- }
- }
- private int _MidPinStatus = 0;
- public int MidPinStatus
- {
- get
- {
- return _MidPinStatus;
- }
- set
- {
- _MidPinStatus = value;
- NotifyOfPropertyChange("MidPinStatus");
- }
- }
- private int _TopPinStatus = 0;
- public int TopPinStatus
- {
- get
- {
- return _TopPinStatus;
- }
- set
- {
- _TopPinStatus = value;
- NotifyOfPropertyChange("TopPinStatus");
- }
- }
- private int _CoverStatus = 0;
- public int CoverStatus
- {
- get
- {
- return _CoverStatus;
- }
- set
- {
- _CoverStatus = value;
- NotifyOfPropertyChange("CoverStatus");
- }
- }
- //private int _ChamberStatus;
- //public int ChamberStatus
- //{
- // get { return _ChamberStatus; }
- // set
- // {
- // _ChamberStatus = value;
- // NotifyOfPropertyChange("ChamberStatus");
- // }
- //}
- private List<PMParameter> _PMParameters;
- public List<PMParameter> PMParameters
- {
- get
- {
- return _PMParameters;
- }
- set
- {
- _PMParameters = value;
- NotifyOfPropertyChange("PMParameters");
- }
- }
- private List<PMParameter> _Temperatures;
- public List<PMParameter> Temperatures
- {
- get
- {
- return _Temperatures;
- }
- set
- {
- _Temperatures = value;
- NotifyOfPropertyChange("Temperatures");
- }
- }
- private List<GaslineItem> _Gaslines;
- public List<GaslineItem> Gaslines
- {
- get
- {
- return _Gaslines;
- }
- set
- {
- _Gaslines = value;
- NotifyOfPropertyChange("Gaslines");
- }
- }
-
- [Subscription("EPD.IsConnected")]
- public bool IsEPDConnected
- {
- get;
- set;
- }
- [Subscription("EPD.ChannelStatus")]
- public string EPDStatus
- {
- get;
- set;
- }
-
- public Visibility EPDVisibility
- {
- get;
- set;
- }
- [Subscription("EnableBiasRF")]
- public bool EnableBiasRF
- {
- get;
- set;
- }
- [Subscription("IoThrottleValve.ThrottleValve.ProcessPressureOffset")]
- public double ProcessPressureOffset
- {
- get;
- set;
- }
- [Subscription("IoMfc.MfcGas1.IsEnable")]
- public bool MfcGas1Enable
- {
- get;
- set;
- }
- [Subscription("IoMfc.MfcGas2.IsEnable")]
- public bool MfcGas2Enable
- {
- get;
- set;
- }
- [Subscription("IoMfc.MfcGas3.IsEnable")]
- public bool MfcGas3Enable
- {
- get;
- set;
- }
- [Subscription("IoMfc.MfcGas4.IsEnable")]
- public bool MfcGas4Enable
- {
- get;
- set;
- }
- [Subscription("IoMfc.MfcGas5.IsEnable")]
- public bool MfcGas5Enable
- {
- get;
- set;
- }
- [Subscription("ModuleWaferList")]
- public Ax.WaferInfo[] ChamberWafer
- {
- get;
- set;
- }
- [Subscription("SlitDoor.DeviceData")]
- public AITCylinderData SlitDoorData
- {
- get;
- set;
- }
- [Subscription("LiftPin.DeviceData")]
- public AITCylinderData LiftPinData
- {
- get;
- set;
- }
- [Subscription("SmallPin.DeviceData")]
- public AITCylinderData UpperPinData
- {
- get;
- set;
- }
- [Subscription("MediumPin.DeviceData")]
- public AITCylinderData LowerPinData
- {
- get;
- set;
- }
- [Subscription("Lid.DeviceData")]
- public AITCylinderData LidData
- {
- get;
- set;
- }
- [Subscription("LidLocker.DeviceData")]
- public AITCylinderData LidLockerData
- {
- get;
- set;
- }
- [Subscription("IsOnline")]
- public bool IsOnline { get; set; }
- [Subscription("LeakRate")]
- public double LeakRate { get; set; }
- [Subscription("IsCDAOK")]
- public bool IsCDAOK { get; set; }
- [Subscription("IsArmNotExtend")]
- public bool IsArmNotExtend { get; set; }
- [Subscription(VirgoDevice.ValveMfc1)]
- public AITValveData GP1Valve
- {
- get;
- set;
- }
- [Subscription(VirgoDevice.ValveMfc2)]
- public AITValveData GP2Valve
- {
- get;
- set;
- }
- [Subscription(VirgoDevice.ValveMfc3)]
- public AITValveData GP3Valve
- {
- get;
- set;
- }
- [Subscription(VirgoDevice.ValveMfc4)]
- public AITValveData GP4Valve
- {
- get;
- set;
- }
- [Subscription(VirgoDevice.ValveMfc5)]
- public AITValveData GP5Valve
- {
- get;
- set;
- }
- [Subscription(VirgoDevice.ValveChamberPurge)]
- public AITValveData ChamberPurgeValve
- {
- get;
- set;
- }
- [Subscription(VirgoDevice.ValveChamberPurge)]
- public AITValveData SoftVentVlv { get; set; }
- [Subscription(VirgoDevice.ValveFastVent)]
- public AITValveData FastVentVlv { get; set; }
- [Subscription(VirgoDevice.ValveSoftPumping)]
- public AITValveData SoftPumpVlv { get; set; }
- [Subscription(VirgoDevice.ValveFastPumping)]
- public AITValveData FastPumpVlv { get; set; }
- [Subscription(VirgoDevice.ValveN2Supply)]
- public AITValveData N2SupplyVlv { get; set; }
- [Subscription(VirgoDevice.ValveProcess)]
- public AITValveData ProcessVlv { get; set; }
- [Subscription("SensorATMSwitch")]
- public AITSensorData SensorATMSwitch { get; set; }
- [Subscription("N2PressureOk")]
- public AITSensorData N2PressureOk { get; set; }
- [Subscription("SensorVacSwitch")]
- public AITSensorData SensorVacSwitch { get; set; }
- [Subscription("SensorWaterFlowOk")]
- public AITSensorData SensorWaterFlowOk { get; set; }
-
- [Subscription("SensorCDAPressureOk")]
- public AITSensorData SensorCDAPressureOk { get; set; }
- [Subscription("SourceFan1")]
- public AITSensorData SourceFan1 { get; set; }
- [Subscription("SourceFan2")]
- public AITSensorData SourceFan2 { get; set; }
- [Subscription("SensorWaterLeakOk")]
- public AITSensorData SensorWaterLeakOk { get; set; }
- [Subscription("SensorArmNotExtend")]
- public AITSensorData SensorArmNotExtend { get; set; }
- private AITMfcData _mfc1;
- [Subscription(VirgoDevice.MfcGas1)]
- public AITMfcData GP1Mfc
- {
- get
- {
- return _mfc1;
- }
- set
- {
- _mfc1 = value;
- if (IsAutoMode && MfcGas1Enable)
- {
- PMParameters.Find(x => x.Name == $"{SystemName}.IoMfc.MfcGas1.FeedBack").Setpoint = _mfc1.SetPoint.ToString("F1");
- }
- }
- }
- private AITMfcData _mfc2;
- [Subscription(VirgoDevice.MfcGas2)]
- public AITMfcData GP2Mfc
- {
- get
- {
- return _mfc2;
- }
- set
- {
- _mfc2 = value;
- if (IsAutoMode && MfcGas2Enable)
- {
- PMParameters.Find(x => x.Name == $"{SystemName}.IoMfc.MfcGas2.FeedBack").Setpoint = _mfc2.SetPoint.ToString("F1");
- }
- }
- }
- private AITMfcData _mfc3;
- [Subscription(VirgoDevice.MfcGas3)]
- public AITMfcData GP3Mfc
- {
- get
- {
- return _mfc3;
- }
- set
- {
- _mfc3 = value;
- if (IsAutoMode && MfcGas3Enable/* && _Gaslines.Count > 2*/)
- {
- PMParameters.Find(x => x.Name == $"{SystemName}.IoMfc.MfcGas3.FeedBack").Setpoint = _mfc3.SetPoint.ToString("F1");
- }
- }
- }
- private AITMfcData _mfc4;
- [Subscription(VirgoDevice.MfcGas4)]
- public AITMfcData GP4Mfc
- {
- get
- {
- return _mfc4;
- }
- set
- {
- _mfc4 = value;
- if (IsAutoMode && MfcGas4Enable/* && _Gaslines.Count > 3*/)
- {
- PMParameters.Find(x => x.Name == $"{SystemName}.IoMfc.MfcGas4.FeedBack").Setpoint = _mfc4.SetPoint.ToString("F1");
- }
- }
- }
- private AITMfcData _mfc5;
- [Subscription(VirgoDevice.MfcGas5)]
- public AITMfcData GP5Mfc
- {
- get
- {
- return _mfc5;
- }
- set
- {
- _mfc5 = value;
- if (IsAutoMode && MfcGas5Enable/* && _Gaslines.Count > 4*/)
- {
- PMParameters.Find(x => x.Name == $"{SystemName}.IoMfc.MfcGas5.FeedBack").Setpoint = _mfc5.SetPoint.ToString("F1");
- }
- }
- }
- [Subscription("Chiller.DeviceData")]
- public AITChillerData ChillerData { get; set; }
- [Subscription("HeaterChamber.DeviceData")]
- public AITHeaterData HeaterChamber { get; set; }
- [Subscription("ForelineHeater.DeviceData")]
- public AITHeaterData ForelineHeater { get; set; }
- [Subscription("WallHeater.DeviceData")]
- public AITHeaterData WallHeater { get; set; }
- [Subscription("GridHeater.DeviceData")]
- public AITHeaterData GridHeater { get; set; }
- [Subscription(VirgoDevice.ProcessGauge)]
- public AITPressureMeterData ProcessGauge { get; set; }
- [Subscription(VirgoDevice.PressureGauge)]
- public AITPressureMeterData PressureGauge { get; set; }
- [Subscription(VirgoDevice.ForelineGauge)]
- public AITPressureMeterData ForelineGauge { get; set; }
- private AITRfData _rf;
- [Subscription("Rf.DeviceData")]
- public AITRfData Rf
- {
- get
- {
- return _rf;
- }
- set
- {
- _rf = value;
- if (IsAutoMode)
- {
- PMParameters.Find(x => x.Name == $"{SystemName}.Rf.PowerOnTime").Setpoint = "";
- PMParameters.Find(x => x.Name == $"{SystemName}.Rf.ForwardPower").Setpoint = _rf.PowerSetPoint.ToString("F0");
- RfDutySetPoint = _rf.DutySetPoint.ToString("F0");
- NotifyOfPropertyChange("RfDutySetPoint");
- RfFrequencySetPoint = _rf.FrequencySetPoint.ToString("F0");
- NotifyOfPropertyChange("RfFrequencySetPoint");
- RfModeSetPoint = _rf.WorkMode == (int)RfMode.ContinuousWaveMode ? "Continuous" : "Pulsing";
- NotifyOfPropertyChange("RfModeSetPoint");
-
- }
- }
- }
- private AITRfData _rfBias;
- [Subscription("BiasRf.DeviceData")]
- public AITRfData RfBias
- {
- get
- {
- return _rfBias;
- }
- set
- {
- _rfBias = value;
- if (IsAutoMode)
- {
- PMParameters.Find(x => x.Name == $"{SystemName}.BiasMatch.MatchProcessMode").Setpoint = _rfBias.MatchPresetMode == (int)BiasRfMatchMode.Preset ? "Preset" : "Hold";
- PMParameters.Find(x => x.Name == $"{SystemName}.BiasMatch.C1").Setpoint = _rfBias.MatchPositionC1SetPoint.ToString("F1");
- PMParameters.Find(x => x.Name == $"{SystemName}.BiasMatch.C2").Setpoint = _rfBias.MatchPositionC2SetPoint.ToString("F1");
- PMParameters.Find(x => x.Name == $"{SystemName}.BiasRf.ForwardPower").Setpoint = _rfBias.PowerSetPoint.ToString("F0");
- RfMatchProcessModeSetPoint = _rf.TritonMatchProcessModeDisplay;
- InvokePropertyChanged("RfMatchProcessModeSetPoint");
- }
- }
- }
- private AITRfMatchData _match;
- [Subscription("Match.DeviceData")]
- public AITRfMatchData Match
- {
- get
- {
- return _match;
- }
- set
- {
- _match = value;
- RfMatchPositionC1SetPoint = _match.TunePosition1.ToString("F0");
- NotifyOfPropertyChange("RfMatchPositionC1SetPoint");
- RfMatchPositionC2SetPoint = _match.TunePosition2.ToString("F0");
- NotifyOfPropertyChange("RfMatchPositionC2SetPoint");
- }
- }
- [Subscription("MainPump.DeviceData")]
- public AITPumpData MainPumpData { get; set; }
- private AITThrottleValveData _tv;
- [Subscription(VirgoDevice.ThrottleValve)]
- public AITThrottleValveData Tv
- {
- get
- {
- return _tv;
- }
- set
- {
- _tv = value;
- if (IsAutoMode)
- {
- PMParameters.Find(x => x.Name == $"{SystemName}.IoThrottleValve.ThrottleValve.TVMode").Setpoint = _tv.Mode == (int)PressureCtrlMode.TVPressureCtrl ? "Pressure"
- : _tv.Mode == (int)PressureCtrlMode.TVPositionCtrl ? "Position" : "Undefined";
- PMParameters.Find(x => x.Name == $"{SystemName}.IoThrottleValve.ThrottleValve.TVMode").Feedback = _tv.Mode == (int)PressureCtrlMode.TVPressureCtrl ? "Pressure"
- : _tv.Mode == (int)PressureCtrlMode.TVPositionCtrl ? "Position" : "Undefined";
- PMParameters.Find(x => x.Name == $"{SystemName}.IoThrottleValve.ThrottleValve.TVPosition").Setpoint = _tv.PositionSetPoint.ToString("F0");
- PMParameters.Find(x => x.Name == $"{SystemName}.IoThrottleValve.ThrottleValve.TVPressure").Setpoint = _tv.PressureSetPoint.ToString("F0");
- ThrottleValveModeSetPoint = _tv.TextMode;
- NotifyOfPropertyChange("ThrottleValveModeSetPoint");
- ThrottleValvePositionSetPoint = _tv.PositionSetPoint.ToString("F0");
- NotifyOfPropertyChange("ThrottleValvePositionSetPoint");
- ThrottleValvePressureSetPoint = _tv.PressureSetPoint.ToString("F0");
- NotifyOfPropertyChange("ThrottleValvePressureSetPoint");
- }
- }
- }
- public double TvHeight { get; set; }
- public Visibility TvVisible { get; set; }
- private AITSensorData _chamberDoorLid = new AITSensorData();
- [Subscription(VirgoDevice.ChamberLid)]
- public AITSensorData ChamberDoorLid
- {
- get
- {
- return _chamberDoorLid;
- }
- set
- {
- _chamberDoorLid = value;
- }
- }
- private bool _isAutoMode;
- private R_TRIG _trigChangeToAuto = new R_TRIG();
- [Subscription(StateData.IsAutoMode)]
- public bool IsAutoMode
- {
- get
- {
- return _isAutoMode;
- }
- set
- {
- _isAutoMode = value;
- _trigChangeToAuto.CLK = _isAutoMode;
- if (_trigChangeToAuto.Q)
- {
- RfTimeSetPoint = "";
- NotifyOfPropertyChange("RfTimeSetPoint");
- RfModeSetPoint = "";
- NotifyOfPropertyChange("RfModeSetPoint");
- PMParameters.Find(x => x.Name == $"{SystemName}.Rf.ForwardPower").Setpoint = "";
- RfFrequencySetPoint = "";
- NotifyOfPropertyChange("RfFrequencySetPoint");
- RfDutySetPoint = "";
- NotifyOfPropertyChange("RfDutySetPoint");
- RfMatchProcessModeSetPoint = "";
- InvokePropertyChanged("RfMatchProcessModeSetPoint");
- RfMatchPositionC1SetPoint = "";
- NotifyOfPropertyChange("RfMatchPositionC1SetPoint");
- RfMatchPositionC2SetPoint = "";
- NotifyOfPropertyChange("RfMatchPositionC2SetPoint");
- for (int i = 1; i <= 5; i++) //GasLine 跳号Enable
- {
- if ((bool)QueryDataClient.Instance.Service.GetConfig($"{SystemName}.MfcGas{i}.Enable"))
- {
- PMParameters.Find(x => x.Name == $"{SystemName}.IoMfc.MfcGas{i}.FeedBack").Setpoint = "";
- }
- }
- //PMParameters.Find(x => x.Name == $"{SystemName}.IoMfc.MfcGas1.FeedBack").Setpoint = "";
- //PMParameters.Find(x => x.Name == $"{SystemName}.IoMfc.MfcGas2.FeedBack").Setpoint = "";
- //PMParameters.Find(x => x.Name == $"{SystemName}.IoMfc.MfcGas3.FeedBack").Setpoint = "";
- //if (_Gaslines.Count > 3)
- // PMParameters.Find(x => x.Name == $"{SystemName}.IoMfc.MfcGas4.FeedBack").Setpoint = "";
- //if (_Gaslines.Count > 4)
- // PMParameters.Find(x => x.Name == $"{SystemName}.IoMfc.MfcGas5.FeedBack").Setpoint = "";
- ElectrodeTemperatureSetPoint = "";
- NotifyOfPropertyChange("ElectrodeTemperatureSetPoint");
- StepModeSetPoint = "";
- NotifyOfPropertyChange("StepModeSetPoint");
- }
- }
- }
- public bool IsManualMode
- {
- get
- {
- return !IsAutoMode;
- }
- }
- public bool IsRFEnabled
- {
- get
- {
- return IsManualMode && IsGasFlowing || IsRfPowering;
- }
- }
- //public bool IsMatchPositionInputEnabled
- //{
- // get
- // {
- // if (Rf != null && Match.TuneMode1 == EnumRfMatchTuneMode.Auto)
- // return false;
- // return IsManualMode;
- // }
- //}
- [Subscription(StateData.RecipeStepNo)]
- public int RecipeStepNo
- {
- get;
- set;
- }
- private int _recipeStepMode;
- [Subscription(StateData.RecipeStepMode)]
- public int RecipeStepMode
- {
- get
- {
- return _recipeStepMode;
- }
- set
- {
- _recipeStepMode = value;
- if (IsAutoMode)
- {
- switch (_recipeStepMode)
- {
- //case (int)EndByCondition.EndByHeatUp:
- // StepModeSetPoint = "Heat Up";
- // break;
- //case (int)EndByCondition.EndByRfTime:
- // StepModeSetPoint = "RF Time";
- // break;
- default:
- StepModeSetPoint = "Step Time";
- break;
- }
- NotifyOfPropertyChange("StepModeSetPoint");
- }
- }
- }
- [Subscription(StateData.RecipeProcessTime)]
- public string RecipeProcessTime
- {
- get;
- set;
- }
- [Subscription(StateData.PumpTime)]
- public string PumpTime
- {
- get;
- set;
- }
- [Subscription(StateData.PMState)]
- public int PMStatus { get; set; }
- [Subscription(StateData.IsPumpingOkForProcess)]
- public bool IsPumpingOkForProcess
- {
- get;
- set;
- }
- [Subscription(StateData.IsCoolingOkForProcess)]
- public bool IsCoolingOkForProcess
- {
- get;
- set;
- }
- [Subscription(StateData.IsGasFlowingOkForProcess)]
- public bool IsGasFlowingOkForProcess
- {
- get;
- set;
- }
- [Subscription(StateData.DataLogName)]
- public string DataLogName
- {
- get;
- set;
- }
- [Subscription(StateData.TotalCycle)]
- public int TotalCycle
- {
- get;
- set;
- }
- [Subscription(StateData.SmallWafer)]
- public int SmallWafer { get; set; }
- [Subscription(StateData.MidWafer)]
- public int MidWafer { get; set; }
- [Subscription(StateData.BigWafer)]
- public int BigWafer { get; set; }
- public string TvText
- {
- get
- {
- //if (Tv == null || !SCLocal.PressureControlConfig.EnableThrottleValve)
- return "";
- //return string.Format("{0}%", Tv.PositionFeedback.ToString("F0"));
- }
- }
- public string TvTextBackground
- {
- get
- {
- if (Tv == null)
- return "Transparent";
- if (Tv.State != 1)
- return "Red";
- return "Green";
- }
- }
- public string PmOperationMode
- {
- get
- {
- return IsAutoMode ? "Auto" : "Manual";
- }
- }
- public string PmOnlineMode
- {
- get
- {
- return IsOnline ? "Online" : "Offline";
- }
- }
- public bool IsOnlineButtonEnabled
- {
- get { return !IsOnline; }
- }
- public bool IsOfflineButtonEnabled
- {
- get { return IsOnline; }
- }
- [IgnorePropertyChange]
- public bool BasePressureSetPointSaved { get; set; }
- [IgnorePropertyChange]
- public bool PumpLimitSetPointSaved { get; set; }
- public double ElectrodeTemperatureFeedback
- {
- get
- {
- return 0;
- //return SCLocal.CoolingConfig.EnableElectrodeTcLeftAsControlTc ? (ElectrodeLeftThermalCouple!= null ? ElectrodeLeftThermalCouple.FeedBack :0) :
- // (ElectrodeRightThermalCouple!=null ? ElectrodeRightThermalCouple.FeedBack : 0);
- }
- }
- public int WaferLength
- {
- get
- {
- Ax.WaferInfo wafer = ChamberWafer==null ? new Ax.WaferInfo() : ChamberWafer[0];
- if (wafer.IsEmpty)
- return 0;
- switch (wafer.Size)
- {
- case Ax.WaferSize.WS3: return 85;
- case Ax.WaferSize.WS4: return 125;
- default: return 145;
- }
- }
- }
- public bool IsHeaterButtonEnable
- {
- get
- {
- if (SystemName == "PMB")
- {
- if ((bool)QueryDataClient.Instance.Service.GetConfig($"PMA.Chiller.EnableChiller") && (bool)QueryDataClient.Instance.Service.GetConfig($"PMB.Chiller.ChillerSameWithPMA"))
- {
- return false;
- }
- else
- return IsManualMode;
- }
- else
- return IsManualMode;
- }
- }
- public string HeaterButtonContent
- {
- get
- {
- if ((bool)QueryDataClient.Instance.Service.GetConfig($"PMA.Chiller.EnableChiller"))
- {
- if (SystemName == "PMB")
- {
- if ((bool)QueryDataClient.Instance.Service.GetConfig($"PMB.Chiller.ChillerSameWithPMA"))
- {
- return "温度设定";
- }
- else
- {
- if ((bool)QueryDataClient.Instance.Service.GetConfig($"PMB.Chiller.EnableChiller"))
- {
- return "温度设定";
- }
- else
- {
- return "底座加热";
- }
- }
- }
- else
- {
- return "温度设定";
- }
- }
- else
- return "底座加热";
- }
- }
- //public string WaferSize
- //{
- // get
- // {
- // Ax.WaferInfo wafer = ChamberWafer == null ? new Ax.WaferInfo() : ChamberWafer[0];
- // if (wafer.IsEmpty)
- // return "";
- // switch (wafer.Size)
- // {
- // case Ax.WaferSize.WS3: return SmallWafer.ToString();
- // case Ax.WaferSize.WS4: return MidWafer.ToString();
- // default: return BigWafer.ToString();
- // }
- // }
- //}
- public bool IsSmallPinVisible
- {
- get { return _smallGuidePinEnable && QueryDataClient.Instance.Service.GetConfig($"{SystemName}.SupportedGuidePinSize").ToString().Split(',').Contains(SmallPinWaferSize.ToString().Replace("WS", "")); }
- }
- public bool IsMidPinVisible
- {
- get { return _mediumGuidePinEnable && QueryDataClient.Instance.Service.GetConfig($"{SystemName}.SupportedGuidePinSize").ToString().Split(',').Contains(MediumPinWaferSize.ToString().Replace("WS", "")); }
- }
- public bool IsLiftPinVisible
- {
- get { return true; }
- }
- public bool IsLiftPinUp
- {
- get { return LiftPinData != null && LiftPinData.OpenFeedback; }
- }
- public bool EnableLiftPinUp
- {
- get { return !IsAutoMode && LiftPinData != null && !LiftPinData.OpenFeedback; }
- }
- public bool EnableLock
- {
- get { return LidLockerData != null && !LidLockerData.OpenSetPoint; }
- }
- public bool IsLiftPinDown
- {
- get { return LiftPinData != null && LiftPinData.CloseFeedback; }
- }
- public bool EnableLiftPinDown
- {
- get { return !IsAutoMode && LiftPinData != null && !LiftPinData.CloseFeedback; }
- }
- public bool EnableUnlock
- {
- get { return LidLockerData != null && !LidLockerData.CloseSetPoint; }
- }
- public bool IsUpperPinUp
- {
- get { return UpperPinData != null && UpperPinData.OpenFeedback; }
- }
- public bool EnableUpperPinUp
- {
- get { return !IsAutoMode && UpperPinData != null && !UpperPinData.OpenFeedback; }
- }
- public bool IsUpperPinDown
- {
- get { return UpperPinData != null && UpperPinData.CloseFeedback; }
- }
- public bool EnableUpperPinDown
- {
- get { return !IsAutoMode && UpperPinData != null && !UpperPinData.CloseFeedback; }
- }
- public bool IsLowerPinUp
- {
- get { return LowerPinData != null && LowerPinData.OpenFeedback; }
- }
- public bool EnableLowerPinUp
- {
- get { return !IsAutoMode && LowerPinData != null && !LowerPinData.OpenFeedback; }
- }
- public bool IsLowerPinDown
- {
- get { return LowerPinData != null && LowerPinData.CloseFeedback; }
- }
- public bool EnableLowerPinDown
- {
- get { return !IsAutoMode && LowerPinData != null && !LowerPinData.CloseFeedback; }
- }
- public bool IsLidOpen
- {
- get { return LidData != null && !LidData.CloseFeedback; }
- }
- public bool EnableCloseLid
- {
- get
- {
- return LidData != null && !LidData.CloseFeedback;
- }
- }
- public bool EnableOpenLid
- {
- get
- {
- return LidData != null && LidData.CloseFeedback;
- }
- }
- public bool IsSlitValveOpen
- {
- get { return SlitDoorData != null && SlitDoorData.OpenFeedback; }
- }
- public bool IsSlitValveClose
- {
- get { return !IsSlitValveOpen; }
- }
- public bool EnableCloseSlitValve
- {
- get
- {
- return !IsAutoMode && SlitDoorData != null && !SlitDoorData.CloseFeedback;
- }
- }
- public bool EnableOpenSlitValve
- {
- get
- {
- return !IsAutoMode && SlitDoorData != null && SlitDoorData.CloseFeedback;
- }
- }
- public bool EnableRfTimeSetPoint
- {
- get
- {
- return IsManualMode;
- }
- }
- //public bool IsEnableCloseLid
- //{
- // get
- // {
- // return !ChamberDoorLid.IsClose && !IsAutoMode;
- // }
- //}
- public bool IsLeftTcAsControlTc
- {
- get
- {
- return true;//SCLocal.CoolingConfig.EnableElectrodeTcLeftAsControlTc;
- }
- }
- public bool IsRightTcAsControlTc
- {
- get
- {
- return !IsLeftTcAsControlTc;
- }
- }
- public bool IsEnableRecipeScan
- {
- get
- {
- return IsAutoMode && !IsProcessing;
- }
- }
- public bool IsEnableLotScan
- {
- get
- {
- return IsAutoMode && !IsProcessing;
- }
- }
- public bool IsEnableSelectRecipe
- {
- get
- {
- return IsAutoMode && !IsProcessing;
- }
- }
- public bool IsEnableStartRecipe
- {
- get
- {
- return IsAutoMode && !string.IsNullOrEmpty(SelectedRecipeName) && !IsProcessing;
- }
- }
- public bool IsEnableNextStep
- {
- get
- {
- return IsAutoMode && IsProcessing;
- }
- }
- public bool IsEnableStopRecipe
- {
- get
- {
- return IsAutoMode && IsProcessing;
- }
- }
- public bool IsBarcodeEnabled
- {
- get;
- set;
- }
- public bool IsRfPowerOn
- {
- get
- {
- return Rf != null && Rf.IsRfOn;
- }
- }
- public bool IsBiasRfPowerOn
- {
- get
- {
- return RfBias != null && RfBias.IsRfOn;
- }
- }
- public bool IsBiasMatchPowerOn
- {
- get
- {
- return RfBias != null && RfBias.IsRfOn && RfBias.IsMatchOn;
- }
- }
- public bool IsBiasRfVisible
- {
- get
- {
- return (bool)QueryDataClient.Instance.Service.GetConfig($"{SystemName}.BiasRf.EnableBiasRF");
- }
- }
- public bool IsBiasMatchVisible
- {
- get
- {
- return (bool)QueryDataClient.Instance.Service.GetConfig($"{SystemName}.BiasMatch.EnableBiasMatch");
- }
- }
- public bool IsChillerVisibility
- {
- get
- {
- return (bool)QueryDataClient.Instance.Service.GetConfig($"{SystemName}.Chiller.EnableChiller");
- }
- }
- public bool IsHeaterVisibility
- {
- get
- {
- return !IsChillerVisibility;
- }
- }
- public bool IsMatchPositionInputEnabled
- {
- get
- {
- if (Rf != null && RfMatchProcessModeSetPoint != "Preset")
- return false;
- return IsManualMode;
- }
- }
- public bool IsChillerEnable
- {
- get
- {
- if (SystemName == "PMB")
- {
- if ((bool)QueryDataClient.Instance.Service.GetConfig($"{SystemName}.Chiller.ChillerSameWithPMA"))
- {
- return false;
- }
- else
- {
- return (bool)QueryDataClient.Instance.Service.GetConfig($"{SystemName}.Chiller.EnableChiller");
- }
- }
- else
- {
- return (bool)QueryDataClient.Instance.Service.GetConfig($"{SystemName}.Chiller.EnableChiller");
- }
- }
- }
- public bool IsHeaterEnable
- {
- get
- {
- return IsHeaterVisibility;
- }
- }
- public bool SensorValue
- {
- get
- {
- return false;
- }
- }
- public bool IsManualButtonEnabled
- {
- get
- {
- return IsAutoMode;
- }
- }
- public bool IsAutoButtonEnabled
- {
- get
- {
- return !IsAutoMode;
- }
- }
- public bool IsPumping
- {
- get
- {
- return (PMState)PMStatus == PMState.Pumping;
- }
- }
- public bool IsStartPumping
- {
- get
- {
- return (PMState)PMStatus == PMState.LaunchingPump;
- }
- }
- public bool enableServiceControl
- {
- get
- {
- return Permission == 3;
- }
- }
- public string RecipeStepNoDisplay
- {
- get
- {
- return (PMState)PMStatus == PMState.Processing ? RecipeStepNo.ToString() : "--";
- }
- }
- public string RecipeStepModeDisplay
- {
- get
- {
- if ((PMState)PMStatus != PMState.Processing)
- return "--";
- switch (RecipeStepMode)
- {
- //case (int)EndByCondition.EndByHeatUp:
- // return "Heat Up Mode";
- //case (int)EndByCondition.EndByRfTime:
- // return "RF Time Mode";
- default:
- return "Step Time Mode";
- }
- }
- }
- private string _pumpButtonBackground = "#376092";
- public string PumpButtonBackground
- {
- get
- {
- if (IsPumping)
- {
- _pumpButtonBackground = _pumpButtonBackground == "#95B3D7" ? "Blue" : "#95B3D7";
- return _pumpButtonBackground;
- }
- if (IsPumpingOkForProcess)
- return "#00C900";
- return "#376092";
- }
- }
- public bool IsGasFlowing
- {
- get
- {
- return (PMState)PMStatus == PMState.GasFlowing;
- }
- }
- private string _gasFlowButtonBackground = "CadetBlue";
- public string GasFlowButtonBackground
- {
- get
- {
- if (IsGasFlowing)
- {
- _gasFlowButtonBackground = _gasFlowButtonBackground == "#95B3D7" ? "Blue" : "#95B3D7";
- return _gasFlowButtonBackground;
- }
- if (IsGasFlowingOkForProcess)
- return "#00C900";
- return "CadetBlue";
- }
- }
- public bool IsCooling
- {
- get
- {
- return true;//ElectrodeCoolingWaterValve!=null && ElectrodeCoolingWaterValve.IsOpen;
- }
- }
- private string _coolingButtonBackground = "CadetBlue";
- public string CoolingButtonBackground
- {
- get
- {
- if (IsCooling)
- {
- _coolingButtonBackground = _coolingButtonBackground == "#95B3D7" ? "Blue" : "#95B3D7";
- return _coolingButtonBackground;
- }
- if (IsCoolingOkForProcess)
- return "#00C900";
- return "CadetBlue";
- }
- }
- public bool IsRfPowering
- {
- get
- {
- return (PMState)PMStatus == PMState.RfPowering;
- }
- }
- public bool IsLeakCheck
- {
- get
- {
- return (PMState)PMStatus == PMState.LeakCheck;
- }
- }
- private string _rfPowerButtonBackground = "CadetBlue";
- public string RfPowerButtonBackground
- {
- get
- {
- if (IsRfPowering)
- {
- _rfPowerButtonBackground = _rfPowerButtonBackground == "#95B3D7" ? "Blue" : "#95B3D7";
- return _rfPowerButtonBackground;
- }
- return "CadetBlue";
- }
- }
- public bool IsCyclePurging => (PMState)PMStatus == PMState.Purge;
- private string _cyclePurgeButtonBackground = "CadetBlue";
- public string CyclePurgeButtonBackground
- {
- get
- {
- if (IsCyclePurging)
- {
- _cyclePurgeButtonBackground = _cyclePurgeButtonBackground == "#95B3D7" ? "Blue" : "#95B3D7";
- return _cyclePurgeButtonBackground;
- }
- return "CadetBlue";
- }
- }
- public bool IsVenting
- {
- get
- {
- return (PMState)PMStatus == PMState.Venting;
- }
- }
- private string _ventButtonBackground = "CadetBlue";
- public string VentButtonBackground
- {
- get
- {
- if (IsVenting)
- {
- _ventButtonBackground = _ventButtonBackground == "#95B3D7" ? "Blue" : "#95B3D7";
- return _ventButtonBackground;
- }
- return "CadetBlue";
- }
- }
- public bool IsProcessing
- {
- get
- {
- return (PMState)PMStatus == PMState.PreProcess || (PMState)PMStatus == PMState.Processing || (PMState)PMStatus == PMState.PostProcess;
- }
- }
- public Visibility RfPowerOnChamberVisibility
- {
- get
- {
- return IsRfPowerOn ? Visibility.Visible : Visibility.Hidden;
- }
- }
- public Visibility BiasRfPowerOnChamberVisibility
- {
- get
- {
- if (!IsBiasRfVisible)
- return RfPowerOnChamberVisibility;
- return IsBiasRfPowerOn ? Visibility.Visible : Visibility.Hidden;
- }
- }
- public Visibility BoostPumpVisibility
- {
- get;
- set;
- }
- public bool IsRfPowerOnEnabled
- {
- get
- {
- return !IsRfPowerOn;
- }
- }
- public bool IsRfPowerOffEnabled
- {
- get
- {
- return IsRfPowerOn;
- }
- }
- public string ChamberStatus
- {
- get
- {
- return $"{(PMState)PMStatus}";
- }
- }
- public Brush ChamberStatusBkColor
- {
- get
- {
- switch ((PMState)PMStatus)
- {
- case PMState.Error:
- return Brushes.Red;
- case PMState.Idle:
- return Brushes.LightGray;
- default:
- return Brushes.LightGreen;
- }
- //return Brushes.Transparent;
- }
- }
- public Brush ChamberStatusForeColor
- {
- get
- {
- if (true)
- return Brushes.Black;
- //else if (false)
- // return Brushes.LightGreen;
- //return Brushes.Red;
- }
- }
- public Brush PMOnlineColor
- {
- get
- {
- if (IsOnline)
- return Brushes.LimeGreen;
- return Brushes.Transparent;
- }
- }
- public double RfReflectPower
- {
- get;
- set;
- }
- public double RfForwardPower
- {
- get;
- set;
- }
- public object[] RfPowerOnCommandParameter
- {
- get
- {
- return new object[] { VirgoDevice.Rf.ToString(), AITRfOperation.SetPowerOnOff.ToString(), "true" };
- }
- }
- public object[] RfPowerOffCommandParameter
- {
- get
- {
- return new object[] { VirgoDevice.Rf.ToString(), AITRfOperation.SetPowerOnOff.ToString(), "false" };
- }
- }
- public double LotBarcodeHeight
- {
- get
- {
- return IsBarcodeEnabled ? 35 : 0;
- }
- }
- public double DataLogHeight
- {
- get
- {
- return IsBarcodeEnabled ? 0 : 35;
- }
- }
- public double RecipeBarcodeHeight
- {
- get
- {
- return IsBarcodeEnabled ? 35 : 0;
- }
- }
- public string RecipeBarcodeInputText
- {
- get;
- set;
- }
- public int RecipeBarcodeLength
- {
- get;
- set;
- }
- public int LotBarcodeLength
- {
- get;
- set;
- }
- public int LotBarcodeMaxCount
- {
- get;
- set;
- }
- [IgnorePropertyChange]
- public string BasePressureSetPoint
- {
- get;
- set;
- }
- [IgnorePropertyChange]
- public string PumpLimitSetPoint
- {
- get;
- set;
- }
- [IgnorePropertyChange]
- public string ManualProcessElectrodeCriticalTemperatureSetPoint
- {
- get;
- set;
- }
- private string _stepModeSetPoint = "";
- [IgnorePropertyChange]
- public string StepModeSetPoint
- {
- get
- {
- return _stepModeSetPoint;
- }
- set
- {
- _stepModeSetPoint = value;
- }
- }
- [IgnorePropertyChange]
- public string ElectrodeTemperatureSetPoint
- {
- get;
- set;
- }
- [IgnorePropertyChange]
- public string ThrottleValveModeSetPoint
- {
- get;
- set;
- }
- [IgnorePropertyChange]
- public string ThrottleValvePositionSetPoint
- {
- get;
- set;
- }
- [IgnorePropertyChange]
- public string ThrottleValvePressureSetPoint
- {
- get;
- set;
- }
- [IgnorePropertyChange]
- public string BoostPumpPressureSetPoint
- {
- get;
- set;
- }
- [IgnorePropertyChange]
- public string RfTimeSetPoint
- {
- get;
- set;
- }
- private string _rfModeSetPoint;
- [IgnorePropertyChange]
- public string RfModeSetPoint
- {
- get
- {
- return _rfModeSetPoint;
- }
- set
- {
- _rfModeSetPoint = value;
- }
- }
- [IgnorePropertyChange]
- public string RfFrequencySetPoint
- {
- get;
- set;
- }
- [IgnorePropertyChange]
- public string RfDutySetPoint
- {
- get;
- set;
- }
- [IgnorePropertyChange]
- public string RfMatchProcessModeSetPoint
- {
- get;
- set;
- }
- [IgnorePropertyChange]
- public string RfMatchPositionC1SetPoint
- {
- get;
- set;
- }
- [IgnorePropertyChange]
- public string RfMatchPositionC2SetPoint
- {
- get;
- set;
- }
- private string _selectedRecipeName;
- [Subscription("RecipeName")]
- public string SelectedRecipeName
- {
- get
- {
- return _selectedRecipeName;
- }
- set
- {
- if (string.IsNullOrEmpty(value))
- return;
- _selectedRecipeName = value;
- if (IsAutoMode)
- {
- InvokePropertyChanged("SelectedRecipeName");
- }
- }
- }
- [Subscription("ProcessStatus")]
- public string ProcessStatus
- {
- get;
- set;
- }
- [Subscription("RecipeStepTimeElapsed")]
- public string RecipeStepTimeElapsed
- {
- get;
- set;
- }
- [Subscription("RecipeStepTimeSetPoint")]
- public string RecipeStepTimeSetPoint
- {
- get;
- set;
- }
- [Subscription("RecipeSteps")]
- public string RecipeSteps
- {
- get;
- set;
- }
- private string _recipeStepRfTimeSetPoint;
- [Subscription("RecipeStepRfTimeSetPoint")]
- public string RecipeStepRfTimeSetPoint
- {
- get
- {
- return _recipeStepRfTimeSetPoint;
- }
- set
- {
- _recipeStepRfTimeSetPoint = value;
- if (IsAutoMode)
- {
- RfTimeSetPoint = _recipeStepRfTimeSetPoint;
- InvokePropertyChanged("RfTimeSetPoint");
- }
- }
- }
- //public string RecipeStatusBackground
- //{
- // get
- // {
- // return IsProcessing ? "Green" : "Blue";
- // }
- //}
- public ObservableCollection<string> RFModeItems
- {
- get;
- set;
- }
- public bool IsRFModeSelectable
- {
- get;
- set;
- }
- public bool IsFullControlPermission
- {
- get;
- set;
- }
- public bool EnableDeviceControl
- {
- get
- {
- return IsFullControlPermission;
- }
- }
- public Visibility WallHeaterVisibility { get; set; }
- public Visibility GridHeaterVisibility { get; set; }
- public Ax.WaferSize SmallPinWaferSize { get; set; }
- public Ax.WaferSize MediumPinWaferSize { get; set; }
- public Ax.WaferSize BigPinWaferSize { get; set; }
- public string SmallPinUpText { get; set; }
- public string SmallPinDownText { get; set; }
- public string MediumPinUpText { get; set; }
- public string MediumPinDownText { get; set; }
- public int SmallPinHeight { get; set; }
- public int MediumPinHeight { get; set; }
- private int MenuPermission;
- private bool _smallGuidePinEnable;
- private bool _mediumGuidePinEnable;
- public PmOverviewViewModel()
- {
- BasePressureSetPointSaved = true;
- PumpLimitSetPointSaved = true;
- }
- protected override void OnActivate()
- {
- base.OnActivate();
- BasePressureSetPoint = QueryDataClient.Instance.Service.GetConfig($"{SystemName}.Pump.PumpBasePressure").ToString();
- PumpLimitSetPoint = ((float)(double)QueryDataClient.Instance.Service.GetConfig($"{SystemName}.Pump.PumpTimeLimit")).ToString();
- SmallPinWaferSize = MapWaferSize((int)QueryDataClient.Instance.Service.GetConfig($"System.SmallWafer"));
- MediumPinWaferSize = MapWaferSize((int)QueryDataClient.Instance.Service.GetConfig($"System.MidWafer"));
- BigPinWaferSize = MapWaferSize((int)QueryDataClient.Instance.Service.GetConfig($"System.BigWafer"));
- SmallPinUpText = $"{SmallPinWaferSize} Pin Up";
- SmallPinDownText = $"{SmallPinWaferSize} Pin Down";
- MediumPinUpText = $"{MediumPinWaferSize} Pin Up";
- MediumPinDownText = $"{MediumPinWaferSize} Pin Down";
- SmallPinHeight = QueryDataClient.Instance.Service.GetConfig($"{SystemName}.SupportedGuidePinSize").ToString().Split(',').Contains(SmallPinWaferSize.ToString().Replace("WS","")) ? 32 : 0;
- MediumPinHeight = QueryDataClient.Instance.Service.GetConfig($"{SystemName}.SupportedGuidePinSize").ToString().Split(',').Contains(MediumPinWaferSize.ToString().Replace("WS", "")) ? 32 : 0;
- WallHeaterVisibility = ((bool)QueryDataClient.Instance.Service.GetConfig($"{SystemName}.EnableWallHeater")) ? Visibility.Visible: Visibility.Hidden;
- GridHeaterVisibility = ((bool)QueryDataClient.Instance.Service.GetConfig($"{SystemName}.EnableGridHeater")) ? Visibility.Visible : Visibility.Hidden;
- EPDVisibility = (bool) QueryDataClient.Instance.Service.GetConfig($"System.SetUp.EPDInstalled") && (bool)QueryDataClient.Instance.Service.GetConfig($"{SystemName}.EPD.IsEnabled")
- ? Visibility.Visible
- : Visibility.Hidden;
- }
- private Ax.WaferSize MapWaferSize(int value)
- {
- switch (value)
- {
- case 3: return Ax.WaferSize.WS3;
- case 4: return Ax.WaferSize.WS4;
- case 6: return Ax.WaferSize.WS6;
- case 8: return Ax.WaferSize.WS8;
- case 12: return Ax.WaferSize.WS12;
- case 150: return Ax.WaferSize.WS150;
- case 159: return Ax.WaferSize.WS159;
- }
- return Ax.WaferSize.WS0;
- }
- protected override void OnDeactivate(bool close)
- {
- base.OnDeactivate(close);
- }
- protected override void OnInitialize()
- {
- base.OnInitialize();
- InitGasLine();
- InitParameterList(SystemName);
- foreach (var pmParameter in PMParameters)
- {
- Subscribe(pmParameter.Name);
- }
- _smallGuidePinEnable = (bool)QueryDataClient.Instance.Service.GetConfig($"System.SmallGuidePinEnable");
- _mediumGuidePinEnable = (bool)QueryDataClient.Instance.Service.GetConfig($"System.MediumGuidePinEnable");
- }
- private void InitGasLine()
- {
- Gaslines = new List<GaslineItem>();
- for (int i = 1; i <= 5; i++) //GasLine 跳号Enable
- {
- if ((bool)QueryDataClient.Instance.Service.GetConfig($"{SystemName}.MfcGas{i}.Enable"))
- {
- var gasName = QueryDataClient.Instance.Service.GetConfig($"{SystemName}.MfcGas{i}.GasName");
- var gasscale = QueryDataClient.Instance.Service.GetConfig($"{SystemName}.MfcGas{i}.MfcN2Scale");
- Gaslines.Add(new GaslineItem
- {
- Index = (byte)i,
- Display = $"MfcGas{i} " + gasName.ToString() + " " +gasscale.ToString() + " sccm",
- ValveName = $"{SystemName}.ValveMfc{i}",
- MfcName = $"{SystemName}.MfcGas{i}"
- });
- }
- }
- //int count = 0;
- //for (int i = 1; i <= 5; i++)
- //{
- // if ((bool)QueryDataClient.Instance.Service.GetConfig($"{SystemName}.MfcGas{i}.Enable")) count++;
- //}
- //for (byte index = 1; index <= count; index++)
- //{
- // var gasName = QueryDataClient.Instance.Service.GetConfig($"{SystemName}.MfcGas{index}.GasName");
- // Gaslines.Add(new GaslineItem
- // {
- // Index = index,
- // Display = gasName.ToString(),
- // ValveName = $"{SystemName}.ValveMfc{index}",
- // MfcName = $"{SystemName}.MfcGas{index}"
- // });
- //}
- }
- public List<PMParameter> InitParameterList(string pmID)
- {
- PMParameters = new List<PMParameter>();
- // 工艺时间
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.RecipeProcessTime", Display = "工艺总时间 (s)", Type = ParameterType.Share, Feedback = "00:00:00"
- });
- // 工艺步数
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.StepNo",
- Display = "工艺步数",
- Type = ParameterType.Share,
- Feedback = "0",
- Setpoint = ""
- });
- // 工艺每一步运行时间
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.RecipeStepTimeElapsed",
- Display = "当前步时间 (s)",
- Type = ParameterType.Default,
- Feedback = "0",
- Setpoint = "",
- SetpointEnabled = false
- });
- // process gauge
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.ProcessGauge.Value",
- Display = "工艺压力(mTorr)",
- Type = ParameterType.Share,
- Feedback = "0",
- SetpointEnabled = false
- });
- // pressure gauge
- //PMParameters.Add(new PMParameter
- //{
- // Name = $"{pmID}.PressureGauge.Value", Display = "腔体压力(mTorr)",
- // Type = ParameterType.Share, Feedback = "0", SetpointEnabled = false
- //});
-
- // foreline gauge
- // 蝶阀运作模式
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.IoThrottleValve.ThrottleValve.TVMode",
- Display = "蝶阀运行模式",
- Type = ParameterType.DropDownList,
- SetpointEnabled = true,
- Selections = new List<string> { "Position", "Pressure" },
- Setpoint = "Pressure",
- Feedback = "Pressure"
- });
- // 蝶阀位置
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.IoThrottleValve.ThrottleValve.TVPosition", Display = "蝶阀位置 (%)",
- Type = ParameterType.Default, Feedback = "0", Setpoint = "", SetpointEnabled = true
- });
- // 蝶阀压力
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.IoThrottleValve.ThrottleValve.TVPressure", Display = "蝶阀压力 (mTorr)",
- Type = ParameterType.Default, Feedback = "0", Setpoint = "", SetpointEnabled = true
- });
- // 底座温度
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.IoTemperatureCtrl.TemperatureControl.SubstrateTemperature",
- Display = HeaterButtonContent=="底座加热"?"底座温度 (℃)": "水冷温度(℃)",
- Type = ParameterType.Default,
- Feedback = "0",
- Setpoint = "",
- SetpointEnabled = true
- });
- // 射频时间
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.Rf.PowerOnTime", Display = "射频时间 (s)", Type = ParameterType.Default,
- Feedback = "0", Setpoint = "", SetpointEnabled = true
- });
- //para = new PMParameter() { Display = "RF Mode", Type = ParameterType.DropDownList, Feedback = "Manual", SetpointEnabled = true };
- //para.Selections = new List<string>() { "Manual", "Auto" };
- //paras.Add(para);
- // 设定功率
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.Rf.ForwardPower", Display = "源射频功率 (w)", Type = ParameterType.Default,
- Feedback = "", Setpoint = "", SetpointEnabled = true
- });
- // ReflectPower
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.Rf.ReflectPower",
- Display = "源反射功率 (w)",
- Type = ParameterType.Share,
- Setpoint = ""
- });
- //// Match C1
- //PMParameters.Add(new PMParameter
- //{
- // Name =$"{pmID}.Match.TunePosition1", Display = "Match C1 (%)", Type = ParameterType.Default, Feedback = "", Setpoint = "",
- // SetpointEnabled = true
- //});
- //// Match C2
- //PMParameters.Add(new PMParameter
- //{
- // Name = $"{pmID}.Match.TunePosition2", Display = "Match C2 (%)", Type = ParameterType.Default, Feedback = "", Setpoint = "",
- // SetpointEnabled = true
- //});
- // Match C1
- PMParameters.Add(new PMParameter()
- {
- Name = $"{pmID}.match.TunePosition1",
- Display = "源射频匹配 C1 (%)",
- Type = ParameterType.Share,
- Setpoint = ""
- });
- // Match C2
- PMParameters.Add(new PMParameter()
- {
- Name = $"{pmID}.match.TunePosition2",
- Display = "源射频匹配 C2 (%)",
- Type = ParameterType.Share,
- Setpoint = ""
- });
- // Vpp
- PMParameters.Add(new PMParameter()
- {
- Name = $"{pmID}.Match.VPP",
- Display = "源射频Vpp", Type = ParameterType.Share, Setpoint = ""
- });
- if ((bool)QueryDataClient.Instance.Service.GetConfig($"{pmID}.BiasRf.EnableBiasRF"))
- {
- // 设定功率
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.BiasRf.ForwardPower",
- Display = "偏压射频功率 (w)",
- Type = ParameterType.Default,
- Feedback = "",
- Setpoint = "",
- SetpointEnabled = true
- });
- // ReflectPower
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.BiasRf.ReflectPower",
- Display = "偏压反射功率 (w)",
- Type = ParameterType.Share,
- Setpoint = ""
- });
- // Match Mode
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.BiasMatch.MatchProcessMode",
- Display = "偏压射频匹配器模式",
- Type = ParameterType.DropDownList,
- SetpointEnabled = true,
- Selections = new List<string> { "Preset", "Hold" },
- Setpoint = "Preset",
- Feedback = "Preset"
- });
- // Match C1
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.BiasMatch.C1",
- Display = "偏压射频匹配 C1 (%)",
- Type = ParameterType.Default,
- Feedback = "0",
- Setpoint = "",
- SetpointEnabled = true
- });
- // Match C2
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.BiasMatch.C2",
- Display = "偏压射频匹配 C2 (%)",
- Type = ParameterType.Default,
- Feedback = "0",
- Setpoint = "",
- SetpointEnabled = true
- });
- // Vpp
- PMParameters.Add(new PMParameter()
- {
- Name = $"{pmID}.BiasMatch.VPP",
- Display = "偏压射频Vpp",
- Type = ParameterType.Share,
- Setpoint = ""
- });
- }
- // 气体
- foreach (var gas in Gaslines)
- {
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.IoMfc.MfcGas{gas.Index}.FeedBack",
- Display = $"{gas.Display} (sccm)",
- Type = ParameterType.Default,
- Feedback = "0",
- Setpoint = "0",
- SetpointEnabled = true
- });
- }
- return PMParameters;
- }
- public void SelectRecipe()
- {
- if (MenuPermission != 3) return;
- if (!Enum.TryParse(SystemName, out ModuleName mod))
- return;
- RecipeSequenceSelectDialogViewModel dialog = new RecipeSequenceSelectDialogViewModel();
- dialog.DisplayName = "Select Recipe";
- dialog.Files = new ObservableCollection<FileNode>(RecipeSequenceTreeBuilder.GetFiles(RecipeClient.Instance.Service.GetRecipes(mod, false).ToList()));
- WindowManager wm = new WindowManager();
- bool? bret = wm.ShowDialog(dialog);
- if ((bool)bret)
- {
- SelectedRecipeName = dialog.DialogResult;
- }
- }
- public void UnLoad()
- {
- }
- public void Start()
- {
- if (MenuPermission != 3) return;
- if (string.IsNullOrWhiteSpace(this.SelectedRecipeName))
- {
- DialogBox.ShowError("请选择工艺程序文件");
- return;
- }
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.{RtOperation.RunRecipe}", $"{SystemName}\\{this.SelectedRecipeName}");
- }
- public void NextStep()
- {
- if (MenuPermission != 3) return;
- if (MessageBox.Show("跳至下一步工艺?", "JetPlasma", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
- {
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.{RtOperation.SkipCurrentStep}");
- }
- }
- public void Stop()
- {
- if (MenuPermission != 3) return;
- if (MessageBox.Show("停止当前工艺?", "JetPlasma", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
- {
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.{RtOperation.AbortRecipe}");
- }
- }
- public void SetManual()
- {
- if (MenuPermission != 3) return;
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.PmManual");
- }
- public void SetAuto()
- {
- if (MenuPermission != 3) return;
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.PmAuto");
- }
- public void SetOnline()
- {
- if (MenuPermission != 3) return;
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.PmOnline");
- }
- public void SetInit()
- {
- if (MenuPermission != 3) return;
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.Home");
- }
- public void AbortPM()
- {
- if (MenuPermission != 3) return;
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.Abort");
- }
- public void SetOffline()
- {
- if (MenuPermission != 3) return;
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.PmOffline");
- }
- public void UnlockLid()
- {
- if (MenuPermission != 3) return;
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.UnlockLid");
- }
- public void LockLid()
- {
- if (MenuPermission != 3) return;
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.LockLid");
- }
- public void OpenSlitValve()
- {
- if (MenuPermission != 3) return;
- if (!IsCDAOK)
- {
- DialogBox.ShowWarning("CDA Pressure Error");
- return;
- }
- if (!IsArmNotExtend)
- {
- DialogBox.ShowWarning("Arm Is Not Extend Error");
- return;
- }
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.SlitDoor.Open");
- }
- public void CloseSlitValve()
- {
- if (MenuPermission != 3) return;
- if (!IsCDAOK)
- {
- DialogBox.ShowWarning("CDA Pressure Error");
- return;
- }
- if (!IsArmNotExtend)
- {
- DialogBox.ShowWarning("Arm Is Not Extend Error");
- return;
- }
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.SlitDoor.Close");
- }
- protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)
- {
- MenuPermission = ClientApp.Instance.GetPermission($"Overview{SystemName}");
- foreach (var pmParameter in PMParameters)
- {
- string paraName = pmParameter.Name;
- if (!data.ContainsKey(paraName))
- continue;
- pmParameter.Feedback = $"{data[paraName]:N0}";
- if (paraName == $"{SystemName}.BiasMatch.MatchProcessMode")
- {
- pmParameter.Feedback = (int)data[paraName] == 1 ? "Preset" : "Hold";
- }
- if (paraName == $"{SystemName}.BiasMatch.C1")
- {
- pmParameter.Feedback = $"{data[paraName]:N1}";
- }
- if (paraName == $"{SystemName}.BiasMatch.C2")
- {
- pmParameter.Feedback = $"{data[paraName]:N1}";
- }
- if (paraName == $"{SystemName}.ProcessGauge.Value")
- {
- pmParameter.Feedback = $"{data[paraName]:N1}";
- }
- if (paraName == $"{SystemName}.IoThrottleValve.ThrottleValve.TVMode")
- {
- pmParameter.Feedback = pmParameter.Setpoint;
- }
- if (paraName == $"{SystemName}.IoThrottleValve.ThrottleValve.TVPressure")
- {
- if (Convert.ToDouble(data[paraName]) <= 0.0)
- {
- pmParameter.Feedback = "0.0";
- }
- else
- {
- pmParameter.Feedback = $"{(Convert.ToDouble(data[paraName]) + ProcessPressureOffset):N1}";
- }
- }
- if (paraName == $"{SystemName}.Rf.PowerOnTime")
- {
- pmParameter.Feedback = $"{data[$"{SystemName}.Rf.PowerOnTime"]}";
- }
- if (paraName == $"{SystemName}.Match.TunePosition1"|| paraName == $"{SystemName}.Match.TunePosition2")
- {
- pmParameter.Feedback = $"{data[paraName]:N2}";
- }
- if (paraName == $"{SystemName}.StepTime")
- {
- pmParameter.Feedback = $"{data[$"{SystemName}.RecipeStepTimeElapsed"]:N0}";
- pmParameter.Setpoint = $"{data[$"{SystemName}.RecipeStepTimeSetPoint"]:N0}";
- }
- if (paraName == $"{SystemName}.StepNo")
- {
- pmParameter.Setpoint = $"{data[$"{SystemName}.RecipeSteps"]:N0}";
- }
- if (paraName == $"{SystemName}.RecipeStepTimeElapsed")
- {
- pmParameter.Setpoint = $"{data[$"{SystemName}.RecipeStepTimeSetPoint"]:N0}";
- }
- if (paraName == ($"{SystemName}.IoTemperatureCtrl.TemperatureControl.SubstrateTemperature"))
- {
- if(IsAutoMode)
- {
- pmParameter.Setpoint = string.Format("{0:N1}", ((AITHeaterData)data[$"{SystemName}.HeaterChamber.DeviceData"]).SetPoint);
- }
- pmParameter.Feedback = string.Format("{0:N1}", ((AITHeaterData)data[$"{SystemName}.HeaterChamber.DeviceData"]).FeedBack);
- }
- }
- foreach (var gasLine in Gaslines)
- {
- if (data.ContainsKey(gasLine.ValveName))
- {
- gasLine.ValveData = (AITValveData)data[gasLine.ValveName];
- gasLine.NotifyOfPropertyChange("ValveData");
- }
- if (data.ContainsKey(gasLine.MfcName))
- {
- gasLine.MfcData = (AITMfcData)data[gasLine.MfcName];
- gasLine.Display = gasLine.MfcData.DeviceName + " " + $"({gasLine.MfcData.DisplayName})" + " " + gasLine.MfcData.Scale + " " + gasLine.MfcData.Unit;
- PMParameters.Find(x => x.Name == $"{SystemName}.IoMfc.MfcGas{gasLine.Index}.FeedBack").Display = gasLine.Display;
- PMParameters.Find(x => x.Name == $"{SystemName}.IoMfc.MfcGas{gasLine.Index}.FeedBack").NotifyOfPropertyChange("Display");
- gasLine.NotifyOfPropertyChange("MfcData");
- }
- }
- //if (PMParameters.Find(x => x.Name == $"{SystemName}.BiasMatch.MatchProcessMode").Setpoint == "Hold")
- //{
- // PMParameters.Find(x => x.Name == $"{SystemName}.BiasMatch.C1").Setpoint = "";
- // PMParameters.Find(x => x.Name == $"{SystemName}.BiasMatch.C2").Setpoint = "";
- //}
- }
- public void DoStartPump()
- {
- if (MenuPermission != 3) return;
- if (IsStartPumping)
- {
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.{RtOperation.Abort}");
- return;
- }
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.StartPump");
- }
- // Pumpdown
- public void DoPump()
- {
- if (MenuPermission != 3) return;
- if (IsPumping)
- {
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.{RtOperation.Abort}");
- return;
- }
- if (IsPumpingOkForProcess)
- {
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.StopPump");
- return;
- }
- // 设置底压
- double basePressure = string.IsNullOrEmpty(BasePressureSetPoint) ? 0 : Convert.ToDouble(BasePressureSetPoint);
- if (basePressure <= 0.01 || basePressure >= 1000)
- {
- MessageBox.Show($"基准压力设定值 {basePressure} 无效,应该在0到1000毫托之间");
- return;
- }
- double pumpLimit = string.IsNullOrEmpty(PumpLimitSetPoint) ? 0 : Convert.ToDouble(PumpLimitSetPoint);
- if (pumpLimit <= 0.01 || pumpLimit >= 1200)
- {
- MessageBox.Show($"抽气时间应该在0到1200之间,当前设定值{pumpLimit}");
- return;
- }
- InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"{SystemName}.Pump.PumpBasePressure", basePressure.ToString());
- InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"{SystemName}.Pump.PumpTimeLimit", pumpLimit.ToString());
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.Pump");
- // pump down 过程中tv 全开
- var tvMode = PMParameters.Find(x => x.Name == $"{SystemName}.IoThrottleValve.ThrottleValve.TVMode");
- tvMode.Feedback = "Position";
- PumpLimitSetPointSaved = true;
- BasePressureSetPointSaved = true;
- NotifyOfPropertyChange(nameof(PumpLimitSetPointSaved));
- NotifyOfPropertyChange(nameof(BasePressureSetPointSaved));
- }
- private void MoveGuidePin(MovementPosition pos)
- {
- switch (pos)
- {
- case MovementPosition.Down:
- BottomPinStatus = 1;
- TopPinStatus = 0;
- MidPinStatus = 0;
- break;
- case MovementPosition.Up:
- BottomPinStatus = 0;
- TopPinStatus = 1;
- MidPinStatus = 0;
- break;
- case MovementPosition.Middle:
- BottomPinStatus = 0;
- TopPinStatus = 0;
- MidPinStatus = 1;
- break;
- default:
- break;
- }
- }
- public void Purge()
- {
- if (MenuPermission != 3) return;
- if (IsCyclePurging)
- {
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.StopPurge");
- }
- else
- {
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.Purge");
- }
- }
- public void LeakCheck()
- {
- if (!IsLeakCheck)
- {
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.LeakCheck");
- }
- }
- public void Vent()
- {
- if (MenuPermission != 3) return;
- //OverviewPMProvider.Instance.Vent("PM1");
- if (!IsVenting)
- {
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.Vent");
- return;
- }
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.{RtOperation.Abort}");
- }
- /// <summary>
- /// 流气
- /// </summary>
- public void Gas()
- {
- if (MenuPermission != 3) return;
- if (!this.HandleThrottleValve())
- return;
- //GasLine 跳号Enable
- object[] mfc = new object[5];
- string[] mfcSetPoint = new string[5];
- for (int i = 0; i < 5; i++)
- {
- if ((bool)QueryDataClient.Instance.Service.GetConfig($"{SystemName}.MfcGas{i + 1}.Enable"))
- {
- mfcSetPoint[i] = PMParameters.Find(x => x.Name == $"{SystemName}.IoMfc.MfcGas{i + 1}.FeedBack").Setpoint;
- if (string.IsNullOrWhiteSpace(mfcSetPoint[i]))
- {
- DialogBox.ShowError("请输入气体流量值");
- return;
- }
- }
- mfc[i] = Convert.ToDouble(string.IsNullOrEmpty(mfcSetPoint[i]) ? "0.0" : mfcSetPoint[i]);
- }
- //object[] mfc = new object[Gaslines.Count];
- //string[] mfcSetPoint = new string[Gaslines.Count];
- //for (int index = 0; index < Gaslines.Count; index++)
- //{
- // mfcSetPoint[index] = PMParameters.Find(x => x.Name == $"{SystemName}.IoMfc.MfcGas{index + 1}.FeedBack").Setpoint;
- // if (string.IsNullOrWhiteSpace(mfcSetPoint[index]))
- // {
- // DialogBox.ShowError("请输入气体流量值");
- // return;
- // }
- // mfc[index] = Convert.ToDouble(string.IsNullOrEmpty(mfcSetPoint[index]) ? "0.0" : mfcSetPoint[index]);
- //}
- if ((IsGasFlowing
- && (Math.Abs((double)mfc[0] - (double)_oldmfc[0]) < 0.01)
- && (Math.Abs((double)mfc[1] - (double)_oldmfc[1]) < 0.01)
- && (Math.Abs((double)mfc[2] - (double)_oldmfc[2])) < 0.01)
- || (IsGasFlowing && (Math.Abs((double)mfc[0]) <= 0.01 && Math.Abs((double)mfc[1]) <= 0.01 && Math.Abs((double)mfc[2]) <= 0.01)))
- {
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.{RtOperation.Abort}");
- return;
- }
- _oldmfc = mfc;
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.{RtOperation.GasFlow}", mfc);
- }
- /// <summary>
- /// 处理蝶阀
- /// </summary>
- /// <returns></returns>
- private bool HandleThrottleValve()
- {
- var tvMode = PMParameters.Find(x => x.Name == $"{SystemName}.IoThrottleValve.ThrottleValve.TVMode");
- string tvModeSp = "TV" + tvMode.Setpoint + "Ctrl";
- if (!Enum.TryParse(tvModeSp, out PressureCtrlMode ctrlMode))
- {
- MessageBox.Show("Select the mode of Throttle valve");
- return false;
- }
- switch (ctrlMode)
- {
- case PressureCtrlMode.TVPressureCtrl:
- string tvPressureSP = PMParameters.Find(x => x.Name == $"{SystemName}.IoThrottleValve.ThrottleValve.TVPressure").Setpoint;
- if (string.IsNullOrWhiteSpace(tvPressureSP))
- {
- DialogBox.ShowError("请输入蝶阀 pressure value");
- return false;
- }
- double pressure = Convert.ToDouble(tvPressureSP);
- if (pressure < 0 || pressure > 756000)
- {
- DialogBox.ShowError($"压力设定值 {pressure} 无效,应该介于0到756000之间");
- return false;
- }
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.{VirgoDevice.ThrottleValve}.{AITThrottleValveOperation.SetPressure}", pressure);
- break;
- case PressureCtrlMode.TVPositionCtrl:
- string tvPositionSP = PMParameters.Find(x => x.Name == $"{SystemName}.IoThrottleValve.ThrottleValve.TVPosition").Setpoint;
- if (string.IsNullOrWhiteSpace(tvPositionSP))
- {
- DialogBox.ShowError("请输入蝶阀 Position value");
- return false;
- }
- double position = Convert.ToDouble(tvPositionSP);
- if (position < 0 || position > 100)
- {
- DialogBox.ShowError($"蝶阀位置 {position} 无效,应该在0到100之间");
- return false;
- }
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.{VirgoDevice.ThrottleValve}.{AITThrottleValveOperation.SetPosition}", position);
- break;
- default:
- break;
- }
- tvMode.Feedback = tvMode.Setpoint;
- return true;
- }
- public void Heat()
- {
- var para_temp = PMParameters.Find(x => x.Name == $"{SystemName}.IoTemperatureCtrl.TemperatureControl.SubstrateTemperature");
- var temp = para_temp.Setpoint;
- if (double.TryParse(temp, out double dt))
- {
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.{RtOperation.Heat}", dt);
- }
- else
- {
- DialogBox.ShowError("设定温度无效");
- }
- }
- // RF Power
- public void RF()
- {
- if (MenuPermission != 3) return;
- double rf_sp = 0;
- double rf_sp_bias = 0;
- double match1_sp = 0.0f;
- double match2_sp = 0.0f;
- double rf_time = 0;
- string rfPowerSetPointBias = "";
- BiasRfMatchMode matchMode = BiasRfMatchMode.Preset;
- if (IsRfPowering)
- {
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.{RtOperation.Abort}");
- return;
- }
- // 源射频功率
- string rfPowerSetPoint = PMParameters.Find(x => x.Name == $"{SystemName}.Rf.ForwardPower").Setpoint;
- if (string.IsNullOrWhiteSpace(rfPowerSetPoint))
- {
- DialogBox.ShowWarning("Input RF power set value first");
- return;
- }
- // 源射频时间
- string sRFTime = PMParameters.Find(x => x.Name == $"{SystemName}.Rf.PowerOnTime").Setpoint;
- if (string.IsNullOrWhiteSpace(sRFTime))
- {
- DialogBox.ShowError("Input RF power time");
- return;
- }
- // 偏压射频功率
- if ((bool)QueryDataClient.Instance.Service.GetConfig($"{SystemName}.BiasRf.EnableBiasRF"))
- {
- rfPowerSetPointBias = PMParameters.Find(x => x.Name == $"{SystemName}.BiasRf.ForwardPower").Setpoint;
- if (string.IsNullOrWhiteSpace(rfPowerSetPointBias))
- {
- DialogBox.ShowWarning("Input Bias RF power set value first");
- return;
- }
- rf_sp_bias = Convert.ToDouble(rfPowerSetPointBias);
- if ((bool)QueryDataClient.Instance.Service.GetConfig($"{SystemName}.BiasMatch.EnableBiasMatch"))
- {
- var MatchMode = PMParameters.Find(x => x.Name == $"{SystemName}.BiasMatch.MatchProcessMode");
- if (!Enum.TryParse(MatchMode.Setpoint, out matchMode))
- {
- MessageBox.Show("Select the mode of Throttle valve");
- return;
- }
- if (matchMode == BiasRfMatchMode.Preset)
- {
- PMParameters.Find(x => x.Name == $"{SystemName}.BiasMatch.MatchProcessMode").Feedback = "Preset";
- // Match C1
- string rfMatchC1SetPoint = PMParameters.Find(x => x.Name == $"{SystemName}.BiasMatch.C1").Setpoint;
- if (string.IsNullOrWhiteSpace(rfMatchC1SetPoint))
- {
- DialogBox.ShowWarning("Input Match C1 set value first");
- return;
- }
- // Match C2
- string rfMatchC2SetPoint = PMParameters.Find(x => x.Name == $"{SystemName}.BiasMatch.C2").Setpoint;
- if (string.IsNullOrWhiteSpace(rfMatchC2SetPoint))
- {
- DialogBox.ShowWarning("Input Match C2 set value first");
- return;
- }
- match1_sp = Convert.ToDouble(rfMatchC1SetPoint);
- match2_sp = Convert.ToDouble(rfMatchC2SetPoint);
- }
- else if (matchMode == BiasRfMatchMode.Hold)
- {
- //PMParameters.Find(x => x.Name == $"{SystemName}.BiasMatch.MatchProcessMode").Feedback = "Hold";
- }
- }
- }
-
- rf_sp = Convert.ToDouble(rfPowerSetPoint);
- rf_time = Convert.ToDouble(sRFTime);
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.{RtOperation.RfPower}", rf_sp, rf_sp_bias, rf_time, (int)matchMode, match1_sp, match2_sp);
- }
- // Lift pin method
- public void MoveLiftPinUp()
- {
- if (MenuPermission != 3) return;
- if (!IsCDAOK)
- {
- DialogBox.ShowWarning("CDA Pressure Error");
- return;
- }
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.LiftPin.Open");
- }
- public void MoveLiftPinDown()
- {
- if (MenuPermission != 3) return;
- if (!IsCDAOK)
- {
- DialogBox.ShowWarning("CDA Pressure Error");
- return;
- }
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.LiftPin.Close");
- }
- // Guide pin method
- public void MovePin3Up()
- {
- if (MenuPermission != 3) return;
- if (!IsCDAOK)
- {
- DialogBox.ShowWarning("CDA Pressure Error");
- return;
- }
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.{RtOperation.MoveGuidePin}", WaferSize.WS3, 2);
- }
- public void MovePin3Down()
- {
- if (MenuPermission != 3) return;
- if (!IsCDAOK)
- {
- DialogBox.ShowWarning("CDA Pressure Error");
- return;
- }
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.{RtOperation.MoveGuidePin}", WaferSize.WS3, 1);
- }
- public void MovePin4Up()
- {
- if (MenuPermission != 3) return;
- if (!IsCDAOK)
- {
- DialogBox.ShowWarning("CDA Pressure Error");
- return;
- }
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.{RtOperation.MoveGuidePin}", WaferSize.WS4, 2);
- }
- public void MovePin4Down()
- {
- if (MenuPermission != 3) return;
- if (!IsCDAOK)
- {
- DialogBox.ShowWarning("CDA Pressure Error");
- return;
- }
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.{RtOperation.MoveGuidePin}", WaferSize.WS4, 1);
- }
- }
- }
|