Sic10/SicUI/Models/PMs/PMMotionViewModel.cs

582 lines
22 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Aitex.Core.Common.DeviceData;
using Aitex.Core.RT.Event;
using Aitex.Core.RT.SCCore;
using Aitex.Core.Util;
using Caliburn.Micro;
using MECF.Framework.UI.Client.ClientBase;
using SicUI.Controls;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
namespace SicUI.Models.PMs
{
public class PMMotionViewModel : SicModuleUIViewModelBase, ISupportMultipleSystem
{
public PMMotionViewModel()
{
this.DisplayName = "Motion";
SHLocation = 100;
MiddleLocation = 290;
BottomLocation = 480;
RingLocation = 0;
SelectedMoveBodyGroup = MoveBodyGroup[0];
GetScTime();
}
public string Module => SystemName;
protected override void OnInitialize()
{
base.OnInitialize();
}
protected override void OnActivate()
{
base.OnActivate();
CheckHeatConditionOK(out double _);
}
protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)
{
NotifyOfPropertyChange("IsChamMoveBodyUp");
NotifyOfPropertyChange("IsChamMoveBodyDown");
NotifyOfPropertyChange("IsChamMoveBodyFront");
NotifyOfPropertyChange("IsChamMoveBodyEnd");
}
[Subscription("Status")]
public string Status { get; set; }
[Subscription("IsOnline")]
public bool IsOnline { get; set; }
[Subscription("IsService")]
public bool IsService { get; set; }
public bool PMIsIdle => !IsOnline;
//public string NextTipsContent { get; set; }
#region Properties
public float SHLocation { get; set; }
public float MiddleLocation { get; set; }
public float BottomLocation { get; set; }
public float RingLocation { get; set; }
private List<string> _moveBodyGroup = new List<string>() { "ShowHead", "Middle" };
public List<string> MoveBodyGroup
{
get { return _moveBodyGroup; }
set { _moveBodyGroup = value; NotifyOfPropertyChange("MoveBodyGroup"); }
}
private string _selectedMoveBodyGroup;
public string SelectedMoveBodyGroup
{
get { return _selectedMoveBodyGroup; }
set
{
_selectedMoveBodyGroup = value; NotifyOfPropertyChange("SelectedMoveBodyGroup");
}
}
private int _moveUpDownTime = 3000;
private int _moveEndForwardTime = 5000;
private int _moveSwingTime = 1000;
private int _moveSectionUpDown = 1000;
private int _moveRingUp = 3000;
private void GetScTime()
{
}
public int TimeMoveUp => _moveUpDownTime;
public int TimeMoveEnd => _moveEndForwardTime;
public int TimeSectionUp => _moveSectionUpDown;
public int TimeSwing => _moveSwingTime;
public int TimeRingUp => _moveRingUp;
#endregion Properties
#region Properties
[Subscription("ChamberMoveBody.ForwardLatchFaceback")]
public bool FowardLatchFeedBack { get; set; }
[Subscription("ChamberMoveBody.BackwardLatchFaceback")]
public bool BackwardLatchFeedBack { get; set; }
[Subscription("ChamberMoveBody.UpFaceback")]
public bool IsChamMoveBodyUp { get; set; }
[Subscription("ChamberMoveBody.DownFaceback")]
public bool IsChamMoveBodyDown { get; set; }
[Subscription("ChamberMoveBody.UpLatchFaceback")]
public bool IsChamMoveBodyUpLatch { get; set; }
[Subscription("ChamberMoveBody.FrontFaceback")]
public bool IsChamMoveBodyFront { get; set; }
[Subscription("ChamberMoveBody.EndFaceback")]
public bool IsChamMoveBodyEnd { get; set; }
[Subscription("ChamberMoveBody.UpSetpoint")]
public bool UpSetpoint { get; set; }
[Subscription("ChamberMoveBody.DownSetpoint")]
public bool DownSetpoint { get; set; }
[Subscription("ChamberMoveBody.ForwardSetpoint")]
public bool ForwardSetpoint { get; set; }
[Subscription("ChamberMoveBody.BackwardSetpoint")]
public bool BackwardSetpoint { get; set; }
[Subscription("ChamberMoveBody.IsRemoteFeceback")]
public bool IsRemoteFeceback { get; set; }
[Subscription("ChamberMoveBody.IsLockedFeceback")]
public bool IsLockedFeceback { get; set; }
[Subscription("ChamberMoveBody.UpDownEnableFaceback")]
public bool UpDownEnableFaceback { get; set; }
public bool IsBottomLidSwingUnlock { get; set; }
[Subscription("GasConnector.GasConnectorLoosenFeedback")]
public bool IsGasConnectorLoosen { get; set; }
[Subscription("GasConnector.GasConnectorTightenFeedback")]
public bool IsGasConnectorTighten { get; set; }
[Subscription("SHLid.LoosenFaceback")]
public bool IsSHLidLoosen { get; set; }
[Subscription("SHLid.TightenFaceback")]
public bool IsSHLidTighten { get; set; }
[Subscription("SHLid.ClosedFaceback")]
public bool IsSHLidClosed { get; set; }
[Subscription("SHLidSwing.LidLockFaceback")]
public bool IsSHLidSwingLock { get; set; }
[Subscription("SHLidSwing.LidUnlockFaceback")]
public bool IsSHLidSwingUnlock { get; set; }
//[Subscription("ConfinementRing.RingUpSensor")]
//public bool RingUpSensor { get; set; }
//[Subscription("ConfinementRing.RingDownSensor")]
//public bool RingDownSensor { get; set; }
[Subscription("Trigger.LidMotionEnable")]
public bool IsLidMotionEnable { get; set; }
[Subscription("Trigger.RotationMotorEnable")]
public bool IsRotationMotorEnable { get; set; }
[Subscription("MiddleLid.LoosenFaceback")]
public bool IsMiddleLidLoosen { get; set; }
[Subscription("MiddleLid.TightenFaceback")]
public bool IsMiddleLidTighten { get; set; }
[Subscription("MiddleLid.ClosedFaceback")]
public bool IsMiddleLidClosed { get; set; }
[Subscription("MiddleLidSwing.LidLockFaceback")]
public bool IsMiddleLidSwingLock { get; set; }
[Subscription("MiddleLidSwing.LidUnlockFaceback")]
public bool IsMiddleLidSwingUnlock { get; set; }
#endregion Properties
#region OP
public void ChamMoveBodyUp()
{
if ((IsSHLidLoosen && IsSHLidSwingUnlock) || (IsMiddleLidLoosen && IsMiddleLidSwingUnlock) )
{
InvokeClient.Instance.Service.DoOperation($"{SystemName}.ChamberMoveBody.SetUpSetpoint");
}
else
{
ShowMessage("Can not set Body Upyou must set the Lid Loosen and the Swing Unlock first!");
}
}
public void ChamMoveBodyDown()
{
InvokeClient.Instance.Service.DoOperation($"{SystemName}.ChamberMoveBody.SetDownSetpoint");
}
public void ChamMoveBodyLatch()
{
bool setValue = true;
if (IsChamMoveBodyUpLatch)
{
setValue = false;
}
InvokeClient.Instance.Service.DoOperation($"{SystemName}.ChamberMoveBody.SetUpLatch", new object[] { setValue });
}
public void ChamMoveBodyForward()
{
InvokeClient.Instance.Service.DoOperation($"{SystemName}.ChamberMoveBody.SetForward");
}
public void ChamMoveBodyBackward()
{
InvokeClient.Instance.Service.DoOperation($"{SystemName}.ChamberMoveBody.SetBackward");
}
public void SetForwardLatch()
{
InvokeClient.Instance.Service.DoOperation($"{SystemName}.ChamberMoveBody.SetForwardLatch");
}
public void SetBackwardLatch()
{
InvokeClient.Instance.Service.DoOperation($"{SystemName}.ChamberMoveBody.SetBackwardLatch");
}
public void SetUpDownEnable()
{
InvokeClient.Instance.Service.DoOperation($"{SystemName}.ChamberMoveBody.SetUpDownEnable", !UpDownEnableFaceback);
}
public void GasConnectorLoosen()
{
InvokeClient.Instance.Service.DoOperation($"{SystemName}.GasConnector.SetGasConnectorLoosen");
}
public void GasConnectorTighten()
{
if ((IsSHLidTighten && IsSHLidSwingLock) && (IsMiddleLidTighten && IsMiddleLidSwingLock))
{
InvokeClient.Instance.Service.DoOperation($"{SystemName}.GasConnector.SetGasConnectorTighten");
}
else
{
ShowMessage("Can not set GasConnectorTightenyou must set all Lid Tighten and all Swing Lock first!");
return;
}
}
public void SHLidLoosen()
{
if (IsSHLidSwingUnlock)
{
ShowMessage("Can not set SHLid while the SHLidSwing is Unlock!");
return;
}
InvokeClient.Instance.Service.DoOperation($"{SystemName}.SHLid.Loosen");
}
public void SHLidTighten()
{
if (IsSHLidSwingUnlock)
{
ShowMessage("Can not set SHLid while the SHLidSwing is Unlock!");
return;
}
InvokeClient.Instance.Service.DoOperation($"{SystemName}.SHLid.Tighten");
}
public void SHLidLock()
{
if (IsSHLidTighten)
{
ShowMessage("Can not set Swing to Lock while the SH Lid is tighten!");
return;
}
InvokeClient.Instance.Service.DoOperation($"{SystemName}.SHLidSwing.SetLidLockSetpoint");
}
public void SHLidUnlock()
{
if (IsSHLidTighten)
{
ShowMessage("Can not set Swing to UnLock while the SH Lid is tighten!");
return;
}
InvokeClient.Instance.Service.DoOperation($"{SystemName}.SHLidSwing.SetLidUnlockSetpoint");
}
public void LidMotionEnable()
{
InvokeClient.Instance.Service.DoOperation($"{SystemName}.Trigger.SetLidMotionEnable");
}
public void RotationMotorEnable()
{
InvokeClient.Instance.Service.DoOperation($"{SystemName}.Trigger.SetRotationMotorEnable");
}
public void MiddleLidLoosen()
{
if (IsMiddleLidSwingUnlock)
{
ShowMessage("Can not set MiddleLid while the MiddleLidSwing is Unlock!");
return;
}
InvokeClient.Instance.Service.DoOperation($"{SystemName}.MiddleLid.Loosen");
}
public void MiddleLidTighten()
{
if (IsMiddleLidSwingUnlock)
{
ShowMessage("Can not set MiddleLid while the MiddleLidSwing is Unlock!");
return;
}
InvokeClient.Instance.Service.DoOperation($"{SystemName}.MiddleLid.Tighten");
}
public void MiddleLidLock()
{
if (IsMiddleLidTighten)
{
ShowMessage("Can not set MiddleLidSwing to Lock while the Middle Lid is tighten!");
return;
}
InvokeClient.Instance.Service.DoOperation($"{SystemName}.MiddleLidSwing.SetLidLockSetpoint");
}
public void MiddleLidUnlock()
{
if (IsMiddleLidTighten)
{
ShowMessage("Can not set MiddleLidSwing to UnLock while the Middle Lid is tighten!");
return;
}
InvokeClient.Instance.Service.DoOperation($"{SystemName}.MiddleLidSwing.SetLidUnlockSetpoint");
}
public void ChamberMoveBodyOpen()
{
if (!CheckHeatConditionOK(out double _leftTime))
{
//string strTips = $"Are you sure want to open the chamber lid? ";
//if (HeatEnableTips == Visibility.Visible)
//{
// strTips = $"Are you sure want to open the chamber lid? \r\nBe Carefull of High Temperature!";
//}
string strTips = $"The temperature is too high to open the Lid. \r\nWait for {_leftTime.ToString("0.0")} minutes before opening it";
if (ShowChoosenDialog(strTips))
{
}
}
else
{
InvokeClient.Instance.Service.DoOperation($"{SystemName}.ChamberMoveBodyOpen", SelectedMoveBodyGroup, true);
}
}
public void ChamberMoveBodyClose()
{
if (ShowChoosenDialog("Are you sure want to close the chamber lid ? "))
{
InvokeClient.Instance.Service.DoOperation($"{SystemName}.ChamberMoveBodyOpen", SelectedMoveBodyGroup, false);
}
}
#endregion OP
#region EnableProperties
public bool IsActionEnable => false;
private bool OpenSH => SelectedMoveBodyGroup.Contains("ShowHead");
private bool OpenMiddle => SelectedMoveBodyGroup.Contains("Middle");
public bool EnableSelectLid => IsRemoteFeceback && IsChamMoveBodyFront && IsChamMoveBodyDown && IsSHLidClosed && IsMiddleLidClosed;
public bool EnableOpen => IsService && !IsOnline && IsRemoteFeceback && IsChamMoveBodyFront && IsChamMoveBodyDown && (IsSHLidClosed && IsMiddleLidClosed);
public bool EnableClose => IsService && !IsOnline && IsRemoteFeceback && IsChamMoveBodyFront && IsChamMoveBodyDown && (IsSHLidSwingUnlock || IsMiddleLidSwingUnlock) ;
public bool EnableUpDownEnable => ((!UpDownEnableFaceback && !IsChamMoveBodyDown) || IsChamMoveBodyDown) && (IsChamMoveBodyFront && IsGasConnectorLoosen && PMIsIdle && !IsRemoteFeceback && (IsSHLidSwingUnlock || IsMiddleLidSwingUnlock));
public bool EnableUpLatch => IsChamMoveBodyFront && PMIsIdle && IsRemoteFeceback && IsGasConnectorLoosen && (IsSHLidSwingUnlock || IsMiddleLidSwingUnlock);
public bool EnableForwardLatch => IsChamMoveBodyUp && IsGasConnectorLoosen && !FowardLatchFeedBack && IsRemoteFeceback;
public bool EnableBackwardLatch => IsChamMoveBodyUp && IsChamMoveBodyFront && IsGasConnectorLoosen && !BackwardLatchFeedBack && IsRemoteFeceback;
public bool EnableSHTighten => OpenSH && IsSHLidSwingLock && IsSHLidLoosen && PMIsIdle && IsRemoteFeceback;
public bool EnableSHLoosen => OpenSH && IsSHLidTighten && IsChamMoveBodyDown && IsChamMoveBodyFront && PMIsIdle && !IsMiddleLidLoosen && !IsSHLidLoosen && IsGasConnectorLoosen && IsRemoteFeceback;
public bool EnableSHSwingLock => OpenSH && IsSHLidLoosen && IsChamMoveBodyDown && IsChamMoveBodyFront && PMIsIdle && IsRemoteFeceback;
public bool EnableSHSwingUnlock => OpenSH && IsSHLidLoosen && PMIsIdle && IsChamMoveBodyDown && IsChamMoveBodyFront && IsRemoteFeceback;
public bool EnableMiddleTighten => OpenMiddle && IsMiddleLidSwingLock && IsMiddleLidLoosen && PMIsIdle && IsRemoteFeceback;
public bool EnableMiddleLoosen => OpenMiddle && IsMiddleLidTighten && IsChamMoveBodyDown && IsChamMoveBodyFront && PMIsIdle && !IsMiddleLidLoosen && !IsSHLidLoosen && IsGasConnectorLoosen && IsRemoteFeceback;
public bool EnableMiddleSwingLock => OpenMiddle && IsMiddleLidLoosen && IsChamMoveBodyDown && IsChamMoveBodyFront && PMIsIdle && IsRemoteFeceback;
public bool EnableMiddleSwingUnlock => OpenMiddle && IsMiddleLidLoosen && PMIsIdle && IsRemoteFeceback && IsChamMoveBodyDown && IsChamMoveBodyFront;
public bool EnableGasConnectorLoosen => IsChamMoveBodyFront && IsChamMoveBodyDown && PMIsIdle && IsGasConnectorTighten;
public bool EnableGasConnectorTighten => IsGasConnectorLoosen && PMIsIdle && IsChamMoveBodyFront && IsChamMoveBodyDown && IsSHLidTighten && IsMiddleLidTighten;
public bool EnableMoveBodyOpen => IsChamMoveBodyDown && PMIsIdle && !IsMiddleLidLoosen && !IsSHLidLoosen ;
public bool EnableMoveBodyClose => !IsChamMoveBodyDown && PMIsIdle;
public Visibility UpDownISFalse => !UpDownEnableFaceback && !IsChamMoveBodyDown ? Visibility.Visible : Visibility.Hidden;
#endregion EnableProperties
private void ShowMessage(string msg)
{
InvokeClient.Instance.Service.DoOperation($"{SystemName}.ShowMessage", msg);
}
public bool ShowChoosenDialog(string strInfo)
{
ChooseDialogBoxViewModel dialog = new ChooseDialogBoxViewModel();
dialog.DisplayName = "Tips";
dialog.InfoStr = strInfo;
WindowManager wm = new WindowManager();
bool? bret = wm.ShowDialog(dialog);
if (!bret.HasValue || !bret.Value)
{
return false;
}
return true;
}
#region Rotation Servo
[Subscription("PMServo.ServoEnable")]
public bool IsServoEnable { get; set; }
[Subscription("PMServo.ServoReady")]
public bool IsServoReady { get; set; }
[Subscription("PMServo.ServoError")]
public bool IsServoError { get; set; }
[Subscription("PMServo.ActualSpeedFeedback")]
public float ActualSpeedFeedback { get; set; }
[Subscription("PMServo.ActualCurrentFeedback")]
public float ActualCurrentFeedback { get; set; }
public void SetServoEnable()
{
InvokeClient.Instance.Service.DoOperation($"{SystemName}.PMServo.SetServoEnable", !IsServoEnable);
}
public void SetServoInital()
{
InvokeClient.Instance.Service.DoOperation($"{SystemName}.PMServo.SetServoInital");
}
public void SetServoReset()
{
InvokeClient.Instance.Service.DoOperation($"{SystemName}.PMServo.SetServoReset");
}
public void SetActualSpeed(object data)
{
double speed = 0;
if (!double.TryParse(data.ToString(), out speed))
{
return;
}
if (speed > 1000)
{
speed = 1000;
return;
}
if (speed < 0)
{
speed = 0;
}
InvokeClient.Instance.Service.DoOperation($"{SystemName}.PMServo.SetActualSpeed", speed);
}
#endregion
#region Ring
[Subscription("IsOnline")]
public bool PM1IsOnline { get; set; }
[Subscription("Status")]
public string PM1Status { get; set; }
[Subscription("ConfinementRing.RingCurPos")]
public float RingCurPos { get; set; }
[Subscription("ConfinementRing.RingUpPos")]
public float RingUpPos { get; set; }
[Subscription("ConfinementRing.RingDownPos")]
public float RingDownPos { get; set; }
[Subscription("ConfinementRing.RingUpSensor")]
public bool RingUpSensor { get; set; }
[Subscription("ConfinementRing.RingDownSensor")]
public bool RingDownSensor { get; set; }
[Subscription("ConfinementRing.RingDone")]
public bool RingDone { get; set; }
[Subscription("ConfinementRing.RingIsServoOn")]
public bool RingIsServoOn { get; set; }
[Subscription("ConfinementRing.RingIsBusy")]
public bool RingIsBusy { get; set; }
[Subscription("ConfinementRing.RingIsAlarm")]
public bool RingIsAlarm { get; set; }
public bool ConfinementRingBtnEnable => !RingIsBusy && !RingIsAlarm && !PM1IsOnline && PM1Status != "Process";
public void RingServoStop()
{
InvokeClient.Instance.Service.DoOperation($"{Module}.ConfinementRing.ServoStop");
}
public void RingServoOn()
{
InvokeClient.Instance.Service.DoOperation($"{Module}.ConfinementRing.ServoOn");
}
public void RingServoReset()
{
InvokeClient.Instance.Service.DoOperation($"{Module}.ConfinementRing.ServoReset");
}
public void RingMoveUpPos()
{
InvokeClient.Instance.Service.DoOperation($"{Module}.ConfinementRing.MoveUpPos");
}
public void RingMoveDownPos()
{
InvokeClient.Instance.Service.DoOperation($"{Module}.ConfinementRing.MoveDownPos");
}
public void RingJogUp(float distance)
{
InvokeClient.Instance.Service.DoOperation($"{Module}.ConfinementRing.JogUp", distance);
}
public void RingJogDown(float distance)
{
InvokeClient.Instance.Service.DoOperation($"{Module}.ConfinementRing.JogDown", distance);
}
#endregion
public Visibility HeatEnableTips { get; set; }
private bool CheckHeatConditionOK(out double minuts)
{
minuts = 0;
int lidopenAfterHeatDisbaleMinuts = (int)QueryDataClient.Instance.Service.GetConfig("PM.LidEnableOpenAfterHeatDisbaleTime");
string dateTimeStr = QueryDataClient.Instance.Service.GetConfig($"PM.{SystemName}.OpenLidCountDownTime").ToString();
DateTime dtStartTime =DateTime.Now;
if (DateTime.TryParse(dateTimeStr, out dtStartTime))
{
minuts = lidopenAfterHeatDisbaleMinuts - (DateTime.Now - dtStartTime).TotalMinutes;
if (dtStartTime.AddMinutes(lidopenAfterHeatDisbaleMinuts) < DateTime.Now)
{
HeatEnableTips = Visibility.Collapsed;
return true;
}
}
HeatEnableTips = Visibility.Visible;
return false;
}
}
}