Example #1
0
        public void OnGet()
        {
            WorkDays = WorkDay.WorkDays.ToArray();

            using (var cn = Data.GetConnection())
            {
                MyOrgSelect = new MyOrgSelect()
                {
                    UserId = CurrentUser.UserId
                }.ExecuteSelectList(cn, CurrentUser.OrganizationId);
                ActivitySelect = new ActivitySelect()
                {
                    OrgId = OrgId
                }.ExecuteSelectList(cn, CurrentOrgUser.DefaultActivityId);
                Responsibilities        = new Responsibilities().Execute(cn);
                TimeZoneSelect          = new TimeZoneSelect().ExecuteSelectList(cn, CurrentUser.TimeZoneOffset);
                AdjustForDaylightSaving = CurrentUser.AdjustForDaylightSaving;
            }

            OrgUser = CurrentOrgUser ?? new OrganizationUser()
            {
                UserId         = CurrentUser.UserId,
                OrganizationId = CurrentOrg.Id,
                DisplayName    = User.Identity.Name,
                WorkDays       = 62           // mon -> fri flag values
            };
        }
Example #2
0
        private string PerformStartReset()
        {
            nextActivitySelect = ActivitySelect.Reset;
            if (IsActive)
            {
                abortCurrentActivityReason = "Reset has been requested";
            }

            return(String.Empty);
        }
Example #3
0
        private string PerformSingleUnload()
        {
            if (currentActivity != ActivitySelect.Ready)
            {
                return(Utils.Fcns.CheckedFormat("Unload Request not permitted, engine is not ready [{0}]", currentActivity));
            }

            nextActivitySelect = ActivitySelect.PerformUnload;
            return(String.Empty);
        }
Example #4
0
        void ServiceReadyActivity()
        {
            IValueAccessor a2pPinsStateIVA = SelectedActiveToPassivePinsStateIVA;
            IValueAccessor p2aPinsStateIVA = SelectedPassiveToActivePinsStateIVA;

            IActiveToPassivePinsState a2pPinsState = new ActiveToPassivePinsState(a2pPinsStateIVA.Update().VC);
            IPassiveToActivePinsState p2aPinsState = new PassiveToActivePinsState(p2aPinsStateIVA.Update().VC);

            if (!a2pPinsState.IsIdle)
            {
                SetCurrentActivity(ActivitySelect.WaitForPinsReady, Utils.Fcns.CheckedFormat("A2P pins are no longer idle [{0}]", a2pPinsState));
                return;
            }

            if (!p2aPinsState.IsSelectable)
            {
                SetCurrentActivity(ActivitySelect.WaitForPinsReady, Utils.Fcns.CheckedFormat("P2A pins are no longer selectable [{0}]", p2aPinsState));
                return;
            }

            // interface is idle and is selectable.  detect auto trigger conditions and automatically request next transition accordingly.

            UpdateReadyToLoadAndUnload(false, true);

            if (nextActivitySelect == ActivitySelect.None)
            {
                PresentPlaced presentPlacedInput = lpmPresentPlacedInputIVA.Update().VC.GetValue <PresentPlaced>(false);

                if (presentPlacedInput.IsNeitherPresentNorPlaced() && enableAutoLoadIVA.Update().VC.GetValue <bool>(false))
                {
                    if (loadUnloadStartHoldoffTimer.StartIfNeeded(configValues.LoadUnloadStartHoldoff).IsTriggered)
                    {
                        nextActivitySelect = ActivitySelect.PerformLoad;
                        loadUnloadStartHoldoffTimer.Stop();
                    }
                }
                else if (presentPlacedInput.IsProperlyPlaced() && enableAutoUnloadIVA.Update().VC.GetValue <bool>(false))
                {
                    if (loadUnloadStartHoldoffTimer.StartIfNeeded(configValues.LoadUnloadStartHoldoff).IsTriggered)
                    {
                        nextActivitySelect = ActivitySelect.PerformUnload;
                        loadUnloadStartHoldoffTimer.Stop();
                    }
                }
                else
                {
                    loadUnloadStartHoldoffTimer.StopIfNeeded();
                }
            }
            else
            {
                loadUnloadStartHoldoffTimer.StopIfNeeded();
            }
        }
