using Aitex.Core.Util; using Aitex.Sorter.Common; using ControlzEx.Standard; using MECF.Framework.Common.DataCenter; using MECF.Framework.Common.Equipment; using MECF.Framework.Common.OperationCenter; using OpenSEMI.ClientBase; using Prism.Commands; using Prism.Mvvm; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Media.Animation; using System.Windows.Threading; using Venus_MainPages.Unity; using Venus_Themes.UserControls; namespace Venus_MainPages.ViewModels { public class VceViewModel : BindableBase { private double _PositionZ;//支撑底柱高度 private double _TransformData; //private double m_PositionZ; //private Image VceWaferNames; private int _GotoSlot; private bool m_VCEDoorIsOpen;//是否开门 private Dictionary m_RtDataValues = new Dictionary(); private List m_RtDataKeys = new List(); private bool m_VCEIsInstalled; //private bool m_isGotoLP; private int m_GoToSlotNumber; private int m_VCE1WaferCount;//wafer数量 private int m_lstslot; private List m_VCE1ModuleInfo; //下拉框内容 private List m_TMModules = new List(); private SeTMModule m_PickSelectedModule; //下拉框关联内容 private ObservableCollection m_PickSoltItemsSource = new ObservableCollection(); //下拉框当前选择 private int m_PickSoltSelectedIndex; #region 属性 public double PositionZ { get { return _PositionZ; } set { SetProperty(ref _PositionZ, value); } } public double TransformData { get { return _TransformData; } set { SetProperty(ref _TransformData, value); } } public int CurrentSlot { get { return _GotoSlot; } set { SetProperty(ref _GotoSlot, value); } } public bool VceDoorIsOpen { get { return m_VCEDoorIsOpen; } set { SetProperty(ref m_VCEDoorIsOpen, value); } } public Dictionary RtDataValues { get { return m_RtDataValues; } set { SetProperty(ref m_RtDataValues, value); } } public bool VCEIsInstalled { get { return m_VCEIsInstalled; } set { SetProperty(ref m_VCEIsInstalled, value); } } public int VCE1WaferCount { get { return m_VCE1WaferCount; } set { SetProperty(ref m_VCE1WaferCount, value); } } public int GoToSlotNumber { get => m_GoToSlotNumber; set => SetProperty(ref m_GoToSlotNumber, value); } public List VCE1ModuleInfo { get { return m_VCE1ModuleInfo; } set { SetProperty(ref m_VCE1ModuleInfo, value); } } //Module属性 public SeTMModule PickSelectedModule { get { return m_PickSelectedModule; } set { SetProperty(ref m_PickSelectedModule, value); } } //下拉框内容 public ObservableCollection PickSoltItemsSource { get { return m_PickSoltItemsSource; } set { SetProperty(ref m_PickSoltItemsSource, value); } } public List TMModules { get { return m_TMModules; } set { SetProperty(ref m_TMModules, value); } } //下拉框选择 public int PickSoltSelectedIndex { get { return m_PickSoltSelectedIndex; } set { SetProperty(ref m_PickSoltSelectedIndex, value); } } #endregion //构造函数 public VceViewModel() { CurrentSlot = -1; GoToSlotNumber = 25; PositionZ = 430; string[] allModules = QueryDataClient.Instance.Service.GetConfig($"System.InstalledModules").ToString().Split(','); VCEIsInstalled = allModules.Contains("VCE1"); TMModules.Add(SeTMModule.VCE1); for (int i = 1; i <= 25; i++) { PickSoltItemsSource.Add(i); } addDataKeys(); RtDataValues = QueryDataClient.Instance.Service.PollData(m_RtDataKeys); VceDoorIsOpen = !CommonFunction.GetValue(RtDataValues, "VCE1.VCEOutDoorClosed"); m_lstslot = -1; CurrentSlot = -1; DispatcherTimer timer = new DispatcherTimer(); timer.Interval = TimeSpan.FromSeconds(0.1); timer.Tick += timer_Tick; timer.Start(); } #region 命令 //VCE Home private DelegateCommand _VCEHome; public DelegateCommand VCEHome => _VCEHome ?? (_VCEHome = new DelegateCommand(vceHome)); //扫片 private DelegateCommand _VCEReadMap; public DelegateCommand VCEReadMap => _VCEReadMap ?? (_VCEReadMap = new DelegateCommand(vceReadMap)); private DelegateCommand _VCELoadPrepare; public DelegateCommand VCELoadPrepare => _VCELoadPrepare ?? (_VCELoadPrepare = new DelegateCommand(vceLoadPrepare)); private DelegateCommand __VCELoad; public DelegateCommand VCELoad => __VCELoad ?? (__VCELoad = new DelegateCommand(vceLoad)); private DelegateCommand _VCEUnLoad; public DelegateCommand VCEUnLoad => _VCEUnLoad ?? (_VCEUnLoad = new DelegateCommand(vceUnLoad)); //开门 private DelegateCommand _OpenDoorCommand; public DelegateCommand OpenDoorCommand => _OpenDoorCommand ?? (_OpenDoorCommand = new DelegateCommand(OnOpenDoor)); //关门 private DelegateCommand _CloseDoorCommand; public DelegateCommand CloseDoorCommand => _CloseDoorCommand ?? (_CloseDoorCommand = new DelegateCommand(OnCloseDoor)); //对准槽 private DelegateCommand _GoToSlotCommand; public DelegateCommand GoToSlotCommand => _GoToSlotCommand ?? (_GoToSlotCommand = new DelegateCommand(OnGoToSlot)); //模块下拉框选择命令 private DelegateCommand _ModuleChangeCommand; public DelegateCommand ModuleChangeCommand => _ModuleChangeCommand ?? (_ModuleChangeCommand = new DelegateCommand(OnModuleChange)); //对准LP private DelegateCommand _GoToLoadCommand; public DelegateCommand GoToLoadCommand => _GoToLoadCommand ?? (_GoToLoadCommand = new DelegateCommand(OnGoToLoad)); #endregion #region 命令方法 private void vceHome(object obj) { InvokeClient.Instance.Service.DoOperation("VCE1.HOME"); } private void vceReadMap() { InvokeClient.Instance.Service.DoOperation("VCE1.ReadMap"); if (VCEIsInstalled == true) { VCE1ModuleInfo = ModuleManager.ModuleInfos["VCE1"].WaferManager.Wafers; } } private void vceLoadPrepare() { InvokeClient.Instance.Service.DoOperation("VCE1.LoadPrepare"); } private void vceLoad() { InvokeClient.Instance.Service.DoOperation("VCE1.SafeLoad"); } private void vceUnLoad() { InvokeClient.Instance.Service.DoOperation("VCE1.SafeUnload"); } private void OnOpenDoor(object obj) { TransformData = 100; //VceDoorIsOpen = true; InvokeClient.Instance.Service.DoOperation("VCE1.DoorOpen"); } private void OnCloseDoor(object obj) { //VceDoorIsOpen = false; InvokeClient.Instance.Service.DoOperation("VCE1.DoorClose"); } private void OnGoToLoad(object obj) { InvokeClient.Instance.Service.DoOperation("VCE1.GotoLP"); //PositionZ = 435; CurrentSlot = -1; gotoSlot(); } //模块选择根据obj选择下拉框内容 private void OnModuleChange(object obj) { //var value = obj.ToString(); //switch (value) //{ // case "Pick": // PickSoltItemsSource.Clear(); // for (int i = 1; i <= 25; i++) // { // PickSoltItemsSource.Add(i); // } // PickSoltSelectedIndex = 0; // break; //} } private void OnGoToSlot(object obj) { GoToSlotNumber = PickSoltItemsSource[PickSoltSelectedIndex]; //CurrentSlot = GoToSlotNumber - 1; InvokeClient.Instance.Service.DoOperation("VCE1.Goto", GoToSlotNumber); gotoSlot(); } private void gotoSlot() { if (CurrentSlot>=0) { //PositionZ = 430 - 7.5 * (25 - CurrentSlot); } else { PositionZ = 430; } } #endregion #region 私有方法 private void timer_Tick(object sender, EventArgs e) { RtDataValues = QueryDataClient.Instance.Service.PollData(m_RtDataKeys); VceDoorIsOpen = !CommonFunction.GetValue(RtDataValues, "VCE1.VCEOutDoorClosed"); CurrentSlot = CommonFunction.GetValue(RtDataValues, "VCE1.CurrentSlot")-1; if (m_lstslot != CurrentSlot) { m_lstslot = CurrentSlot; } if (VCEIsInstalled == true) { VCE1ModuleInfo = ModuleManager.ModuleInfos["VCE1"].WaferManager.Wafers; } } private void addDataKeys() { m_RtDataKeys.Add($"VCE1.VCEOutDoorClosed"); //m_RtDataKeys.Add($"VCE1.GotoLP"); m_RtDataKeys.Add($"VCE1.CurrentSlot"); } #endregion } }