Exemplo n.º 1
0
        private void Retry(TransportOperationMachine startingPoint)
        {
            LogService.Log(LogType.System, LogMessageType.Debug, GetType().Name,
                           string.Format(CultureInfo.InvariantCulture, "Retrying Tray move at '{0}'.", startingPoint.Station.Name));
            NumberOfRetries--;
            // Dispose of the old machines.
            DisposeSubmachines();
            // Create new first machine to execute.
            InitializeSubmachine(startingPoint.Operation);
            // Restart execution of whichever machine died, but don't raise the Started event.
            switch (startingPoint.Operation)
            {
            case TransportOperation.BeginPickup:
                BeginPickupMachine.Execute();
                break;

            case TransportOperation.CompletePickup:
                CompletePickupMachine.Execute();
                break;

            case TransportOperation.BeginDropoff:
                BeginDropoffMachine.Execute();
                break;

            case TransportOperation.CompleteDropoff:
                CompleteDropoffMachine.Execute();
                break;
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Initialize one of the four transport operation machine types.  Both Pick-up machines have
        /// CanStop turned off because there are no circumstances where a Pick-up operation can be
        /// stopped, even though the TrayMover as a whole can be stopped during pick-up.  Both
        /// Drop-off machines have CanStop turned on initially so that either drop-off operation can
        /// be stopped.  If this TrayMover has already been stopped, then this will also
        /// stop a newly constructed CompleteDropoff machine before returning it.
        /// </summary>
        /// <param name="startingType"></param>
        /// <returns>TransportOperationMachine</returns>
        protected TransportOperationMachine InitializeSubmachine(TransportOperation startingType)
        {
            TransportOperationMachine initialized = null;

            lock (_subMachineLock)
            {
                switch (startingType)
                {
                case TransportOperation.BeginPickup:
                    BeginPickupMachine = CreateSubmachine("BeginTrayPickup", BeginPickupBuilder, _beginPickupConfig);
                    initialized        = BeginPickupMachine;
                    break;

                case TransportOperation.CompletePickup:
                    CompletePickupMachine = CreateSubmachine("CompleteTrayPickup", CompletePickupBuilder, _completePickupConfig);
                    initialized           = CompletePickupMachine;
                    break;

                case TransportOperation.BeginDropoff:
                    BeginDropoffMachine         = CreateSubmachine("BeginTrayDropoff", BeginDropoffBuilder, _beginDropoffConfig);
                    BeginDropoffMachine.CanStop = true;
                    initialized = BeginDropoffMachine;
                    break;

                case TransportOperation.CompleteDropoff:
                    CompleteDropoffMachine         = CreateSubmachine("CompleteTrayDropoff", CompleteDropoffBuilder, _completeDropoffConfig);
                    CompleteDropoffMachine.CanStop = true;
                    // CompleteDropoff needs to know if the mover was already stopped
                    if (IsStopped)
                    {
                        CompleteDropoffMachine.Stop();
                    }
                    initialized = CompleteDropoffMachine;
                    break;
                }
            }
            return(initialized);
        }