Example #5
0
        void ServiceDispatchNextActivity()
        {
            if (nextActivitySelect == ActivitySelect.None)
            {
                return;
            }

            Log.Debug.Emit("Processing nextActivity:{0}", nextActivitySelect);

            SetCurrentActivity(nextActivitySelect, "Starting new activity");
            nextActivitySelect = ActivitySelect.None;
        }
Example #6
0
        bool Spin()
        {
            WaitForSomethingToDo(TimeSpan.FromSeconds(0.02));

            ServiceInstantActionQueue();
            ServiceConfig();

            ActivitySelect abortToActivity = (nextActivitySelect == ActivitySelect.Reset) ? nextActivitySelect : ActivitySelect.WaitForPinsReady;

            switch (currentActivity)
            {
            case ActivitySelect.PerformLoad:
            case ActivitySelect.PerformUnload:
                if (abortCurrentActivityReason != null)
                {
                    SetCurrentActivity(abortToActivity, abortCurrentActivityReason);
                    abortCurrentActivityReason = null;
                    return(false);
                }
                break;

            default:
                if (abortCurrentActivityReason != null)
                {
                    if (nextActivitySelect == ActivitySelect.Reset)
                    {
                        if (currentActivity == ActivitySelect.Reset)
                        {
                            Log.Debug.Emit("Ignoring extra Reset request - Reset as already in progress");
                        }
                        else if (currentActivity == ActivitySelect.Offline)
                        {
                            Log.Warning.Emit("Unable to abort activity:{0} with reason:{1}", currentActivity, abortCurrentActivityReason);
                        }
                        else
                        {
                            SetCurrentActivity(abortToActivity, abortCurrentActivityReason);
                        }
                    }
                    else
                    {
                        Log.Warning.Emit("Unable to abort activity:{0} with reason:{1}", currentActivity, abortCurrentActivityReason);
                    }

                    abortCurrentActivityReason = null;
                }
                break;
            }

            return(true);
        }
Example #7
0
        protected override string PerformGoOnlineAction(bool andInitialize)
        {
            SetBaseState(UseState.Online, "GoOnline Action has been performed", true);

            if (currentActivity == ActivitySelect.Offline)
            {
                SetCurrentActivity(ActivitySelect.None, "Performing GoOnline Action");
            }

            if (andInitialize)
            {
                nextActivitySelect = ActivitySelect.Reset;
            }

            return(String.Empty);
        }
