Sic.Framework-Nanjing-Baishi/UIDebug/SicUI/Models/Maintenances/TM/DeviceViewModel.cs

424 lines
14 KiB
C#
Raw Normal View History

using Aitex.Core.RT.DataCenter;
using Aitex.Core.RT.SCCore;
using Aitex.Core.Util;
using MECF.Framework.Common.DataCenter;
using MECF.Framework.Common.OperationCenter;
using SicUI.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Aitex.Core.RT.Event;
using System.Threading;
using Aitex.Core.Common.DeviceData;
namespace SicUI.Client.Models.Platform.TM
{
public class DeviceViewModel : SicUIViewModelBase
{
[Subscription("LoadLock.IsOnline")]
public bool LoadLockIsOnline { get; set; }
[Subscription("PM1.IsOnline")]
public bool PM1IsOnline { get; set; }
[Subscription("PM1.Status")]
public string PM1Status{ get; set; }
[Subscription("Load.Rotation.IsServoBusy")]
public bool LdRotationIsBusy { get; set; }
[Subscription("Load.Rotation.IsServoOn")]
public bool LdRotationIsServoOn { get; set; }
[Subscription("Load.Rotation.IsMoveDone")]
public bool LdRotationIsServoDone { get; set; }
[Subscription("Load.Rotation.IsServoError")]
public bool LdRotationIsServoError { get; set; }
[Subscription("TM.LLTrayPresence.DeviceData")]
public AITSensorData LoadTrayPresence { get; set; }
[Subscription("TM.LoadTrayHomeSensor.DeviceData")]
public AITSensorData LoadTrayHomeSensor { get; set; }
[Subscription("TM.LLWaferPlaced.DeviceData")]
public AITSensorData LoadWaferPlaced { get; set; }
[Subscription("Load.Rotation.CurPos")]
public double LdRotationCurPos { get; set; }
[Subscription("Load.Rotation.CCD1Degree")]
public double LdCCD1Degree { get; set; }
[Subscription("Load.Rotation.CCD2Degree")]
public double LdCCD2Degree { get; set; }
public bool LdRotationBtnEnable => !LdRotationIsBusy && !LdRotationIsServoError && !LoadLockIsOnline;
#region AutoTransferCondition
[Subscription("Scheduler.AutoTransferConditionText")]
public string AutoTransferConditionText { get; set; }
[Subscription("Scheduler.WhichCondition")]
public string WhichCondition { get; set; }
[Subscription("Aligner.HiWinAligner.WaferSize")]
public string WaferSize { get; set; }
[Subscription("Aligner.HiWinAligner.WaferType")]
public string WaferType { get; set; }
[Subscription("Aligner.HiWinAligner.WaferMaterial")]
public string WaferMaterialData { get; set; }
[Subscription("Aligner.HiWinAligner.WaferOrientation")]
public string WaferOrientation { get; set; }
public void AutoTransferCond(string sCond)
{
AutoTransferConditionText = "";
WhichCondition = sCond;
}
#endregion
public DeviceViewModel()
{
AutoTransferConditionText = "";
}
public void LdRotationStop()
{
InvokeClient.Instance.Service.DoOperation($"Load.Rotation.Stop");
}
public void LdRotationReset()
{
InvokeClient.Instance.Service.DoOperation($"Load.Rotation.ServoReset");
}
public void LdRotationServoOn()
{
InvokeClient.Instance.Service.DoOperation($"Load.Rotation.ServoOn");
}
public void LdRotationMoveOneCircle()
{
InvokeClient.Instance.Service.DoOperation($"Load.Rotation.MoveOneCircle");
}
public void LdRotationRelativeHome()
{
InvokeClient.Instance.Service.DoOperation($"Load.Rotation.MoveRelativeHome");
}
public void LdRotationRelativeHomeOffset()
{
InvokeClient.Instance.Service.DoOperation($"Load.Rotation.HomeOffset");
}
public void LdRotationMoveCCD1Pos()
{
InvokeClient.Instance.Service.DoOperation($"Load.Rotation.MoveCCD1Pos");
}
public void LdRotationMoveCCD2Pos()
{
InvokeClient.Instance.Service.DoOperation($"Load.Rotation.MoveCCD2Pos");
}
public void LdRotationJogCW(float angle)
{
InvokeClient.Instance.Service.DoOperation($"Load.Rotation.JogCW", angle);
}
public void LdRotationJogCCW(float angle)
{
InvokeClient.Instance.Service.DoOperation($"Load.Rotation.JogCCW", angle);
}
#region CCD
[Subscription("TM.KeyenceCVX300F.Result")]
public string CCDResult { get; set; }
public void CCDTrig()
{
int iConditionId = CCDPosSelected == "Pos1" ? 1 : 2;
InvokeClient.Instance.Service.DoOperation("TM.KeyenceCVX300F.ClearResult");
InvokeClient.Instance.Service.DoOperation("TM.KeyenceCVX300F.GetResult", iConditionId);
}
public void RunR0()
{
InvokeClient.Instance.Service.DoOperation("TM.KeyenceCVX300F.RunR0");
}
private List<string> _CCDPos = new List<string>() { "Pos1", "Pos2" };
public List<string> CCDPos
{
get { return _CCDPos; }
set { _CCDPos = value; }
}
private string _CCDPosSelect = "Pos1";
public string CCDPosSelected
{
get { return _CCDPosSelect; }
set { _CCDPosSelect = value; }
}
#endregion
#region hw aligner
//晶圆尺寸
private List<string> _waferSizes = new List<string>() { "0出厂值", "4", "5", "6", "8" };
public List<string> WaferSizes
{
get { return _waferSizes; }
set { _waferSizes = value; NotifyOfPropertyChange("WaferSize"); }
}
private string _waferSizeSelected;
public string WaferSizeSelected
{
get { return _waferSizeSelected; }
set {
if (value.CompareTo(_waferSizes[0]) == 0)
{
_waferSizeSelected = "0";
}
else
{
_waferSizeSelected = value;
}
NotifyOfPropertyChange("WaferSizeSelected");
}
}
//晶圆类型
private List<string> _waferTypes = new List<string>() {
"0无Notch或Flat的晶圆",
"1有NOtch的晶圆出厂值",
"2有一个或多个Flat的晶圆"
};
public List<string> WaferTypes
{
get { return _waferTypes; }
set { _waferTypes = value; NotifyOfPropertyChange("WaferTypes"); }
}
private string _waferTypeSelected;
public string WaferTypeSelected
{
get { return _waferTypeSelected; }
set {
if (value.CompareTo(_waferTypes[0]) == 0)
{
_waferTypeSelected = "0";
}
else if(value.CompareTo(_waferTypes[1]) == 0)
{
_waferTypeSelected = "1";
}
else
{
_waferTypeSelected = "2";
}
NotifyOfPropertyChange("WaferTypeSelected");
}
}
//寻边材质
private List<string> _waferMaterial = new List<string>() {
"0:不透明(出厂值)",
"1:透明、半透明"
};
public List<string> WaferMaterial
{
get { return _waferMaterial; }
set { _waferMaterial = value; NotifyOfPropertyChange("WaferMaterial"); }
}
private string _waferMaterialSelected;
public string WaferMaterialSelected
{
get { return _waferMaterialSelected; }
set {
if(value.CompareTo(_waferMaterial[0]) == 0)
{
_waferMaterialSelected = "0";
}
else
{
_waferMaterialSelected = "1";
}
NotifyOfPropertyChange("WaferMaterialSelected");
}
}
//qbh 20220701
public void Aligner_WaferSize(string sValue)
{
InvokeClient.Instance.Service.DoOperation($"Aligner.HiWinAligner.HwWaferSize", WaferSizeSelected);
}
public void Aligner_WaferType(string sValue)
{
InvokeClient.Instance.Service.DoOperation($"Aligner.HiWinAligner.HwWaferType", WaferTypeSelected);
}
public void Aligner_WaferMaterial(string sValue)
{
InvokeClient.Instance.Service.DoOperation($"Aligner.HiWinAligner.HwWaferMaterial", WaferMaterialSelected);
}
public void Aligner_WaferOrientation(string sValue)
{
string sDegree = sValue.Trim();
if(sDegree.Length == 0)
{
EV.PostWarningLog("TM", "Aligner parameter error: Wafer Orientation is empty.");
return;
}
int iDegree = -1;
try
{
iDegree = Convert.ToInt32(sDegree);
}
catch(Exception ex)
{
EV.PostWarningLog("TM", "Aligner parameter error: Wafer Orientation degree should be in 0-3599.");
return;
}
InvokeClient.Instance.Service.DoOperation($"Aligner.HiWinAligner.HwWaferOrientation", sDegree);
}
public void Aligner_SaveParameters()
{
InvokeClient.Instance.Service.DoOperation($"Aligner.HiWinAligner.HwSaveParameters");
}
#endregion
#region UPS
//PM1 UPSA
[Subscription("PM1.ITAUPSA.BatteryUnderResidue")]
public float UPSPM1A_BatteryUnderResidue { get; set; }
[Subscription("PM1.ITAUPSA.BatteryRemainsTime")]
public float UPSPM1A_BatteryRemainsTime { get; set; }
[Subscription("PM1.ITAUPSA.BatteryVoltage")]
public float UPSPM1A_BatteryVoltage { get; set; }
[Subscription("PM1.ITAUPSA.InputVoltage")]
public float UPSPM1A_InputVoltage { get; set; }
//PM1 UPSB
[Subscription("PM1.ITAUPSB.BatteryUnderResidue")]
public float UPSPM1B_BatteryUnderResidue { get; set; }
[Subscription("PM1.ITAUPSB.BatteryRemainsTime")]
public float UPSPM1B_BatteryRemainsTime { get; set; }
[Subscription("PM1.ITAUPSB.BatteryVoltage")]
public float UPSPM1B_BatteryVoltage { get; set; }
[Subscription("PM1.ITAUPSB.InputVoltage")]
public float UPSPM1B_InputVoltage { get; set; }
//PM2 UPSA
[Subscription("PM2.ITAUPSA.BatteryUnderResidue")]
public float UPSPM2A_BatteryUnderResidue { get; set; }
[Subscription("PM2.ITAUPSA.BatteryRemainsTime")]
public float UPSPM2A_BatteryRemainsTime { get; set; }
[Subscription("PM2.ITAUPSA.BatteryVoltage")]
public float UPSPM2A_BatteryVoltage { get; set; }
[Subscription("PM2.ITAUPSA.InputVoltage")]
public float UPSPM2A_InputVoltage { get; set; }
//PM2 UPSB
[Subscription("PM2.ITAUPSB.BatteryUnderResidue")]
public float UPSPM2B_BatteryUnderResidue { get; set; }
[Subscription("PM2.ITAUPSB.BatteryRemainsTime")]
public float UPSPM2B_BatteryRemainsTime { get; set; }
[Subscription("PM2.ITAUPSB.BatteryVoltage")]
public float UPSPM2B_BatteryVoltage { get; set; }
[Subscription("PM2.ITAUPSB.InputVoltage")]
public float UPSPM2B_InputVoltage { get; set; }
#endregion
#region Ring
[Subscription("PM1.ConfinementRing.RingCurPos")]
public float RingCurPos { get; set; }
[Subscription("PM1.ConfinementRing.RingUpPos")]
public float RingUpPos { get; set; }
[Subscription("PM1.ConfinementRing.RingDownPos")]
public float RingDownPos { get; set; }
[Subscription("PM1.ConfinementRing.RingUpSensor")]
public bool RingUpSensor { get; set; }
[Subscription("PM1.ConfinementRing.RingDownSensor")]
public bool RingDownSensor { get; set; }
[Subscription("PM1.ConfinementRing.RingDone")]
public bool RingDone { get; set; }
[Subscription("PM1.ConfinementRing.RingIsServoOn")]
public bool RingIsServoOn { get; set; }
[Subscription("PM1.ConfinementRing.RingIsBusy")]
public bool RingIsBusy { get; set; }
[Subscription("PM1.ConfinementRing.RingIsAlarm")]
public bool RingIsAlarm { get; set; }
public bool ConfinementRingBtnEnable => !RingIsBusy && !RingIsAlarm && !PM1IsOnline && PM1Status != "Process";
public void RingServoStop()
{
InvokeClient.Instance.Service.DoOperation("PM1.ConfinementRing.ServoStop");
}
public void RingServoOn()
{
InvokeClient.Instance.Service.DoOperation("PM1.ConfinementRing.ServoOn");
}
public void RingServoReset()
{
InvokeClient.Instance.Service.DoOperation("PM1.ConfinementRing.ServoReset");
}
public void RingMoveUpPos()
{
InvokeClient.Instance.Service.DoOperation("PM1.ConfinementRing.MoveUpPos");
}
public void RingMoveDownPos()
{
InvokeClient.Instance.Service.DoOperation("PM1.ConfinementRing.MoveDownPos");
}
public void RingJogUp(float distance)
{
InvokeClient.Instance.Service.DoOperation("PM1.ConfinementRing.JogUp",distance);
}
public void RingJogDown(float distance)
{
InvokeClient.Instance.Service.DoOperation("PM1.ConfinementRing.JogDown",distance);
}
#endregion
}
}