コード例 #1
0
        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);
        }
コード例 #2
0
        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();
                }
            });
        }
コード例 #3
0
        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();
            }
        }