1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073 |
- 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");
- }
- }
- public int WaferLength1
- {
- 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.WS8: return 125;
- default: return 145;
- }
- }
- }
- 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("TriStateLiftPin.PinPosition")]
- public int TriStateLiftPinPosition { get; set; }
- [Subscription("TriStateLiftPin2.PinPosition")]
- public int GroupTriStateLiftPinPosition { get; set; }
- [Subscription("TriStateLiftPin4.PinPosition")]
- public int DGroupTriStateLiftPinPosition { get; set; }
- private int _PinPosition;
- public int PinPosition
- {
- get
- {
- return _PinPosition;
- }
- set
- {
- _PinPosition = value;
- NotifyOfPropertyChange("PinPosition");
- }
- }
- [Subscription("TriStateLiftPin.ManualStopState")]
- public bool TriStateLiftPinManualStopState { get; set; }
- [Subscription("TriStateLiftPin2.ManualStopState")]
- public bool GroupTriStateLiftPinManualStopState { get; set; }
- [Subscription("TriStateLiftPin4.ManualStopState")]
- public bool DGroupTriStateLiftPinManualStopState { get; set; }
- private bool _ManualStopState;
- public bool ManualStopState
- {
- get
- {
- return _ManualStopState;
- }
- set
- {
- _ManualStopState = value;
- NotifyOfPropertyChange("ManualStopState");
- }
- }
- [Subscription("TriStateLiftPin.ManualUpState")]
- public bool TriStateLiftPinManualUpState { get; set; }
- [Subscription("TriStateLiftPin2.ManualUpState")]
- public bool GroupTriStateLiftPinManualUpState { get; set; }
- [Subscription("TriStateLiftPin4.ManualUpState")]
- public bool DGroupTriStateLiftPinManualUpState { get; set; }
- public bool _ManualUpState;
- public bool ManualUpState
- {
- get
- {
- return _ManualUpState;
- }
- set
- {
- _ManualUpState = value;
- NotifyOfPropertyChange("ManualUpState");
- }
- }
- [Subscription("TriStateLiftPin.ManualDownState")]
- public bool TriStateLiftPinManualDownState { get; set; }
- [Subscription("TriStateLiftPin2.ManualDownState")]
- public bool GroupTriStateLiftPinManualDownState { get; set; }
- [Subscription("TriStateLiftPin4.ManualDownState")]
- public bool DGroupTriStateLiftPinManualDownState { get; set; }
- private bool _ManualDownState;
- public bool ManualDownState
- {
- get
- {
- return _ManualDownState;
- }
- set
- {
- _ManualDownState = value;
- NotifyOfPropertyChange("ManualDownState");
- }
- }
- [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("SensorCDAPressureOk2")]
- public AITSensorData SensorCDAPressureOk2 { get; set; }
- [Subscription("SourceFan1")]
- public AITSensorData SourceFan1 { get; set; }
- [Subscription("SensorWaterLeakOk")]
- public AITSensorData SensorWaterLeakOk { get; set; }
- [Subscription("SensorArmNotExtend")]
- public AITSensorData SensorArmNotExtend { get; set; }
- [Subscription("TriStateLiftPin.CurrentValue")]
- public float TriStateLiftPinCurrentValue { get; set; }
- public void TriStateLiftPinStop()
- {
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.{_servoLiftPinName}.Stop");
- }
- public void TriStateLiftPinUp()
- {
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.{_servoLiftPinName}.Up");
- }
- public void TriStateLiftPinDown()
- {
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.{_servoLiftPinName}.Down");
- }
- 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 "Temperature Set";
- }
- else
- {
- if ((bool)QueryDataClient.Instance.Service.GetConfig($"PMB.Chiller.EnableChiller"))
- {
- return "Temperature Set";
- }
- else
- {
- return "Substrate Heating";
- }
- }
- }
- else
- {
- return "Temperature Set";
- }
- }
- else
- return "Substrate Heating";
- }
- }
- //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 (int)QueryDataClient.Instance.Service.GetConfig($"{SystemName}.LiftPinMode") == 1; }
- }
- public bool IsMidPinVisible
- {
- get { return (int)QueryDataClient.Instance.Service.GetConfig($"{SystemName}.LiftPinMode") == 1; }
- }
- public bool IsLiftPinVisible
- {
- get { return true; }
- }
- public bool IsLiftPinUp
- {
- get
- {
- return PinPosition == 3;
- }
- }
- public bool IsLiftPinMiddle
- {
- get
- {
- return PinPosition == 2;
- }
- }
- public bool IsLiftPinHome
- {
- get
- {
- return PinPosition == 0;
- }
- }
- public bool EnableLiftPinUp
- {
- get { return !IsAutoMode && !IsLiftPinUp; }
- }
- public bool EnableLiftPinMiddle
- {
- get { return !IsAutoMode && !IsLiftPinMiddle; }
- }
- public bool EnableLiftPinHome
- {
- get { return !IsAutoMode && !IsLiftPinHome; }
- }
- public bool EnableLock
- {
- get { return LidLockerData != null && !LidLockerData.OpenSetPoint; }
- }
- public bool IsLiftPinDown
- {
- get
- {
- return PinPosition == 1;
- }
- }
- public bool EnableLiftPinDown
- {
- get { return !IsAutoMode && !IsLiftPinDown; }
- }
- 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 EnableLiftPinManualMove
- {
- get { return !IsAutoMode; }
- }
- 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 int _servoLiftPinMode;
- private string _servoLiftPinName;
- public PmOverviewViewModel()
- {
- BasePressureSetPointSaved = true;
- PumpLimitSetPointSaved = true;
- }
- protected override void Poll()
- {
- base.Poll();
- PinPosition = _servoLiftPinMode == 1 ? TriStateLiftPinPosition : _servoLiftPinMode == 2 ? GroupTriStateLiftPinPosition: DGroupTriStateLiftPinPosition;
- ManualStopState = _servoLiftPinMode == 1 ? TriStateLiftPinManualStopState : _servoLiftPinMode == 2 ? GroupTriStateLiftPinManualStopState: DGroupTriStateLiftPinManualStopState;
- ManualUpState = _servoLiftPinMode == 1 ? TriStateLiftPinManualUpState : _servoLiftPinMode == 2 ? GroupTriStateLiftPinManualUpState: DGroupTriStateLiftPinManualUpState;
- ManualDownState = _servoLiftPinMode == 1 ? TriStateLiftPinManualDownState : _servoLiftPinMode == 2 ? GroupTriStateLiftPinManualDownState: DGroupTriStateLiftPinManualDownState;
- }
- protected override void OnActivate()
- {
- base.OnActivate();
- _servoLiftPinMode = (int)QueryDataClient.Instance.Service.GetConfig($"{SystemName}.LiftPinMode");
- _servoLiftPinName = _servoLiftPinMode == 1 ? "TriStateLiftPin" : _servoLiftPinMode == 2 ? "TriStateLiftPin2" : _servoLiftPinMode == 4 ? "TriStateLiftPin4" : "";
- 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 = (int)QueryDataClient.Instance.Service.GetConfig($"{SystemName}.LiftPinMode") == 0 ? 0 : 32;
- MediumPinHeight = (int)QueryDataClient.Instance.Service.GetConfig($"{SystemName}.LiftPinMode") == 0 ? 0 : 32;
- 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;
- }
- 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);
- }
- }
- 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 = "Process Time (s)", Type = ParameterType.Share, Feedback = "00:00:00"
- });
- // 工艺步数
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.StepNo",
- Display = "Process Step",
- Type = ParameterType.Share,
- Feedback = "0",
- Setpoint = ""
- });
- // 工艺每一步运行时间
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.RecipeStepTimeElapsed",
- Display = "Time elapsed (s)",
- Type = ParameterType.Default,
- Feedback = "0",
- Setpoint = "",
- SetpointEnabled = false
- });
- // process gauge
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.ProcessGauge.Value",
- Display = "Process Pressure(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 = "TVMode",
- 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 = "TVPosition (%)",
- Type = ParameterType.Default, Feedback = "0", Setpoint = "", SetpointEnabled = true
- });
- // 蝶阀压力
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.IoThrottleValve.ThrottleValve.TVPressure", Display = "TVPressure (mTorr)",
- Type = ParameterType.Default, Feedback = "0", Setpoint = "", SetpointEnabled = true
- });
- // 底座温度
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.IoTemperatureCtrl.TemperatureControl.SubstrateTemperature",
- Display = HeaterButtonContent== "Substrate Heating" ? "LE TEMP (℃)": "Chiller TEMP(℃)",
- Type = ParameterType.Default,
- Feedback = "0",
- Setpoint = "",
- SetpointEnabled = true
- });
- // 射频时间
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.Rf.PowerOnTime", Display = "RF Time (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 = "Source ForwardPower (w)", Type = ParameterType.Default,
- Feedback = "", Setpoint = "", SetpointEnabled = true
- });
- // ReflectPower
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.Rf.ReflectPower",
- Display = "Source ReflectPower (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 = "Source Match C1(%)",
- Type = ParameterType.Share,
- Setpoint = ""
- });
- // Match C2
- PMParameters.Add(new PMParameter()
- {
- Name = $"{pmID}.Match.TunePosition2",
- Display = "Source Match C2(%)",
- Type = ParameterType.Share,
- Setpoint = ""
- });
- // Vpp
- PMParameters.Add(new PMParameter()
- {
- Name = $"{pmID}.Match.VPP",
- Display = "Source Vpp", Type = ParameterType.Share, Setpoint = ""
- });
- if ((bool)QueryDataClient.Instance.Service.GetConfig($"{pmID}.BiasRf.EnableBiasRF"))
- {
- // 设定功率
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.BiasRf.ForwardPower",
- Display = "Bias ForwardPower(w)",
- Type = ParameterType.Default,
- Feedback = "",
- Setpoint = "",
- SetpointEnabled = true
- });
- // ReflectPower
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.BiasRf.ReflectPower",
- Display = "Bias ReflectPower(w)",
- Type = ParameterType.Share,
- Setpoint = ""
- });
- // Match Mode
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.BiasMatch.MatchProcessMode",
- Display = "Bias Match Mode",
- 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 = "Bias Match C1(%)",
- Type = ParameterType.Default,
- Feedback = "0",
- Setpoint = "",
- SetpointEnabled = true
- });
- // Match C2
- PMParameters.Add(new PMParameter
- {
- Name = $"{pmID}.BiasMatch.C2",
- Display = "Bias Match C2(%)",
- Type = ParameterType.Default,
- Feedback = "0",
- Setpoint = "",
- SetpointEnabled = true
- });
- // Vpp
- PMParameters.Add(new PMParameter()
- {
- Name = $"{pmID}.BiasMatch.VPP",
- Display = "Bias 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("Choose recipe");
- return;
- }
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.{RtOperation.RunRecipe}", $"{SystemName}\\{this.SelectedRecipeName}");
- }
- public void NextStep()
- {
- if (MenuPermission != 3) return;
- if (MessageBox.Show("Next step?", "JetPlasma", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
- {
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.{RtOperation.SkipCurrentStep}");
- }
- }
- public void Stop()
- {
- if (MenuPermission != 3) return;
- if (MessageBox.Show("Stop process?", "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($"Basic pressure setpoint {basePressure} invalid,between 0 end 1000(mtorr)");
- return;
- }
- double pumpLimit = string.IsNullOrEmpty(PumpLimitSetPoint) ? 0 : Convert.ToDouble(PumpLimitSetPoint);
- if (pumpLimit <= 0.01 || pumpLimit >= 1200)
- {
- MessageBox.Show($"Pump limit between 0 end 1200,current value {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("Please input gas flow value");
- 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("Please input TV pressure value");
- return false;
- }
- double pressure = Convert.ToDouble(tvPressureSP);
- if (pressure < 0 || pressure > 756000)
- {
- DialogBox.ShowError($"TV pressure {pressure} invalid,between 0 end 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("Please input TV Position value");
- return false;
- }
- double position = Convert.ToDouble(tvPositionSP);
- if (position < 0 || position > 100)
- {
- DialogBox.ShowError($"TV Position {position} invalid,between 0 end 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("Set TEMP invalid");
- }
- }
- // 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 MoveLiftPinSetState(string name)
- {
- if (MenuPermission != 3) return;
- if (!IsCDAOK)
- {
- DialogBox.ShowWarning("CDA Pressure Error");
- return;
- }
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.{_servoLiftPinName}.SetState",name);
- }
- public void MoveLiftPinHome(string name)
- {
- if (MenuPermission != 3) return;
- if (!IsCDAOK)
- {
- DialogBox.ShowWarning("CDA Pressure Error");
- return;
- }
- InvokeClient.Instance.Service.DoOperation($"{SystemName}.{_servoLiftPinName}.Home",name);
- }
- 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);
- }
- }
- }
|