示例#1
0
        public async Task Close()
        {
            try
            {
                var task = StopPumps();
                var cancellationToken            = new CancellationTokenSource(5 * 1000).Token;
                var cancellationCompletionSource = new TaskCompletionSource <bool>();

                using (cancellationToken.Register(() => cancellationCompletionSource.TrySetResult(true)))
                {
                    if (task != await Task.WhenAny(task, cancellationCompletionSource.Task))
                    {
                        Debug.WriteLine("close timeout");
                    }
                }
            }
            catch (Exception)
            {
                //
            }
            finally
            {
                Dispose();
                pump1 = new PumpDevice(1);
                pump2 = new PumpDevice(2);
                pump3 = new PumpDevice(3);
                AttactchEventHanlder(pump1);
                AttactchEventHanlder(pump2);
                AttactchEventHanlder(pump3);
            }
        }
示例#2
0
        public void AttactchEventHanlder(PumpDevice device)
        {
            DetactchEventHanlder(device);

            device.CommunicationEvent          += Communication;
            device.PreCommunicationEvent       += PreCommunicationStatusChange;
            device.CommunicationChangeEvent    += CommunicationChange;
            device.CaptureCustomExceptionEvent += CaptureCustomExceptionEvent;
        }
示例#3
0
        public PumpController(ControlCenter center, PumpDevice device, Pump pump) : base(center, device)
        {
            if (pump == null)
            {
                //CustomErrorEvent(new CustomException($"pump{PumpCultivation.PumpId} 的时间表排期为空", this.GetType().FullName, ExceptionPriority.Unrecoverable));
                return;
            }

            PumpCultivation = CultivationFactory.GetCultivation(pump);
            PumpCultivation.CalcSchedules();

            LogFactory.Create().Info($"pump{PumpCultivation.Device.DeviceId} {PumpCultivation.Device.ProcessMode} startTime is {PumpCultivation.Device.StartTime:yyyy-MM-dd HH:mm:ss}");
        }
示例#4
0
 public void DetactchEventHanlder(PumpDevice device)
 {
     try
     {
         device.CommunicationEvent          -= Communication;
         device.PreCommunicationEvent       -= PreCommunicationStatusChange;
         device.CommunicationChangeEvent    -= CommunicationChange;
         device.CaptureCustomExceptionEvent -= CaptureCustomExceptionEvent;
     }
     catch (Exception)
     {
         //
     }
 }