public virtual async Task <DeviceIOResult> StartAsync() { try { Debug.WriteLine($"start {DeviceType}{DeviceId} when CurrentStatus {CurrentStatus}"); // if (CurrentStatus == DeviceStatusEnum.Running || CurrentStatus == DeviceStatusEnum.Startting) // { // return new DeviceIOResult(true); // } var directive = GenerateTryStartDirective(); OnPreCommunicationEvent(directive); CurrentStatus = DeviceStatusEnum.PreStart; SendDirective(directive); var p = await startEvent.WaitAsync(); startEvent.Reset(); return(p); } catch (Exception ex) { Debug.WriteLine($"start {DeviceType} timeout ->{ex.Message}"); return(new DeviceIOResult(false)); } }
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 void InstallCircuit(Part circuit, Warranty extendedWarranty) { _circuits = Option <Part> .Some(circuit); _circuitWarranty = extendedWarranty; _operationalStatus &= DeviceStatusEnum.CircuitFailed; }
public void CircuitNotOperational(DateTime breakDate) { _circuits.Do(c => { c.MarkDefective(DateTime.Now); _operationalStatus |= DeviceStatusEnum.CircuitFailed; }); }
protected virtual void ProcessTryStartResult(DirectiveData data, CommunicationEventArgs comEventArgs) { CurrentStatus = DeviceStatusEnum.Startting; comEventArgs.DeviceStatus = DeviceStatusEnum.Startting; //记录泵的开始时间 // 拿到TryStart反馈指令后启动running状态轮询 OnCommunicationChangeEvent(comEventArgs); StartRunningLoop(); }
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 virtual async Task <DeviceIOResult> StopAsync() { Debug.WriteLine($"Stop {DeviceType} {DeviceId} when CurrentStatus {CurrentStatus}"); if (CurrentStatus == DeviceStatusEnum.Idle || CurrentStatus == DeviceStatusEnum.Pausing) { return(new DeviceIOResult(true)); } var directive = new TryPauseDirective(DeviceId, DeviceType); OnPreCommunicationEvent(directive); CurrentStatus = DeviceStatusEnum.PrePause; SendDirective(directive); var p = await stopEvent.WaitAsync(); stopEvent.Reset(); return(p); }
public void SetStatus(DeviceStatusEnum state) { this.CurrentStatus = state; switch (state) { case DeviceStatusEnum.Idle: this.Status = new IdleStatus(this); break; case DeviceStatusEnum.Error: this.Status = new ErrorStatus(this); break; case DeviceStatusEnum.Pausing: this.Status = new PausingStatus(this); break; case DeviceStatusEnum.PrePause: this.Status = new PrePauseStatus(this); break; case DeviceStatusEnum.PreStart: this.Status = new PreStartStatus(this); break; case DeviceStatusEnum.Running: this.Status = new RunningStatus(this); break; case DeviceStatusEnum.Startting: this.Status = new StartingStatus(this); break; default: break; } }
public void Repaired() { _operationalStatus &= DeviceStatusEnum.NotOperational; }
public void NotOperational() { _operationalStatus |= DeviceStatusEnum.NotOperational; }
public void VisibleDamage() { _operationalStatus |= DeviceStatusEnum.VisiblyDamaged; }