using System.Collections.Generic; using System.Collections.ObjectModel; using System.Windows; using Aitex.Core.RT.IOCore; using MECF.Framework.Common.DataCenter; using MECF.Framework.Common.IOCore; using MECF.Framework.Common.OperationCenter; using MECF.Framework.UI.Client.ClientBase; using OpenSEMI.ClientBase.IO; namespace FurnaceUI.Models.Maintenances.IO1 { public class IO1ViewModel : UiViewModelBase, ISupportMultipleSystem { public bool IsPermission { get => this.Permission == 3; } public string SystemName { get; set; } public Visibility DIVisibility { get { return DIs.Count > 0 ? Visibility.Visible : Visibility.Collapsed; } } public Visibility DOVisibility { get { return DOs.Count > 0 ? Visibility.Visible : Visibility.Collapsed; } } public Visibility AIVisibility { get { return AIs.Count > 0 ? Visibility.Visible : Visibility.Collapsed; } } public Visibility AOVisibility { get { return AOs.Count > 0 ? Visibility.Visible : Visibility.Collapsed; } } public int DIWidth { get { return (DIs.Count / 31 + 1) * 355; } } public int DOWidth { get { return (DOs.Count / 31 + 1) * 405; } } public int AIWidth { get { return (AIs.Count / 31 + 1) * 550; } } public int AOWidth { get { return (AOs.Count / 31 + 1) * 370; } } public ObservableCollection> AIs { get; private set; } public ObservableCollection AOs { get; private set; } public ObservableCollection> DIs { get; private set; } public ObservableCollection> DOs { get; private set; } private string _diKey; private string _doKey; private string _aiKey; private string _aoKey; private List _fitlerIOKey; protected override void OnInitialize() { base.OnInitialize(); LoadFitlerIOData(); _diKey = $"{SystemName}.DIItemList"; _doKey = $"{SystemName}.DOItemList"; _aiKey = $"{SystemName}.AIItemList"; _aoKey = $"{SystemName}.AOItemList"; this.AIs = InitIOData(IOType.AI, _aiKey); this.AOs = InitIOData(IOType.AO, _aoKey); this.DIs = InitIOData(IOType.DI, _diKey); this.DOs = InitIOData(IOType.DO, _doKey); _diKey = $"{SystemName}.DIList"; _doKey = $"{SystemName}.DOList"; _aiKey = $"{SystemName}.AIList"; _aoKey = $"{SystemName}.AOList"; Subscribe(_aiKey); Subscribe(_aoKey); Subscribe(_diKey); Subscribe(_doKey); } protected override void OnActivate() { base.OnActivate(); } protected override void OnDeactivate(bool close) { base.OnDeactivate(close); } protected override void InvokeAfterUpdateProperty(Dictionary data) { base.InvokeAfterUpdateProperty(data); if (data[_aiKey] != null) { List lstData = (List)data[_aiKey]; Dictionary dicValues = new Dictionary(); for (int i = 0; i < lstData.Count; i++) { dicValues[lstData[i].Name] = lstData[i].FloatValue; } foreach (IOItem item in AIs) { if (dicValues.ContainsKey(item.Name)) item.Value = dicValues[item.Name]; } } if (data[_aoKey] != null) { List lstData = (List)data[_aoKey]; Dictionary dicValues = new Dictionary(); for (int i = 0; i < lstData.Count; i++) { dicValues[lstData[i].Name] = lstData[i].FloatValue; } foreach (IOItem item in AOs) { if (dicValues.ContainsKey(item.Name)) item.Value = dicValues[item.Name]; } } if (data[_diKey] != null) { List lstData = (List)data[_diKey]; Dictionary dicValues = new Dictionary(); for (int i = 0; i < lstData.Count; i++) { dicValues[lstData[i].Name] = lstData[i].BoolValue; } foreach (IOItem item in DIs) { if (dicValues.ContainsKey(item.Name)) item.Value = dicValues[item.Name]; } } if (data[_doKey] != null) { List lstData = (List)data[_doKey]; Dictionary dicValues = new Dictionary(); for (int i = 0; i < lstData.Count; i++) { dicValues[lstData[i].Name] = lstData[i].BoolValue; } foreach (IOItem item in DOs) { if (dicValues.ContainsKey(item.Name)) item.Value = dicValues[item.Name]; } } } public void SetDO(IOItem doItem) { if (MessageBox.Show( $"Please be attention, direct control DO is generally forbidden, Are you sure you want to do the operation?\r\n {doItem.Name} = {!doItem.Value}", "Warning", MessageBoxButton.YesNo, MessageBoxImage.Warning) != MessageBoxResult.Yes) return; InvokeClient.Instance.Service.DoOperation("System.SetDoValue", doItem.Name, !doItem.Value); } public void SetAO(AOItemFloat aoItem) { if (MessageBox.Show( $"Please be attention, direct control AO is generally forbidden, Are you sure you want to do the operation?\r\n {aoItem.Name} = {aoItem.NewValueFloat}", "Warning", MessageBoxButton.YesNo, MessageBoxImage.Warning) != MessageBoxResult.Yes) return; InvokeClient.Instance.Service.DoOperation("System.SetAoValueFloat", aoItem.Name, aoItem.NewValueFloat); aoItem.TextSavedFloat = true; } public ObservableCollection> InitIOData(IOType type, string dataName) { //get the whole informations ObservableCollection> da = new ObservableCollection>(); if (type == IOType.DI) { var diList = QueryDataClient.Instance.Service.GetData(dataName); if (diList != null) { List di = (List)diList; for (int i = 0; i < di.Count; i++) { bool value = true; if (value is T && !_fitlerIOKey.Contains(di[i].Name)) { da.Add(new IOItem() { Index = da.Count, Name = di[i].Name, //DisplayName = di[i].Name.Substring(di[i].Name.IndexOf('.') + 1), DisplayName = di[i].Description, Value = (T)(object)di[i].BoolValue, Address = di[i].Address }) ; } } } } if (type == IOType.DO) { var diList = QueryDataClient.Instance.Service.GetData(dataName); if (diList != null) { List item = (List)diList; for (int i = 0; i < item.Count; i++) { bool value = true; if (value is T) { da.Add(new IOItem() { Index = da.Count, Name = item[i].Name , //DisplayName = item[i].Name.Substring(item[i].Name.IndexOf('.') + 1), DisplayName = item[i].Description, Value = (T)(object)item[i].BoolValue, Address = item[i].Address }); } } } } if (type == IOType.AI) { var diList = QueryDataClient.Instance.Service.GetData(dataName); if (diList != null) { List item = (List)diList; for (int i = 0; i < item.Count; i++) { da.Add(new IOItem() { Index = da.Count, Name = item[i].Name , //DisplayName = item[i].Name.Substring(item[i].Name.IndexOf('.') + 1), DisplayName = item[i].Description, Value = (T)(object)item[i].FloatValue, Address = item[i].Address }); } } } return da; } public ObservableCollection InitIOData(IOType type, string dataName) { //get the whole informations ObservableCollection da = new ObservableCollection(); if (type == IOType.AO) { var diList = QueryDataClient.Instance.Service.GetData(dataName); if (diList != null) { List item = (List)diList; for (int i = 0; i < item.Count; i++) { { da.Add(new AOItemFloat() { Index = da.Count, Name = item[i].Name , //DisplayName = item[i].Name.Substring(item[i].Name.IndexOf('.') + 1), DisplayName = item[i].Description, Value = item[i].FloatValue, Address = item[i].Address }); } } } } return da; } private void LoadFitlerIOData() { _fitlerIOKey = new List(); //{ // "EFEM.DI_LightCurtainsStateEFEM", // "EFEM.DI_CDAPressureSensorState", // "EFEM.DI_EMOState", // "EFEM.DI_SafeDoorState", // "EFEM.DI_SystemPowerONState", // "EFEM.DI_CSFfuOK", // "EFEM.DI_IOPortFfuOK", // "EFEM.DI_IOBtmExhFanOK", // "EFEM.DI_FncExhFanOK", // "EFEM.DI_Station1PresenceSensor", // "EFEM.DI_Station2PresenceSensor", // "EFEM.DI_Station3PresenceSensor", // "EFEM.DI_Station4PresenceSensor", // "EFEM.DI_Station5PresenceSensor", // "EFEM.DI_Station6PresenceSensor", // "EFEM.DI_Station7PresenceSensor", // "EFEM.DI_Station8PresenceSensor", // "EFEM.DI_Station9PresenceSensor", // "EFEM.DI_Station10PresenceSensor", // "EFEM.DI_Station11PresenceSensor", // "EFEM.DI_Station12PresenceSensor", // "EFEM.DI_Station13PresenceSensor", // "EFEM.DI_Station14PresenceSensor", // "EFEM.DI_Station15PresenceSensor", // "EFEM.DI_Station16PresenceSensor", // "EFEM.DI_Station17PresenceSensor", // "EFEM.DI_Station18PresenceSensor", // "EFEM.DI_Station19PresenceSensor", // "EFEM.DI_Station20PresenceSensor", // "EFEM.DI_Station21PresenceSensor", // "EFEM.DI_CassetteProtrusionSensor1", // "EFEM.DI_CassetteProtrusionSensor2", // "EFEM.DI_CassetteProtrusionSensor3", // "EFEM.DI_CassetteProtrusionSensor4", // "EFEM.DI_CassetteProtrusionSensor5", // "EFEM.DI_CassetteProtrusionSensor6", // "EFEM.DI_CassetteProtrusionSensor7", // "EFEM.DI_CassetteProtrusionSensor8", // "EFEM.DI_CassetteProtrusionSensor9", // "EFEM.DI_Stage1LockPosition", // "EFEM.DI_Stage1UnlockPosition", // "EFEM.DI_Stage2LockPosition", // "EFEM.DI_Stage2UnlockPosition", // "EFEM.DI_Stage1CASSPresenceSensor", // "EFEM.DI_Stage2CASSPresenceSensor", // "EFEM.DI_R3NotExtendToStage1", // "EFEM.DI_R3NotExtendToStage2", // "EFEM.DI_R5NotExtendToStage1", // "EFEM.DI_R5NotExtendToStage2", // "MF.DI_ASOpenPosition", // "MF.DI_ASClosePosition", // "MF.DI_ASUpPosition", // "MF.DI_ASDownPosition", // "MF.DI_ASOpenStatus", // "MF.DI_ASTiltStatus", // "MF.DI_SideDoorFfuOK", // "MF.DI_ZAxisUpLimit", // "MF.DI_ZAxisDownLimit", // "MF.DI_BEHumanInterlockSensor", // "MF.DI_CapCloseSensor", // "MF.DI_Zone1Sensor", // "MF.DI_Zone2Sensor", // "MF.DI_R5ArmNotExtendToBE", // "MF.DI_CapILOK", // "MF.DI_PPPosition", // "MF.DI_HomePosition", // "PM1.DI_A_SClosePosition", // "SMIF.DI_LightCurtainsStateSMIF", // "SMIF.DI_Smif1PodLockPosition", // "SMIF.DI_Smif1PodUnlockPositionSersor", // "SMIF.DI_Smif1PodOpenPositionSensor", // "SMIF.DI_Smif1PodClosePositionSensor", // "SMIF.DI_Smif1PodPresenceSensor", // "SMIF.DI_Smif1ZAxisUnloadPositionSensor", // "SMIF.DI_Smif1ZAxisLoadPositionSensor", // "SMIF.DI_Smif1ZAxisPosition1Sensor", // "SMIF.DI_Smif1ZAxisPosition2Sensor", // "SMIF.DI_Smif1RotateAxisCheckSensor1", // "SMIF.DI_Smif1RotateAxisCheckSensor2", // "SMIF.DI_Smif1SlideAxisExtendSensor", // "SMIF.DI_Smif1SlideAxisRetractSensor", // "SMIF.DI_Smif1ProtrudedWaferSensor", // "SMIF.DI_Smif1MappingSensor", // "SMIF.DI_Smif2PodLockPosition", // "SMIF.DI_Smif2PodUnlockPositionSersor", // "SMIF.DI_Smif2PodOpenPositionSensor", // "SMIF.DI_Smif2PodClosePositionSensor", // "SMIF.DI_Smif2PodPresenceSensor", // "SMIF.DI_Smif2ZAxisUnloadPositionSensor", // "SMIF.DI_Smif2ZAxisLoadPositionSensor", // "SMIF.DI_Smif2ZAxisPosition1Sensor", // "SMIF.DI_Smif2ZAxisPosition2Sensor", // "SMIF.DI_Smif2RotateAxisCheckSensor1", // "SMIF.DI_Smif2RotateAxisCheckSensor2", // "SMIF.DI_Smif2SlideAxisExtendSensor", // "SMIF.DI_Smif2SlideAxisRetractSensor", // "SMIF.DI_Smif2ProtrudedWaferSensor", // "SMIF.DI_Smif2MappingSensor", // "SMIF.DI_SmifFfuOK", // "SMIF.DI_R3ArmNotExtendToSmif1", // "SMIF.DI_R3ArmNotExtendToSmif2", //}; } } }