/// <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)); }
/// <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); }