Ejemplo n.º 1
0
 public override void ProcessTryPauseResult(DirectiveData data, CommunicationEventArgs comEventArgs)
 {
     SetStatus(DeviceStatusEnum.Pausing);
     comEventArgs.DeviceStatus = DeviceStatusEnum.Pausing;
     OnCommunicationChange(comEventArgs);
     StartPauseLoop();
 }
Ejemplo n.º 2
0
        public void initData(DirectiveData data)
        {
            var p = data as PumpDirectiveData;

            if (p == null)
            {
                btnStart.IsEnabled      = true;
                spEdit.IsHitTestVisible = true;
                spEdit.Background       = new SolidColorBrush(Colors.White);
                pbAppend.IsActive       = false;
                pbConcentrate.IsActive  = false;
                return;
            }
            ;

            txtWeight.Text = ((double)p.TimeInterval / 10).ToString("#.#");

            txt.Text = $"泵{p.DeviceId}流速{p.FlowRate}重量{p.TimeInterval}-----{p.DirectiveId}---{p.DirectiveType}";

            if (p.DirectiveType == DirectiveTypeEnum.TryStart)
            {
                pbAppend.IsActive      = false;
                pbConcentrate.IsActive = false;

                if (p.DeviceId == 2)
                {
                    pbAppend.IsActive = true;
                }
                else if (p.DeviceId == 1)
                {
                    pbConcentrate.IsActive = true;
                }
            }
        }
Ejemplo n.º 3
0
 protected override void ProcessTryPauseResult(DirectiveData data, CommunicationEventArgs comEventArgs)
 {
     CurrentStatus             = DeviceStatusEnum.Pausing;
     comEventArgs.DeviceStatus = DeviceStatusEnum.Pausing;
     OnCommunicationChangeEvent(comEventArgs);
     StartPauseLoop();
 }
Ejemplo n.º 4
0
        public override void ProcessRunningDirectiveResult(DirectiveData data, CommunicationEventArgs comEventArgs)
        {
            var ret = data as RockerDirectiveData;

            if (CurrentStatus == DeviceStatusEnum.Startting)
            {
                //从tryStart变为running(真的开始)
                if (ret?.Speed > 0)
                {
                    CurrentStatus             = DeviceStatusEnum.Running;
                    comEventArgs.DeviceStatus = DeviceStatusEnum.Running;

                    StartEvent.TrySetResult(new DeviceIOResult(true));

                    OnCommunicationChange(comEventArgs);
                    StartRunningLoop();
                }
                else
                {
                    comEventArgs.DeviceStatus = CurrentStatus;
                    StartRunningLoop();
                }
            }
            else if (CurrentStatus == DeviceStatusEnum.Running)
            {
                comEventArgs.DeviceStatus = DeviceStatusEnum.Running;
                StartRunningLoop();
            }
            else
            {
                comEventArgs.DeviceStatus = DeviceStatusEnum.Error;
            }
        }
Ejemplo n.º 5
0
        public void Handle(DirectiveTypeEnum type, DirectiveData data, CommunicationEventArgs comEventArgs)
        {
            OldStatus = Controller.CurrentStatus;

            switch (type)
            {
            case DirectiveTypeEnum.Idle:
                HandleIdle(data, comEventArgs); break;

            case DirectiveTypeEnum.TryStart:
                HandleTryStart(data, comEventArgs); break;

            case DirectiveTypeEnum.Running:
                HandleRunning(data, comEventArgs); break;

            case DirectiveTypeEnum.TryPause:
                HandleTryPause(data, comEventArgs); break;

            case DirectiveTypeEnum.Pausing:
                HandlePausing(data, comEventArgs); break;

            case DirectiveTypeEnum.Close:
                HandleClose(data, comEventArgs); break;

            default:
                HandleError(data, comEventArgs); break;
            }
        }
Ejemplo n.º 6
0
 public override void HandleRunning(DirectiveData data, CommunicationEventArgs comEventArgs)
 {
     Controller.ProcessRunningDirectiveResult(data, comEventArgs);
     LogFactory.Create()
     .Info(
         $"device{Controller.Device.DeviceId} {OldStatus} status receive Running feedback convert to {comEventArgs.DeviceStatus}");
 }
Ejemplo n.º 7
0
 protected virtual void ProcessTryStartResult(DirectiveData data, CommunicationEventArgs comEventArgs)
 {
     CurrentStatus             = DeviceStatusEnum.Startting;
     comEventArgs.DeviceStatus = DeviceStatusEnum.Startting;
     //记录泵的开始时间
     // 拿到TryStart反馈指令后启动running状态轮询
     OnCommunicationChangeEvent(comEventArgs);
     StartRunningLoop();
 }
