public void OnSystemStatusChange(RunStatusChangeEventArgs args) { CurrentContext.Status = args.SysStatus; if (CurrentContext.SysCache != null) { CurrentContext.SysCache.SystemRealTimeStatus.CurrStatus = args.SysStatus; } if (args.SysStatus == SysStatusEnum.Starting) { foreach (var ctrl in Controllers.Where(each => each.Device.DeviceType == TargetDeviceTypeEnum.Pump)) { var pumpCtrl = ctrl as PumpController; if (pumpCtrl == null) { continue; } var ftime = pumpCtrl.PumpCultivation.Schedules.FirstOrDefault(); var ltime = pumpCtrl.PumpCultivation.Schedules.LastOrDefault(); var stime = DateTime.MinValue; var etime = DateTime.MinValue; var ntime = pumpCtrl.PumpCultivation.Schedules.FirstOrDefault(each => each > DateTime.Now); CurrentContext.SysCache?.SystemRealTimeStatus.Update(pumpCtrl.Device.DeviceId, false, pumpCtrl.Volume, 0, pumpCtrl.AlreadyRunTimes, pumpCtrl.PumpCultivation.Schedules.Count, ftime, ltime, stime, etime, ntime); } } SystemStatusChangeEvent?.Invoke(this, args); }
public void InstanceSystemStatusChangeEvent(object sender, RunStatusChangeEventArgs e) { LogFactory.Create().Info($"==================sys->{e.SysStatus}=================="); Dispatcher.Invoke(() => { SwitchCommandStatus(e.SysStatus); txtStatus.Text = e.SysStatus.ToString().ToLower(); if (e.SysStatus == SysStatusEnum.Starting) { UpdatePumpIn(); UpdatePumpOut(); } else if (e.SysStatus == SysStatusEnum.Completed) { //new ModalDialog().Show("细胞培养流程已完成"); LogFactory.Create().Info("细胞培养流程已完成"); //await ReStart(); } }); }
private void HandleSystemStatusChange(CommunicationEventArgs e) { var p = new RunStatusChangeEventArgs(); //系统运行状态只与泵关联 if (e.DeviceType != TargetDeviceTypeEnum.Pump || e.DeviceStatus != DeviceStatusEnum.Idle) { return; } if (e.Description == IdleDesc.Paused.ToString())//设备暂停运行 { SaveRecord(true); if (CurrentContext.Status == SysStatusEnum.Pausing) { p.SysStatus = SysStatusEnum.Paused; Center.OnSystemStatusChange(p); } else if (CurrentContext.Status == SysStatusEnum.Discarding) { p.SysStatus = SysStatusEnum.Discarded; Center.OnSystemStatusChange(p); } } else if (e.Description == IdleDesc.Completed.ToString())//设备完成本次操作 { SaveRecord(false); AlreadyRunTimes++; var next = PumpCultivation.GetNextRunParams(AlreadyRunTimes == 0); //该泵整个培养流程完成 if (next == null || PumpCultivation.Device.ProcessMode == ProcessModeEnum.SingleMode) { LogFactory.Create().Info($"{e.DeviceId} cultivation finished"); SetStatus(DeviceStatusEnum.AllFinished); //如果所有泵都已经完成 则通知前端培养流程完成 if (Center.IsAllFinished()) { LogFactory.Create().Info("all cultivation finished"); p.SysStatus = SysStatusEnum.Completed; Center.OnSystemStatusChange(p); } } //该泵完成本次进液或出液流程 else { LogFactory.Create().Info($"<->pump{e.DeviceId} {AlreadyRunTimes}times completed"); StartNextLoop(next).IgnorCompletion(); StartIdleLoop(); } //培养流程结束后 然后要保证摇床和温度打开 if (PumpCultivation.Device.InOrOut == PumpInOrOut.Out) { Center.StartRockerWhenPumpOutStop().IgnorCompletion(); // Center.StartRockerAndThermometer().IgnorCompletion(); } Center.StartThermometerWhenPumpStop(CurrentContext.SysCache.SystemRealTimeStatus.CurrVolume, PumpCultivation.Device.InOrOut).IgnorCompletion(); } }