예제 #1
0
        /// <summary>
        /// checks if the finished conditions are not already fulfilled
        /// </summary>
        /// <returns></returns>
        public bool NeedsToExecute()
        {
            // it needs to excecute if there are no finish conditions
            if (FinishConditions == null)
            {
                return(true);
            }

            // evaluate every finishcondition (return true if the evaluation is false)
            return(!ResourceState.Evaluate(FinishConditions));
        }
예제 #2
0
        /// <summary>
        /// checks if the start conditions of a <see cref="SkillBase"/> are fulfilled
        /// </summary>
        /// <returns></returns>
        public bool CanExecute()
        {
            //check if its a rotary table
            if (ExecutingResource.GetType() == typeof(RIT))
            {
                List <bool> canExecute = new List <bool>();
                int         i          = 0;
                // get every nest of rotary table
                foreach (var item in ExecutingResource.AttachedResources)
                {
                    if (item.GetType() == typeof(WPC))
                    {
                        // first nest
                        if (i == 0)
                        {
                            if (Convert.ToBoolean(item.ResourceStates.GetState("InterfaceIsOccupied")) == true &&
                                Convert.ToBoolean(item.ResourceStates.GetState("AreaIsOccupied")) == false)
                            {
                                canExecute.Add(true);
                            }
                            else
                            {
                                canExecute.Add(false);
                            }
                        }

                        // other nests
                        else
                        {
                            if (!(Convert.ToBoolean(item.ResourceStates.GetState("InterfaceIsOccupied")) == true &&
                                  Convert.ToBoolean(item.ResourceStates.GetState("ItemIsProcessed")) == false) &&
                                Convert.ToBoolean(item.ResourceStates.GetState("AreaIsOccupied")) == false)
                            {
                                canExecute.Add(true);
                            }
                            else
                            {
                                canExecute.Add(false);
                            }
                        }
                        i++;
                    }
                }

                // check if every nest is ready for execution
                bool execute = true;
                foreach (var item in canExecute)
                {
                    if (item == false)
                    {
                        execute = false;
                        break;
                    }
                }

                if (execute &&
                    Convert.ToBoolean(ExecutingResource.ResourceStates.GetState("IsMoving")) == false &&
                    Convert.ToBoolean(ExecutingResource.ResourceStates.GetState("IsInPosition")) == true)
                {
                    var inpos = ExecutingResource.ResourceStates.GetState("IsInPosition");
                    var mov   = ExecutingResource.ResourceStates.GetState("IsMoving");
                    Logger.Debug($"'{ExecutingResource.Name}' - {inpos}");
                    Logger.Debug($"'{ExecutingResource.Name}' - {mov}");

                    foreach (var item in ExecutingResource.AttachedResources)
                    {
                        if (item.GetType() == typeof(WPC))
                        {
                            var intfaceOcc = item.ResourceStates.GetState("InterfaceIsOccupied");
                            var Area       = item.ResourceStates.GetState("AreaIsOccupied");
                            Logger.Debug($"'{item.Name}' - {intfaceOcc}");
                            Logger.Debug($"'{item.Name}' - {Area}");
                        }
                    }
                    return(true);
                }
            }

            // evaluate every startcondition
            var val = ResourceState.Evaluate(StartConditions);

            return(val);
        }