Ejemplo n.º 8
0
        public override void HandleIdle(DirectiveData data, CommunicationEventArgs comEventArgs)
        {
            Controller.SetStatus(DeviceStatusEnum.Idle);
            comEventArgs.DeviceStatus = DeviceStatusEnum.Idle;

            Controller.StartIdleLoop();
            LogFactory.Create()
            .Info(
                $"device{Controller.Device.DeviceId} {OldStatus} status receive Idle feedback convert to {comEventArgs.DeviceStatus}");
        }
Ejemplo n.º 9
0
        public override void ProcessPausingResult(DirectiveData data, CommunicationEventArgs comEventArgs)
        {
            comEventArgs.DeviceStatus = DeviceStatusEnum.Running;
            comEventArgs.Description  = IdleDesc.Paused.ToString();;
            SetStatus(DeviceStatusEnum.Running);

            StopEvent.TrySetResult(new DeviceIOResult(true));

            OnCommunicationChange(comEventArgs);
        }
Ejemplo n.º 10
0
        public virtual void ProcessIdleResult(DirectiveData data, CommunicationEventArgs comEventArgs)
        {
            if (CurrentStatus == DeviceStatusEnum.Idle)
            {
                comEventArgs.DeviceStatus = DeviceStatusEnum.Idle;
            }
            else
            {
                // 进入普通轮询状态
                SetStatus(DeviceStatusEnum.Idle);
                comEventArgs.DeviceStatus = DeviceStatusEnum.Idle;
            }

            StartIdleLoop();
        }
Ejemplo n.º 11
0
        protected virtual void ProcessIdleResult(DirectiveData data, CommunicationEventArgs comEventArgs)
        {
            if (CurrentStatus == DeviceStatusEnum.Idle)
            {
                comEventArgs.DeviceStatus = DeviceStatusEnum.Idle;
            }
            else
            {
                // 进入普通轮询状态
                CurrentStatus             = DeviceStatusEnum.Idle;
                comEventArgs.DeviceStatus = DeviceStatusEnum.Idle;
            }

            StartIdleLoop(data.DirectiveId);
        }
Ejemplo n.º 12
0
        //传感器只收发普通轮询指令
        public override void ProcessRunningDirectiveResult(DirectiveData data, CommunicationEventArgs comEventArgs)
        {
            if (CurrentStatus == DeviceStatusEnum.Startting)
            {
                SetStatus(DeviceStatusEnum.Running);
                comEventArgs.DeviceStatus = DeviceStatusEnum.Running;

                StartEvent.TrySetResult(new DeviceIOResult(true));

                OnCommunicationChange(comEventArgs);
                StartRunningLoop();
            }
            else if (CurrentStatus == DeviceStatusEnum.Running)
            {
                comEventArgs.DeviceStatus = DeviceStatusEnum.Running;
                StartRunningLoop();
            }
        }
Ejemplo n.º 13
0
        protected override void ProcessPausingResult(DirectiveData data, CommunicationEventArgs comEventArgs)
        {
            var ret = data as PumpDirectiveData;

            if (ret != null && ret.FlowRate <= 0)
            {
                comEventArgs.DeviceStatus = DeviceStatusEnum.Idle;
                comEventArgs.Description  = IdleDesc.Paused.ToString();;

                CurrentStatus = DeviceStatusEnum.Idle;

                stopEvent.Set(new DeviceIOResult(true));
                OnCommunicationChangeEvent(comEventArgs);
            }
            else
            {
                comEventArgs.DeviceStatus = DeviceStatusEnum.Pausing;
                StartPauseLoop(data.DirectiveId);
            }
        }
Ejemplo n.º 14
0
        protected override void ProcessRunningDirectiveResult(DirectiveData data, CommunicationEventArgs comEventArgs)
        {
            var ret = data as PumpDirectiveData;

            if (CurrentStatus == DeviceStatusEnum.Startting)
            {
                if (ret?.FlowRate > 0)
                {
                    CurrentStatus             = DeviceStatusEnum.Running;
                    comEventArgs.DeviceStatus = DeviceStatusEnum.Running;

                    OnCommunicationChangeEvent(comEventArgs);
                    StartRunningLoop();
                }
                else
                {
                    comEventArgs.DeviceStatus = CurrentStatus;
                    StartRunningLoop(data.DirectiveId);
                }
            }
            else if (CurrentStatus == DeviceStatusEnum.Running)
            {
                if (ret != null && ret.FlowRate <= 0)
                {
                    CurrentStatus             = DeviceStatusEnum.Idle;
                    comEventArgs.DeviceStatus = DeviceStatusEnum.Idle;

                    var diResult = new DeviceIOResult(true, comEventArgs);
                    startEvent.Set(diResult);
                }
                else
                {
                    comEventArgs.DeviceStatus = DeviceStatusEnum.Running;
                    StartRunningLoop(data.DirectiveId);
                }
            }
            else
            {
                StartRunningLoop();
            }
        }