Example #8
0
        protected override string PerformGoOfflineAction()
        {
            SetBaseState(UseState.Offline, "GoOffline Action has been performed", true);

            SetCurrentActivity(ActivitySelect.Offline, "Performing GoOffline Action");

            nextActivitySelect       = ActivitySelect.None;
            lastSetA2PPins           = new ActiveToPassivePinsState();
            lastSetA2PPins.IFaceName = PartID;
            lastSetA2PPins.XferILock = true;
            ohtActiveToPassivePinsStateIVA.Set(lastSetA2PPins as IActiveToPassivePinsState);
            agvActiveToPassivePinsStateIVA.Set(lastSetA2PPins as IActiveToPassivePinsState);

            privateState = new E084ActiveTransferSimEngineState()
            {
                StateStr = "Offline"
            };

            PublishPrivateState();

            return(String.Empty);
        }
        protected override string PerformGoOfflineAction()
        {
            SetBaseState(UseState.Offline, "GoOffline Action has been performed", true);

            SetCurrentActivity(ActivitySelect.Offline, "Performing GoOffline Action");

            nextActivitySelect = ActivitySelect.None;
            lastSetA2PPins = new ActiveToPassivePinsState();
            lastSetA2PPins.IFaceName = PartID;
            lastSetA2PPins.XferILock = true;
            lpmSimPart.CreateSetE084ActivePins(pioSelect, lastSetA2PPins).Start();

            privateState = new E084ActiveTransferSimEngineState() { StateStr = "Offline" };

            PublishPrivateState();

            return String.Empty;
        }
        void SetCurrentActivity(ActivitySelect activity, string reason)
        {
            ActivitySelect entryActivity = currentActivity;

            Log.Debug.Emit("SetCurrentActivity changing activity to:{0} [from:{1}, reason:'{2}']", activity, currentActivity, reason);
            currentActivity = activity;

            privateState.StateStr = (Utils.Fcns.CheckedFormat("{0} [{1}]", activity, reason));
            privateState.IsCycling = (currentActivity == ActivitySelect.AutoLoadAndUnload);
            privateState.IsReady = (currentActivity == ActivitySelect.Ready);

            if (entryActivity != currentActivity)
            {
                privateState.TransferProgressStr = String.Empty;
                if (activity == ActivitySelect.AutoLoadAndUnload)
                    privateState.TransferCount = 0;
            }

            bool busy = false;
            switch (currentActivity)
            {
                case ActivitySelect.AutoLoadAndUnload:
                    busy = !String.IsNullOrEmpty(privateState.TransferProgressStr);
                    break;
                case ActivitySelect.PerformLoad:
                case ActivitySelect.PerformUnload:
                case ActivitySelect.Reset:
                    busy = true;
                    break;
                default:
                    break;
            }

            // update PrivateBaseState now.
            if (currentActivity == ActivitySelect.Offline)
            {
                if (!PrivateBaseState.IsOnline)
                {
                    if (entryActivity == ActivitySelect.Ready || entryActivity == ActivitySelect.None)
                        SetBaseState(UseState.Offline, reason, true);
                    else
                        SetBaseState(UseState.FailedToOffline, reason, true);
                }
            }
            else if (!PrivateBaseState.IsOnline)
                SetBaseState(UseState.OnlineBusy, reason, true);
            else if (!PrivateBaseState.IsBusy && busy)
                SetBaseState(UseState.OnlineBusy, reason, true);
            else if (PrivateBaseState.IsBusy && !busy)
                SetBaseState(UseState.Online, reason, true);

            PublishPrivateState();
        }
        void ServicePerformAutoLoadAndUnloadActivity()
        {
            LPMSim.State lpmState = lpmSimPart.PublicState;

            IPassiveToActivePinsState p2aPinsState = lpmState.OutputsState.GetE84OutputBits(pioSelect);

            // first keep waiting until passive to active pins are seletable
            if (!p2aPinsState.IsSelectable)
            {
                if (!p2aPinsState.IsIdle)
                    SetCurrentActivity(ActivitySelect.WaitForPinsReady, Utils.Fcns.CheckedFormat("{0} failed: p2a pins are no longer idle [{1}]", currentActivity, p2aPinsState));

                return;
            }

            // passive to active pins are selectable.

            if (!lpmState.InputsState.PodPresenceSensorState.DoesPlacedEqualPresent)
            {
                SetCurrentActivity(ActivitySelect.WaitForPinsReady, Utils.Fcns.CheckedFormat("{0} failed: Unexpected Pod Presence state [{1}]", currentActivity, lpmState.InputsState.PodPresenceSensorState));
                return;
            }

            // transfer start holdoff timer

            if (lpmState.InputsState.PodPresenceSensorState.IsPlacedAndPresent)
            {
                Log.Info.Emit("{0}: P2A is selectable and FOUP is placed, starting unload", currentActivity);
                ServicePerformUnloadActivity();

                if (currentActivity == ActivitySelect.AutoLoadAndUnload)
                    Spin(TimeSpan.FromSeconds(5.0));
            }
            else
            {
                Log.Info.Emit("{0}: P2A is selectable and port is empty, starting load", currentActivity);
                ServicePeformLoadActivity();

                if (currentActivity == ActivitySelect.AutoLoadAndUnload)
                    Spin(TimeSpan.FromSeconds(5.0));
            }

            if (nextActivitySelect == ActivitySelect.Ready)
            {
                SetCurrentActivity(ActivitySelect.Ready, "Cycling stopped normally");
                nextActivitySelect = ActivitySelect.None;
            }
        }
        void ServiceDispatchNextActivity()
        {
            if (nextActivitySelect == ActivitySelect.None)
                return;

            Log.Debug.Emit("Processing nextActivity:{0}", nextActivitySelect);

            SetCurrentActivity(nextActivitySelect, "Starting new activity");
            nextActivitySelect = ActivitySelect.None;
        }
        private string PerformStartReset()
        {
            nextActivitySelect = ActivitySelect.Reset;
            if (IsActive)
                abortCurrentActivityReason = "Reset has been requested";

            return String.Empty;
        }
        private string PerformSingleUnload()
        {
            if (currentActivity != ActivitySelect.Ready)
                return Utils.Fcns.CheckedFormat("Unload Request not permitted, engine is not ready [{0}]", currentActivity);

            nextActivitySelect = ActivitySelect.PerformUnload;
            return String.Empty;
        }
        private string PerformSetEnableCycle(bool enableCycle)
        {
            if (enableCycle)
            {
                if (IsReady)
                    nextActivitySelect = ActivitySelect.AutoLoadAndUnload;
                else
                    return Utils.Fcns.CheckedFormat("SetEnableCycle(true) Request not permitted, engine is not ready [{0}]", currentActivity);
            }
            else
            {
                if (currentActivity == ActivitySelect.AutoLoadAndUnload)
                    nextActivitySelect = ActivitySelect.Ready;
                else
                    return Utils.Fcns.CheckedFormat("SetEnableCycle(false) Request not permitted, engine is not cycling [{0}]", currentActivity);
            }

            return String.Empty;
        }
        protected override string PerformGoOnlineAction(bool andInitialize)
        {
            SetBaseState(UseState.Online, "GoOnline Action has been performed", true);

            if (currentActivity == ActivitySelect.Offline)
                SetCurrentActivity(ActivitySelect.None, "Performing GoOnline Action");

            if (andInitialize)
                nextActivitySelect = ActivitySelect.Reset;

            return String.Empty;
        }
