public override void ProcessTryPauseResult(DirectiveData data, CommunicationEventArgs comEventArgs) { SetStatus(DeviceStatusEnum.Pausing); comEventArgs.DeviceStatus = DeviceStatusEnum.Pausing; OnCommunicationChange(comEventArgs); StartPauseLoop(); }
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; } } }
protected override void ProcessTryPauseResult(DirectiveData data, CommunicationEventArgs comEventArgs) { CurrentStatus = DeviceStatusEnum.Pausing; comEventArgs.DeviceStatus = DeviceStatusEnum.Pausing; OnCommunicationChangeEvent(comEventArgs); StartPauseLoop(); }
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; } }
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; } }
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}"); }
protected virtual void ProcessTryStartResult(DirectiveData data, CommunicationEventArgs comEventArgs) { CurrentStatus = DeviceStatusEnum.Startting; comEventArgs.DeviceStatus = DeviceStatusEnum.Startting; //记录泵的开始时间 // 拿到TryStart反馈指令后启动running状态轮询 OnCommunicationChangeEvent(comEventArgs); StartRunningLoop(); }
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}"); }
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); }
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(); }
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); }
//传感器只收发普通轮询指令 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(); } }
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); } }
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(); } }
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(); } } }
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(); } }
protected abstract bool ValidateDirectiveResult(DirectiveData data);
protected override bool ValidateDirectiveResult(DirectiveData data) { var ret = data as PumpDirectiveData; return(null != ret); }
public abstract void ProcessTryPauseResult(DirectiveData data, CommunicationEventArgs comEventArgs);
protected abstract void ProcessPausingResult(DirectiveData data, CommunicationEventArgs comEventArgs);
//收到TryPause反馈后的处理方法 public abstract void HandleTryPause(DirectiveData data, CommunicationEventArgs comEventArgs);
public override void HandleClose(DirectiveData data, CommunicationEventArgs comEventArgs) { throw new NotImplementedException(); }
public override void HandleTryPause(DirectiveData data, CommunicationEventArgs comEventArgs) { LogFactory.Create() .Warnning( $"device{Controller.Device.DeviceId} SysStatus is {Controller.CurrentStatus}, can not receive TryPause Directive"); }
public abstract void HandleError(DirectiveData data, CommunicationEventArgs comEventArgs);
public override void HandleError(DirectiveData data, CommunicationEventArgs comEventArgs) { LogFactory.Create() .Warnning( $"device{Controller.Device.DeviceId} SysStatus is {Controller.CurrentStatus}, handle error"); }
public abstract void ProcessRunningDirectiveResult(DirectiveData data, CommunicationEventArgs comEventArgs);