| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308 | 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;using OpenSEMI.ClientBase.IO;namespace MECF.Framework.UI.Client.CenterViews.Maitenances.IO2{    /// <summary>    /// 与IO2ViewModel的区别是,这个用Short类型的AI , AO     /// </summary>    public class IO2ViewModel : 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) * 370; }        }        public int AOWidth        {            get { return (AOs.Count / 31 + 1) * 370; }        }        public ObservableCollection<IOItem<short>> AIs { get; private set; }        public ObservableCollection<AOItem> AOs { get; private set; }        public ObservableCollection<IOItem<bool>> DIs { get; private set; }        public ObservableCollection<IOItem<bool>> DOs { get; private set; }        private string _diKey;        private string _doKey;        private string _aiKey;        private string _aoKey;        protected override void OnInitialize()        {            base.OnInitialize();            _diKey = $"{SystemName}.DIItemList";            _doKey = $"{SystemName}.DOItemList";            _aiKey = $"{SystemName}.AIItemList";            _aoKey = $"{SystemName}.AOItemList";            this.AIs = InitIOData<short>(IOType.AI, _aiKey);            this.AOs = InitIOData(IOType.AO, _aoKey);            this.DIs = InitIOData<bool>(IOType.DI, _diKey);            this.DOs = InitIOData<bool>(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<string, object> data)        {            base.InvokeAfterUpdateProperty(data);            if (data.ContainsKey(_aiKey) &&  data[_aiKey] != null)            {                List<NotifiableIoItem> lstData = (List<NotifiableIoItem>)data[_aiKey];                Dictionary<string, short> dicValues = new Dictionary<string, short>();                for (int i = 0; i < lstData.Count; i++)                {                    dicValues[lstData[i].Name] = lstData[i].ShortValue;                }                foreach (IOItem<short> item in AIs)                {                    if (dicValues.ContainsKey(item.Name))                        item.Value = dicValues[item.Name];                }            }            if (data.ContainsKey(_aoKey) && data[_aoKey] != null)            {                List<NotifiableIoItem> lstData = (List<NotifiableIoItem>)data[_aoKey];                Dictionary<string, short> dicValues = new Dictionary<string, short>();                for (int i = 0; i < lstData.Count; i++)                {                    dicValues[lstData[i].Name] = lstData[i].ShortValue;                }                foreach (IOItem<short> item in AOs)                {                    if (dicValues.ContainsKey(item.Name))                        item.Value = dicValues[item.Name];                }            }            if (data.ContainsKey(_diKey) && data[_diKey] != null)            {                List<NotifiableIoItem> lstData = (List<NotifiableIoItem>)data[_diKey];                Dictionary<string, bool> dicValues = new Dictionary<string, bool>();                for (int i = 0; i < lstData.Count; i++)                {                    dicValues[lstData[i].Name] = lstData[i].BoolValue;                }                foreach (IOItem<bool> item in DIs)                {                    if (dicValues.ContainsKey(item.Name))                        item.Value = dicValues[item.Name];                }            }            if (data.ContainsKey(_doKey) && data[_doKey] != null)            {                List<NotifiableIoItem> lstData = (List<NotifiableIoItem>)data[_doKey];                Dictionary<string, bool> dicValues = new Dictionary<string, bool>();                for (int i = 0; i < lstData.Count; i++)                {                    dicValues[lstData[i].Name] = lstData[i].BoolValue;                }                foreach (IOItem<bool> item in DOs)                {                    if (dicValues.ContainsKey(item.Name))                        item.Value = dicValues[item.Name];                }            }        }        public void SetDO(IOItem<bool> 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(AOItem 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.NewValue}",                "Warning", MessageBoxButton.YesNo, MessageBoxImage.Warning) != MessageBoxResult.Yes)                return;            InvokeClient.Instance.Service.DoOperation("System.SetAoValue", aoItem.Name, aoItem.NewValue);            aoItem.TextSaved = true;        }        public ObservableCollection<IOItem<T>> InitIOData<T>(IOType type, string dataName)        {            //get the whole informations            ObservableCollection<IOItem<T>> da = new ObservableCollection<IOItem<T>>();            if (type == IOType.DI)            {                var diList = QueryDataClient.Instance.Service.GetData(dataName);                if (diList != null)                {                    List<NotifiableIoItem> item = (List<NotifiableIoItem>)diList;                    for (int i = 0; i < item.Count; i++)                    {                        bool value = true;                        if (value is T)                        {                            da.Add(new IOItem<T>()                            {                                Index = item[i].Index,                                Name = item[i].Name,                                DisplayName = item[i].Name.Substring(item[i].Name.IndexOf('.') + 1),                                Value = (T)(object)item[i].BoolValue,                                Address = item[i].Address                            });                        }                    }                }            }            if (type == IOType.DO)            {                var diList = QueryDataClient.Instance.Service.GetData(dataName);                if (diList != null)                {                    List<NotifiableIoItem> item = (List<NotifiableIoItem>)diList;                    for (int i = 0; i < item.Count; i++)                    {                        bool value = true;                        if (value is T)                        {                            da.Add(new IOItem<T>()                            {                                Index = item[i].Index,                                Name = item[i].Name,                                DisplayName = item[i].Name.Substring(item[i].Name.IndexOf('.') + 1),                                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<NotifiableIoItem> item = (List<NotifiableIoItem>)diList;                    for (int i = 0; i < item.Count; i++)                    {                        da.Add(new IOItem<T>()                        {                            Index = item[i].Index,                            Name = item[i].Name,                            DisplayName = item[i].Name.Substring(item[i].Name.IndexOf('.') + 1),                            Value = (T)(object)item[i].ShortValue,                            Address = item[i].Address                        });                    }                }            }            return da;        }        public ObservableCollection<AOItem> InitIOData(IOType type, string dataName)        {            //get the whole informations            ObservableCollection<AOItem> da = new ObservableCollection<AOItem>();            if (type == IOType.AO)            {                var diList = QueryDataClient.Instance.Service.GetData(dataName);                if (diList != null)                {                    List<NotifiableIoItem> item = (List<NotifiableIoItem>)diList;                    for (int i = 0; i < item.Count; i++)                    {                        {                            da.Add(new AOItem()                            {                                Index = item[i].Index,                                Name = item[i].Name,                                DisplayName = item[i].Name.Substring(item[i].Name.IndexOf('.')+1),                                Value = item[i].ShortValue,                                Address = item[i].Address                            });                        }                    }                }            }            return da;        }    }}
 |