Example #17
0
        void SetCurrentActivity(ActivitySelect activity, string reason)
        {
            ActivitySelect entryActivity = currentActivity;

            Log.Debug.Emit("SetCurrentActivity changing activity to:{0} [from:{1}, reason:'{2}']", activity, currentActivity, reason);
            currentActivity = activity;

            privateState.StateStr  = (Utils.Fcns.CheckedFormat("{0} [{1}]", activity, reason));
            privateState.IsCycling = (enableAutoLoadIVA.Update().VC.GetValue <bool>(false) && enableAutoUnloadIVA.Update().VC.GetValue <bool>(false));

            privateState.NotReadyReason = ((currentActivity == ActivitySelect.Ready) ? "" : currentActivity.ToString());
            UpdateReadyToLoadAndUnload(true, false);

            if (entryActivity != currentActivity)
            {
                privateState.TransferProgressStr = String.Empty;
                if (!privateState.IsCycling)
                {
                    privateState.TransferCount = 0;
                }
            }

            bool busy = false;

            switch (currentActivity)
            {
            case ActivitySelect.PerformLoad:
            case ActivitySelect.PerformUnload:
            case ActivitySelect.Reset:
                busy = true;
                break;

            default:
                break;
            }

            // update PrivateBaseState now.
            if (currentActivity == ActivitySelect.Offline)
            {
                if (!PrivateBaseState.IsOnline)
                {
                    if (entryActivity == ActivitySelect.Ready || entryActivity == ActivitySelect.None)
                    {
                        SetBaseState(UseState.Offline, reason, true);
                    }
                    else
                    {
                        SetBaseState(UseState.FailedToOffline, reason, true);
                    }
                }
            }
            else if (!PrivateBaseState.IsOnline)
            {
                SetBaseState(UseState.OnlineBusy, reason, true);
            }
            else if (!PrivateBaseState.IsBusy && busy)
            {
                SetBaseState(UseState.OnlineBusy, reason, true);
            }
            else if (PrivateBaseState.IsBusy && !busy)
            {
                SetBaseState(UseState.Online, reason, true);
            }

            PublishPrivateState();
        }