Ejemplo n.º 15
0
        public override void ProcessRunningDirectiveResult(DirectiveData data, CommunicationEventArgs comEventArgs)
        {
            var ret = data as PumpDirectiveData;

            if (CurrentStatus == DeviceStatusEnum.Startting)
            {
                //从tryStart变为running(真的开始)
                if (ret?.FlowRate > 0)
                {
                    this.SetStatus(DeviceStatusEnum.Running);
                    comEventArgs.DeviceStatus = DeviceStatusEnum.Running;

                    StartEvent.TrySetResult(new DeviceIOResult(true));

                    OnCommunicationChange(comEventArgs);
                }
                else//泵收到开始命令 但还未运行
                {
                    comEventArgs.DeviceStatus = CurrentStatus;
                }

                StartRunningLoop();
            }
            else if (CurrentStatus == DeviceStatusEnum.Running)
            {
                //泵输入/输出指定流量后停止
                if (ret != null && ret.FlowRate <= 0)
                {
                    this.SetStatus(DeviceStatusEnum.Idle);
                    comEventArgs.DeviceStatus = DeviceStatusEnum.Idle;
                    comEventArgs.Description  = IdleDesc.Completed.ToString();
                    OnCommunicationChange(comEventArgs);
                }
                else//泵正在运行
                {
                    comEventArgs.DeviceStatus = DeviceStatusEnum.Running;
                    StartRunningLoop();
                }
            }
        }
Ejemplo n.º 16
0
        public override void ProcessPausingResult(DirectiveData data, CommunicationEventArgs comEventArgs)
        {
            var ret = data as PumpDirectiveData;

            if (ret != null && ret.FlowRate <= 0)
            {
                comEventArgs.DeviceStatus = DeviceStatusEnum.Idle;
                comEventArgs.Description  = IdleDesc.Paused.ToString();;

                this.SetStatus(DeviceStatusEnum.Idle);

                StopEvent.TrySetResult(new DeviceIOResult(true));
                StopTime            = DateTime.Now;
                PreUnfinishedVolume = CalcPreUnfinishedVolume();
                LogFactory.Create().Info($"device{Device.DeviceId} PreUnfinishedVolume is {PreUnfinishedVolume}");
                OnCommunicationChange(comEventArgs);
            }
            else
            {
                comEventArgs.DeviceStatus = DeviceStatusEnum.Pausing;
                StartPauseLoop();
            }
        }
Ejemplo n.º 17
0
 protected abstract bool ValidateDirectiveResult(DirectiveData data);
Ejemplo n.º 18
0
        protected override bool ValidateDirectiveResult(DirectiveData data)
        {
            var ret = data as PumpDirectiveData;

            return(null != ret);
        }
Ejemplo n.º 19
0
 public abstract void ProcessTryPauseResult(DirectiveData data, CommunicationEventArgs comEventArgs);
Ejemplo n.º 20
0
 protected abstract void ProcessPausingResult(DirectiveData data, CommunicationEventArgs comEventArgs);
Ejemplo n.º 21
0
 //收到TryPause反馈后的处理方法
 public abstract void HandleTryPause(DirectiveData data, CommunicationEventArgs comEventArgs);
Ejemplo n.º 22
0
 public override void HandleClose(DirectiveData data, CommunicationEventArgs comEventArgs)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 23
0
 public override void HandleTryPause(DirectiveData data, CommunicationEventArgs comEventArgs)
 {
     LogFactory.Create()
     .Warnning(
         $"device{Controller.Device.DeviceId} SysStatus is {Controller.CurrentStatus}, can not receive TryPause Directive");
 }
Ejemplo n.º 24
0
 public abstract void HandleError(DirectiveData data, CommunicationEventArgs comEventArgs);
Ejemplo n.º 25
0
 public override void HandleError(DirectiveData data, CommunicationEventArgs comEventArgs)
 {
     LogFactory.Create()
     .Warnning(
         $"device{Controller.Device.DeviceId} SysStatus is {Controller.CurrentStatus}, handle error");
 }
Ejemplo n.º 26
0
 public abstract void ProcessRunningDirectiveResult(DirectiveData data, CommunicationEventArgs comEventArgs);