| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 | using Aitex.Core.Util;using Caliburn.Micro.Core;using Caliburn.Micro;using FurnaceUI.Models;using FurnaceUI.Views.Operations;using MECF.Framework.Common.DataCenter;using MECF.Framework.Common.Equipment;using MECF.Framework.Common.OperationCenter;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Controls;using OpenSEMI.ClientBase;using MECF.Framework.UI.Client.CenterViews.Editors.Recipe;using System.Collections.ObjectModel;using System.Windows;using MECF.Framework.Common.CommonData;namespace FurnaceUI.Views.Maintenances{    public class BufferRobotViewModel : FurnaceUIViewModelBase    {        #region Buffer Data        [Subscription("PM1.BufferServo.CurrentPosition")]        public float BufferCurrentPosition { get; set; }        [Subscription("PM1.BufferServo.CurrentSpeed")]        public float BufferCurrentSpeed { get; set; }        [Subscription("PM1.BufferServo.IsServoOn")]        public bool BufferIsServoOn { get; set; }        [Subscription("PM1.BufferServo.IsReady")]        public bool BufferIsReady { get; set; }        [Subscription("PM1.BufferServo.Status")]        public string BufferStatus { get; set; }        [Subscription("PM1.BufferServo.IsMotorRun")]        public bool BufferIsMotorRun { get; set; }        #endregion        [Subscription("Rt.Status")]        public string RtStatus { get; set; }        public bool IsSystemStaus => (RtStatus != "AutoRunning");        //public bool IsPermission { get => this.Permission >= 3 && ClientApp.Instance.UserContext.RoleName == "Service"; }        public bool IsPermission { get => this.Permission >= 3; }        private List<string> _targetPosition = new List<string>();        public List<string> TargetPosition        {            get => _targetPosition;            set             {                 _targetPosition = value;                 NotifyOfPropertyChange(nameof(TargetPosition));             }        }        public double BufferAxisMoveSpeed { get; set; }        public double BufferAxisLimitSpeed { get; set; }        private string _selectedTargetPosition;        public string SelectedTargetPosition        {            get => _selectedTargetPosition;            set            {                _selectedTargetPosition = value;                NotifyOfPropertyChange(nameof(SelectedTargetPosition));            }        }        public ObservableCollection<PurgeParameter> PurgeParameters { get; set; }        private Visibility _purgeVisibilty;        public Visibility PurgeVisibilty        {            get { return _purgeVisibilty; }            set             {                 _purgeVisibilty = value;                NotifyOfPropertyChange(nameof(PurgeVisibilty));            }        }        private BufferRobotView _view;        protected override void OnViewLoaded(object view)        {            base.OnViewLoaded(view);            _view = view as BufferRobotView;                        BufferAxisLimitSpeed = (double)QueryDataClient.Instance.Service.GetConfig($"BufferServo.BufferAxisLimitSpeed");                   }        protected override void OnActivate()        {            #region BufferPurge            var isEnable = (bool)QueryDataClient.Instance.Service.GetConfig("BufferPurge.IsEnable");            PurgeVisibilty = isEnable ? Visibility.Visible : Visibility.Collapsed;            if (isEnable)            {                List<string> keys = new List<string> { "BufferPurge.NameList", "BufferPurge.Operation", "BufferPurge.FinishCondition", "BufferPurge.OperationOrder" };                var dic = QueryDataClient.Instance.Service.PollConfig(keys);                string[] names = $"{dic["BufferPurge.NameList"]}".Split(';');                string[] operation = $"{dic["BufferPurge.Operation"]}".Split(';');                string[] sequence = $"{dic["BufferPurge.OperationOrder"]}".Split(';');                PurgeParameters = new ObservableCollection<PurgeParameter>();                foreach (string p in sequence)                {                    if (string.IsNullOrWhiteSpace(p)) continue;//Purge1,0,Time(10),Open;                    var step = p.Trim().Split(',');                    if (step.Length == 4)                    {                        if (string.IsNullOrEmpty(step[0])) continue;//name                        if (names.Contains(step[0]))                        {                            var index = step[2].IndexOf('(') + 1;                            int.TryParse(step[2].Substring(index, step[2].Length - index - 1), out int time);//仅考虑时间                            PurgeParameters.Add(                            new PurgeParameter() { Name = step[0], TimeString = $"{time / 3600:00}:{time % 3600 / 60:00}:{time % 60:00}", IsClose = step[3].ToLower() == "close", IsOpen = step[3].ToLower() == "open" });                        }                    }                }            }            #endregion            base.OnActivate();        }        private void InitData()        {            BufferAxisMoveSpeed = (double)QueryDataClient.Instance.Service.GetConfig($"BufferServo.MoveSpeed");        }        protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)        {            InitData();            if (_view != null)            {                var rsetValueBool = double.TryParse(_view?.tbMoveSpeed.Text, out double setZValue);                if (!rsetValueBool)                    _view.tbMoveSpeed.Text = "0";                if (!string.IsNullOrEmpty(_view?.tbMoveSpeed.Text) && rsetValueBool && setZValue > BufferAxisLimitSpeed)                {                    _view.tbMoveSpeed.Text = "0";                    DialogBox.ShowWarning($"Max Move Speed is {BufferAxisLimitSpeed}");                }                         }        }        private Dictionary<string, string> _targetPositionDic = new Dictionary<string, string>()        {            { "1-A", "1" },            { "1-B", "2" },            { "1-C", "3" },            { "1-D", "4" },            { "2-A", "5" },            { "2-B", "6" },            { "2-C", "7" },            { "2-D", "8" },            { "3-A", "9" },            { "3-B", "10" },            { "3-C", "11" },            { "3-D", "12" },            { "4-A", "13" },            { "4-B", "14" },            { "4-C", "15" },            { "4-D", "16" },        };        public BufferRobotViewModel()        {            foreach(var target in _targetPositionDic.Keys)            {                _targetPosition.Add(target);            }        }        public void SetValue()        {            if (string.IsNullOrEmpty(SelectedTargetPosition))                return;            if (!DialogBox.Confirm($"Are you sure  want to buffer Set {SelectedTargetPosition}?"))                return;            var target = _targetPositionDic.ContainsKey(SelectedTargetPosition) ? _targetPositionDic[SelectedTargetPosition] : SelectedTargetPosition;            InvokeClient.Instance.Service.DoOperation($"PM1.BufferServo.ServoTargetPosition", target);        }        public void MoveTo()        {            if (!DialogBox.Confirm($"Are you sure  want to move?"))                return;            InvokeClient.Instance.Service.DoOperation($"PM1.BufferServo.ServoMoveTo", "");        }        public void SetServoOn(object target, object isOn)        {            var str = bool.Parse(isOn.ToString()) ? "On" : "Off";            if (!DialogBox.Confirm($"Are you sure  want to buffer  Servo {str}?"))                return;            InvokeClient.Instance.Service.DoOperation($"{target}", $"{isOn}");        }        public void BufferSaveValue(object obj, object tb)        {            if (!DialogBox.Confirm($"Are you sure  want to SaveValue?"))                return;            switch (obj)            {                             case "MoveSpeed":                    var setValue = double.Parse((tb as TextBox)?.Text);                    if (setValue > BufferAxisLimitSpeed)                    {                        DialogBox.ShowWarning($"Max MoveSpeed is {BufferAxisLimitSpeed}");                        break;                    }                    InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"BufferServo.{obj}", (tb as TextBox)?.Text);                    break;            }        }        public void Stop(object target)        {            if (!DialogBox.Confirm($"Are you sure  want to Stop?"))                return;            InvokeClient.Instance.Service.DoOperation($"{target}.ServoStop");        }        public void Reset(object target)        {            if (!DialogBox.Confirm($"Are you sure  want to Reset?"))                return;            InvokeClient.Instance.Service.DoOperation($"{target}.ServoResetAlarm");        }        public void TimeEdit(PurgeParameter purge)        {            RecipeStepTimeViewModel recipeStepTimeViewModel = new RecipeStepTimeViewModel("ControlTime");            recipeStepTimeViewModel.SelectTime =purge.TimeString;            recipeStepTimeViewModel.SelectValueTime = purge.TimeString;            (IoC.Get<IWindowManager>() as WindowManager)?.ShowDialogWithTitle(recipeStepTimeViewModel, null, "Control Time Set");            if (recipeStepTimeViewModel.IsSave)            {                purge.TimeString = recipeStepTimeViewModel.SelectValueTime;            }        }        public void SetBufferPurge()        {            if (PurgeParameters?.Count > 0&&PurgeParameters.Any(r=>r.IsClose||r.IsOpen))            {                if(DialogBox.Confirm("Do you want to operating BufferPurge?"))                {                    InvokeClient.Instance.Service.DoOperation("PM1.SetBufferPurge", PurgeParameters.ToList());                      }            }            else            {                DialogBox.ShowWarning("No Parameter to Set!");            }        }    }}
 |