Пример #1
0
        private void MakeExecuteAction()
        {
            int currentIndex = 0;

            var seq = ExecuteAction;

            seq.Steps.Add("Start", new StepInfo());
            seq.Steps.Add("SetActionCode", new StepInfo());
            seq.Steps.Add("Retry", new StepInfo());

            seq.OnStart += delegate { ReceiveData.Clear(); };
            seq.OnStop += delegate { UseFailReturn = false; SubActionList = null;  };
            seq.OnTerminate += delegate { UseFailReturn = false; SubActionList = null; SendData.Clear(); };

            seq.Steps["Start"].StepIndex = seq.AddItem(ActionRequest.Off.Execute);
            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (RobotStatusActionFail.IsOn || RobotStatusActionSuccess.IsOn)
                        actor.NextStep();
                    else
                        actor.NextStep("SetActionCode");
                });
            seq.AddItem(
                (object obj) =>
                {
                    ActionTerminatedConfirm.PulseTime.Type = FATimeType.millisecond;
                    ActionTerminatedConfirm.PulseTime.TypeValue = 300;
                });
            seq.AddItem(ActionTerminatedConfirm.PulseOnAction.Sequence);
            seq.Steps["SetActionCode"].StepIndex = seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    int alarm;

                    if (IsReady(out alarm) == false)
                    {
                        RaiseAlarm(actor, alarm);
                    }
                    else if (RobotStatusReady.IsOn && RobotStatusActionSuccess.IsOff && RobotStatusActionFail.IsOff)
                    {
                        OutputCommandParameter.OutputData = 1;//SendData.Parameter;
                        OutputCommandAction.OutputData = SendData.ActionCode;
                        actor.NextStep();
                    }
                    else if (TimeStatusCheckTimeout.Time < time)
                    {
                        RaiseAlarm(actor,
                            AlarmRobotIsUnknownStatus,
                            RobotStatusReady.GetInputIOStatus(),
                            RobotStatusActionSuccess.GetInputIOStatus(),
                            RobotStatusActionFail.GetInputIOStatus());
                        actor.NextStep("Start");
                    }
                });
            seq.AddItem(
                (object obj) =>
                {
                    ActionRequest.PulseTime.Type = FATimeType.millisecond;
                    ActionRequest.PulseTime.TypeValue = 300;
                });
            seq.AddItem(ActionRequest.PulseOnAction.Sequence);
            seq.AddItem((object obj) => currentIndex = 0);
            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (SubActionList == null)
                    {
                        actor.NextStep();
                    }
                    else if (RobotStatusActionFail.IsOn)
                    {
                        ReceiveData.ActionFail = true;
                        actor.NextStep();
                    }
                    else if (TimeSubActionTimeout.Time < time)
                    {
                        actor.NextStep();
                    }
                    else
                    {
                        var action = SubActionList[currentIndex];
                        if (action() == true)
                        {
                            currentIndex++;
                            if (currentIndex >= SubActionList.Count)
                                actor.NextStep();
                        }
                    }
                });
            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (RobotStatusEmergency.IsOn)
                    {
                        RaiseAlarm(actor, AlarmRobotEmergency);
                        actor.NextStep("Retry");
                    }
                    //if (RobotStatusReady.IsOff)
                    //{
                    //    RaiseAlarm(actor, AlarmRobotAlarm);
                    //    actor.NextStep("Retry");
                    //}
                    else if (IsActionSuccess() == true)
                    {
                        actor.NextStep();
                    }
                    else if (IsActionFail() == true)
                    {
                        RaiseAlarm(actor, AlarmRobotActionFail, "KUKA ROBOT ACTION ERROR NO: " + InputAlarmCode.OutputData.ToString());
                        actor.NextStep("Retry");
                    }
                    else if (TimeRobotActionTimeout.Time < time)
                    {
                        if (UseFailReturn)
                            actor.NextStep();
                        else if (IsActionTerminated() == false)
                        {
                            RaiseAlarm(actor, AlarmRobotActionTimeOut);
                            actor.NextStep("Retry");
                        }
                        else if (IsActionFail() == true)
                        {
                            RaiseAlarm(actor, AlarmRobotActionFail, "KUKA ROBOT ACTION ERROR NO: " + InputAlarmCode.OutputData.ToString());
                            actor.NextStep("Retry");
                        }
                    }
                });
            seq.AddItem(
                (object obj) =>
                {
                    ActionTerminatedConfirm.PulseTime.Type = FATimeType.millisecond;
                    ActionTerminatedConfirm.PulseTime.TypeValue = 300;
                });
            seq.AddItem(ActionTerminatedConfirm.PulseOnAction.Sequence);
            seq.AddItem(
                delegate(object obj)
                {
                    SubActionList = null;
                });
            seq.AddTerminate();

            QuestionMessageBoxWindow questionWindow = null;

            seq.Steps["Retry"].StepIndex =
                seq.AddItem(
                    delegate(object obj)
                    {
                        App.Current.Dispatcher.Invoke(
                            new Action(
                                delegate
                                {
                                    questionWindow = new QuestionMessageBoxWindow();
                                    questionWindow.Message = Utility.UtilityClass.GetStringResource(this, "KUKA.AreYouSureYouWantToRetryRobotAction", "Are you sure you want to retry robot action?");
                                    questionWindow.Show();
                                }), null);
                    });
            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (questionWindow.Result == QuestionMessageBoxWindow.QuestionResult.Yes)
                        actor.NextStep();
                    else if (questionWindow.Result == QuestionMessageBoxWindow.QuestionResult.No)
                        actor.NextTerminate();
                });
            seq.AddItem("Start");
        }
        private void MakeTransferNormalLabel()
        {
            int scanAlarmNo = 0;
            string scanAlarmMsg = string.Empty;

            var seq = TransferNormalLabel;

            seq.OnStart +=
                delegate
                {
                    RetryInfoLabelScan.ClearCount();
                };

            seq.Steps.Add("Start", new StepInfo());
            seq.Steps.Add("TransferLabelToTrashBin", new StepInfo());
            seq.Steps.Add("Retry", new StepInfo());

            seq.AddItem(SetCurrentLabelPrinterModule);
            seq.Steps["Start"].StepIndex = seq.AddItem(ScanNormalLabel);

            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    CurrentNormalLabelPrinterModule.LabelScanCompleted = true;
                    CurrentNormalLabelPrinterModule.LabelScanSuccess = false;

                    if (SkipLabelScan)
                    {
                        CurrentNormalLabelPrinterModule.LabelScanSuccess = true;
                        //SkipLabelScan = false;
                        WriteTraceLog(string.Format("Skip Label Scan Result. LOT_ID={0}, L_BOX_INDEX={1}", CurrentLotID, CurrentLargeBoxIndex));
                        actor.NextStep();
                    }
                    else if (LabelScanResult)
                    {
                        var dmSerials = RobotUnit.CognexVisionReceiver.VisionResult.BarcodeScanResult.DMSerialsItem;
                        var serials = RobotUnit.CognexVisionReceiver.VisionResult.BarcodeScanResult.SerialsItems;
                        var largeBoxID = RobotUnit.CognexVisionReceiver.VisionResult.BarcodeScanResult.LargeBoxID;

                        if (IsEqualBarcodes(serials, dmSerials) == false)
                        {
                            scanAlarmNo = AlarmLabelSerialsDifferent;
                            scanAlarmMsg = string.Format("NORMAL LABEL SERIALS DIFFERENT. 1D BARCODE=[{0}], DATA_MATRIX=[{1}]", string.Join(",", serials), string.Join(",", dmSerials));
                            WriteTraceLog(scanAlarmMsg);
                            actor.NextStep("TransferLabelToTrashBin");
                        }
                        else if (serials.Count != TurnkeyBoxCount)
                        {
                            scanAlarmNo = AlarmLabelSerialsCountDifferant;
                            scanAlarmMsg = string.Format("NORMAL LABEL T/K BOX COUNT DIFFERENT. CURRENT COUNT={0}, LABEL COUNT={1}", TurnkeyBoxCount, serials.Count);
                            WriteTraceLog(scanAlarmMsg);
                            actor.NextStep("TransferLabelToTrashBin");
                        }
                        else if (string.IsNullOrEmpty(largeBoxID) == true)
                        {
                            scanAlarmNo = AlarmLabelLargeBoxIDCanNotFound;
                            scanAlarmMsg = "NORMAL LABEL LOT_ID EMPTY";
                            WriteTraceLog(scanAlarmMsg);
                            actor.NextStep("TransferLabelToTrashBin");
                        }
                        else if (CurrentLargeBoxID.Trim() != largeBoxID.Trim())
                        {
                            scanAlarmNo = AlarmLabelLargeBoxIDDifferent;
                            scanAlarmMsg = string.Format("NORMAL LABEL L_BOX_ID DIFFERENT. CURRENT L_BOX_ID={0}, LABEL L_BOX_ID={1}", CurrentLotID, largeBoxID);
                            WriteTraceLog(scanAlarmMsg);
                            actor.NextStep("TransferLabelToTrashBin");
                        }
                        else
                        {
                            CurrentNormalLabelPrinterModule.LabelScanSuccess = true;
                            actor.NextStep();
                        }
                    }
                    else
                    {
                        WriteTraceLog("NORMAL LABEL SCAN FAIL. LABEL SCANNER NOT RESPONSE");
                        actor.NextStep("TransferLabelToTrashBin");
                    }
                });
            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (CurrentNormalLabelPrinterModule.UnloadingStandby)
                    {
                        if (CurrentNormalLabelPrinterModule.CurrentWork.BoxIndex != (CurrentLargeBoxIndex + 1))
                        {
                            var msg = string.Format("BoxIndex Of Printer={0}, BoxIndex Of Robot={1}",
                                CurrentNormalLabelPrinterModule.CurrentWork.BoxIndex,
                                CurrentLargeBoxIndex + 1);
                            RaiseAlarm(actor, AlarmBarcodeIndexMatchFail, msg);
                            actor.NextStep("TransferLabelToTrashBin");
                        }
                        else if (CurrentNormalLabelPrinterModule.CurrentWork.LotID != CurrentWork.ProductInfo.ECInfo.PackingMasterInfo.LOT_ID)
                        {
                            var msg = string.Format("LotID Of Printer={0}, LotID Of Robot={1}",
                                CurrentNormalLabelPrinterModule.CurrentWork.LotID,
                                CurrentWork.ProductInfo.ECInfo.PackingMasterInfo.LOT_ID);
                            RaiseAlarm(actor, AlarmLotIDMatchFail, msg);
                            actor.NextStep("TransferLabelToTrashBin");
                        }
                        else
                        {
                            actor.NextStep();
                        }
                    }
                });
            seq.AddItem(SetTransferNormalLabelAction);
            seq.AddItem((object obj) => RobotModule.UseFailReturn = true);
            seq.AddItem(new FASequenceAtomicInfo(RobotModule.ExecuteAction, true));
            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (RobotModule.ReceiveData.ActionSuccess)
                        actor.NextStep();
                    else
                        actor.NextStep("Retry");
                });
            seq.AddItem(
                delegate(object obj)
                {
                    CurrentNormalLabelPrinterModule.UnloadingSuccess = true;
                    CurrentNormalLabelPrinterModule.UnloadingCompleted = true;
                });
            seq.AddTerminate();

            seq.Steps["TransferLabelToTrashBin"].StepIndex = seq.AddItem(TransferNormalLabelToTrashBin);
            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (RetryInfoLabelScan.IncreaseCount() == false)
                    {
                        RaiseAlarm(actor, scanAlarmNo, scanAlarmMsg);
                    }

                    actor.NextStep();
                });
            seq.AddItem("Start");

            QuestionMessageBoxWindow questionWindow = null;
            seq.Steps["Retry"].StepIndex = seq.AddItem(
                delegate(object obj)
                {
                    App.Current.Dispatcher.Invoke(
                        new Action(
                            delegate
                            {
                                questionWindow = new QuestionMessageBoxWindow();
                                questionWindow.Message = Utility.UtilityClass.GetStringResource(this, "KUKA.AreYouSureYouWantToRetryTransferGlueLabel", "Are you sure you want to retry transfer glue label?");
                                questionWindow.Show();
                            }), null);
                });
            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (questionWindow.Result == QuestionMessageBoxWindow.QuestionResult.Yes)
                    {
                        CurrentNormalLabelPrinterModule.UnloadingSuccess = false;
                        CurrentNormalLabelPrinterModule.UnloadingCompleted = true;
                        actor.NextStep("Start");
                    }
                    else if (questionWindow.Result == QuestionMessageBoxWindow.QuestionResult.No)
                    {
                        CurrentNormalLabelPrinterModule.UnloadingSuccess = true;
                        CurrentNormalLabelPrinterModule.UnloadingCompleted = true;
                        actor.NextTerminate();
                    }
                });
            seq.AddItem("Start");
        }
        private void MakePickEmptyTray()
        {
            var seq = PickEmptyTray;

            seq.Steps.Add("Retry", new StepInfo());
            seq.Steps.Add("Start", new StepInfo());
            seq.Steps.Add("EmptyTrayPickCheck", new StepInfo());

            seq.Steps["Start"].StepIndex = seq.AddItem(SetTargetStacker);
            seq.AddItem(MoveXYPosition);
            seq.AddItem(TransferServoZ.MoveStandbyPos.Sequence);
            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (TraySideDetectSensor.IsOn)
                        RaiseAlarm(actor, AlarmTrayDetectedBeforeTrayPicking, TraySideDetectSensor.GetInputIOStatus());
                    else
                        actor.NextStep();
                });
            seq.AddItem(CountEmptyTrayStacker);
            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (PickingTrayCount <= 0)
                        actor.NextTerminate();
                    else
                        actor.NextStep();
                });
            seq.AddItem(TrayGripper.Release.Sequence);
            seq.AddItem(MovePreTrayGripPosition);
            seq.AddItem(TrayGripper.Grip.Sequence);
            seq.AddItem(MoveTraySeperatePosition);
            seq.AddItem(TraySeperator.Down.Sequence);
            seq.AddItem(TraySeperator.Up.Sequence);
            seq.AddItem(TraySeperator.Down.Sequence);
            seq.AddItem(TraySeperator.Up.Sequence);
            seq.AddItem(TransferServoZ.MoveStandbyPos.Sequence);
            seq.Steps["EmptyTrayPickCheck"].StepIndex = seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (TraySideDetectSensor.IsOn)
                        actor.NextStep();
                    else
                    {
                        RaiseAlarm(actor, AlarmEmptyTrayFail, TraySideDetectSensor.GetInputIOStatus());
                        actor.NextStep("Retry");
                    }
                });
            seq.AddItem((object obj) => CurrentTrayCount -= PickingTrayCount);
            seq.AddTerminate();

            QuestionMessageBoxWindow questionWindow = null;

            seq.Steps["Retry"].StepIndex =
                seq.AddItem(
                    delegate(object obj)
                    {
                        App.Current.Dispatcher.Invoke(
                            new Action(
                                delegate
                                {
                                    questionWindow = new QuestionMessageBoxWindow();
                                    questionWindow.Message = Utility.UtilityClass.GetStringResource(this, "EmptyTray Pick Fail", "Are you sure you want to retry EmptyTray Pick action?");
                                    questionWindow.Owner = Equipment.Window;
                                    questionWindow.Show();
                                }), null);
                    });
            seq.AddItem(
               delegate(FASequence actor, TimeSpan time)
               {
                   if (questionWindow.Result == QuestionMessageBoxWindow.QuestionResult.Yes)
                       actor.NextStep();
                   else if (questionWindow.Result == QuestionMessageBoxWindow.QuestionResult.No)
                       actor.NextTerminate();
               });
            seq.AddItem("Start");
        }
        private void MakeSupplyEmptyTray()
        {
            var seq = SupplyEmptyTray;

            seq.OnStart +=
                delegate
                {
                    RetryInfoTrayMarkingMatch.ClearCount();
                    SuppliedTrayCount = 0;
                    EmptyTraySupplyConveyor.TrayCount = 0;
                };

            seq.Steps.Add("SelectTargetStacker", new StepInfo());
            seq.Steps.Add("RemoveEmptyTray", new StepInfo());
            seq.Steps.Add("Retry", new StepInfo());
            seq.Steps.Add("ScanTrayCode", new StepInfo());
            seq.Steps.Add("ConfirmTrayCount", new StepInfo());

            seq.Steps["SelectTargetStacker"].StepIndex = seq.AddItem(SelectTargetStacker);
            seq.AddItem(SetTargetStacker);
            seq.AddItem(MoveXYPosition);
            seq.AddItem(PickEmptyTray);
            seq.AddItem((object obj) => SelectedLoadingStacker.IsAvailable = true);
            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (PickingTrayCount <= 0)
                        actor.NextStep("SelectTargetStacker");
                    else
                        actor.NextStep();
                });
            seq.AddItem(PlaceEmptyTrayToSupplyConveyor);
            seq.AddItem(
                delegate(object obj)
                {
                    EmptyTraySupplyConveyor.TrayCount += PickingTrayCount;
                    SuppliedTrayCount += PickingTrayCount;
                });
            seq.Steps["ScanTrayCode"].StepIndex = seq.AddItem(ScanTrayCode);
            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (TrayScanResult == EScanResult.Success)
                        actor.NextStep();
                    else
                    {
                        if (RetryInfoTrayMarkingMatch.IncreaseCount() == false)
                        {
                            RaiseAlarm(actor, AlarmTrayMarkingMatchFail);
                            actor.NextStep("ScanTrayCode");
                        }
                        else
                        {
                            SuppliedTrayCount = 0;
                            actor.NextStep("RemoveEmptyTray");
                        }
                    }
                });

            seq.AddItem(TransferServoY.MoveStandbyPos.Sequence);
            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (PickTrayReady == false)
                    {
                        RaiseAlarm(actor, AlarmEmptyTrayFail);
                        actor.NextStep("Retry");
                    }
                    else
                        actor.NextStep();
                });
            seq.Steps["ConfirmTrayCount"].StepIndex = seq.AddItem(ConfirmRemainTrayCount);
            seq.AddTerminate();

            QuestionMessageBoxWindow questionWindow = null;

            seq.Steps["Retry"].StepIndex =
                seq.AddItem(
                    delegate(object obj)
                    {
                        App.Current.Dispatcher.Invoke(
                            new Action(
                                delegate
                                {
                                    questionWindow = new QuestionMessageBoxWindow();
                                    questionWindow.Message = Utility.UtilityClass.GetStringResource(this, "EmptyTray Pick Fail", "Are you sure you want to retry EmptyTray Pick action?");
                                    questionWindow.Owner = Equipment.Window;
                                    questionWindow.Show();
                                }), null);
                    });
            seq.AddItem(
               delegate(FASequence actor, TimeSpan time)
               {
                   if (questionWindow.Result == QuestionMessageBoxWindow.QuestionResult.Yes)
                   {
                       EmptyTraySupplyConveyor.TrayCount -= PickingTrayCount;
                       SuppliedTrayCount -= PickingTrayCount;
                       actor.NextStep();
                   }
                   else if (questionWindow.Result == QuestionMessageBoxWindow.QuestionResult.No)
                       actor.NextStep("ConfirmTrayCount");
               });
            seq.AddItem("SelectTargetStacker");

            seq.Steps["RemoveEmptyTray"].StepIndex = seq.AddItem(PickTrayOnSupplyConveyor);
            seq.AddItem(PlaceEmptyTrayUnloadingConveyor);
            seq.AddItem(
                delegate(object obj)
                {
                    EmptyTraySupplyConveyor.TrayCount = 0;
                    SuppliedTrayCount = 0;
                });
            seq.AddItem((object obj) => WriteTraceLog("Tray Mark Not Correct. Remove Tray"));
            seq.AddItem("SelectTargetStacker");
        }
Пример #5
0
        protected virtual void MakePreInitialize()
        {
            var seq = PreInitialize;

            AddDebugLogToSequence(seq);

            QuestionMessageBoxWindow questionWindow = null;
            seq.AddItem(
                delegate(object obj)
                {
                    App.Current.Dispatcher.Invoke(
                        new Action(
                            delegate
                            {
                                questionWindow = new QuestionMessageBoxWindow();
                                questionWindow.Message = Utility.UtilityClass.GetStringResource(this, "AreYouSureYouWantToInitializing", "Are you sure you want to initializing?");
                                questionWindow.EquipmentInstance = Equipment;
                                questionWindow.Show();
                            }), null);
                });
            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (questionWindow.Result == QuestionMessageBoxWindow.QuestionResult.Yes)
                    {
                        actor.NextStep();
                    }
                    else if (questionWindow.Result == QuestionMessageBoxWindow.QuestionResult.No)
                    {
                        Equipment.RequestStop();
                        actor.NextTerminate();
                    }
                });

            seq.AddItem(ConfirmDoorClosed);
            seq.AddItem(LockDoor);
            seq.AddItem(new FATime(FATimeType.millisecond, 1000));
            seq.AddItem(ConfirmDoorLockOk);
            seq.AddItem(DoInitialize);
        }
        private void MakeLoading()
        {
            var seq = Loading;

            seq.Steps.Add("Start", new StepInfo());
            seq.Steps.Add("Retry", new StepInfo());
            seq.Steps.Add("ConfirmLoadingFail", new StepInfo());
            seq.Steps.Add("Ready", new StepInfo());
            seq.Steps.Add("EmptyBoxRetry", new StepInfo());

            seq.Steps["Start"].StepIndex = seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (DummyBoxLoadingUnit.StackerBoxSensor.IsOn)
                    {
                        Manager.MessageWindowManager.Instance.CloseWindow("DummyBoxCharging");
                        actor.NextStep();
                    }
                    else
                    {
                        var alarm = Utility.AlarmUtility.GetAlarm(AlarmDummyBoxShortage, "Dummy Box Shortage");
                        Manager.MessageWindowManager.Instance.Show(Equipment, "DummyBoxCharging", alarm.AlarmName);
                    }
                });
            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (DummyBoxLoadingUnit.InsideBoxOutSensor.IsOn && DummyBoxLoadingUnit.InsideBoxInSensor.IsOn)
                        actor.NextStep("Ready");
                    else
                        actor.NextStep();
                });
            seq.AddItem(LoadingBox);

            seq.Steps["Ready"].StepIndex = seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (DummyBoxLoadingUnit.InsideBoxOutSensor.IsOn)
                    {
                        actor.NextStep();
                    }
                    else
                    {
                        actor.NextStep("EmptyBoxRetry");
                    }
                });

            seq.AddTerminate();

            seq.Steps["EmptyBoxRetry"].StepIndex = seq.AddItem(LoadingBox);
            seq.AddItem(
               delegate(FASequence actor, TimeSpan time)
               {
                   if (DummyBoxLoadingUnit.InsideBoxOutSensor.IsOn && DummyBoxLoadingUnit.InsideBoxInSensor.IsOn)
                   {
                       actor.NextStep();
                   }
                   else
                   {
                       RaiseAlarm(actor, AlarmDummyBoxCheck,DummyBoxLoadingUnit.InsideBoxInSensor.GetInputIOStatus(),DummyBoxLoadingUnit.InsideBoxOutSensor.GetInputIOStatus());
                   }
               });
            seq.AddTerminate();

            QuestionMessageBoxWindow questionWindow = null;

            seq.Steps["Retry"].StepIndex =
                seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    var alarm = Utility.AlarmUtility.GetAlarm(AlarmDummyBoxDidNotDetectionAfterLoading, "Dummy Box Shortage");
                    questionWindow = new QuestionMessageBoxWindow();
                    questionWindow.Message = alarm.AlarmName;
                    questionWindow.Show();
                });
            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (questionWindow.Result == QuestionMessageBoxWindow.QuestionResult.Yes)
                        actor.NextStep();
                    else if (questionWindow.Result == QuestionMessageBoxWindow.QuestionResult.No)
                        actor.NextTerminate();
                });
            seq.AddItem("Start");
        }
        private void MakeTransferTraysToPlacePos2()
        {
            var seq = TransferTraysToPlacePos2;

            seq.Steps.Add("Start", new StepInfo());
            seq.Steps.Add("Retry", new StepInfo());

            seq.Steps["Start"].StepIndex = seq.AddItem(
               delegate(FASequence actor, TimeSpan time)
               {
                   if (BoxPuttingModule.TrayPuttingUnit.InsertingPositionSensor.IsOn)
                       actor.NextStep();
                   else
                       RaiseAlarm(actor, AlarmPuttingUnitLargeBoxNotExist, BoxPuttingModule.TrayPuttingUnit.InsertingPositionSensor.GetInputIOStatus());
               });
            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (TrayInletModule.UnloadingStandby && BoxPuttingModule.TrayLoadingStandby)
                        actor.NextStep();
                });
            seq.AddItem(ScanTrayOnInletCV);
            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (TrayInletModule.TrayExist())
                    {
                        if (JobInfo.FoamPadJobInfo.BottomFoamPadType == VT5081.JobInfo.EBottomFoamPadType.High)
                        {
                            RobotUnit.Tray07Floor.DoTurnOn(actor);
                            RobotUnit.Tray11Floor.DoTurnOff(actor);
                        }
                        else
                        {
                            RobotUnit.Tray07Floor.DoTurnOff(actor);
                            RobotUnit.Tray11Floor.DoTurnOn(actor);
                        }

                        RobotModule.SendData.Parameter = ROBOT_PARAM_NONE;
                        RobotModule.SendData.ActionCode = (byte)FAKukaRobotCommandList.TrayActionList.EAction.TransferTrayToPlacePosition2;
                        actor.NextStep();
                    }
                    else
                        RaiseAlarm(actor, AlarmTrayNotExistOnTrayInletUnit, TrayInletModule.TrayInletUnit.StopSensor.GetInputIOStatus());
                });
            seq.AddItem(new FASequenceAtomicInfo(RobotModule.ExecuteAction, true));

            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (TrayInletModule.TrayInletUnit.StopSensor.IsOff)
                    {
                        TrayInletModule.UnloadingCompleted = true;
                        actor.NextTerminate();
                    }
                    else
                    {
                        RaiseAlarm(actor, AlarmTrayNotExistOnTrayInletUnit, TrayInletModule.TrayInletUnit.StopSensor.GetInputIOStatus());
                        actor.NextStep("Retry");
                    }
                });

            QuestionMessageBoxWindow questionWindow = null;

            seq.Steps["Retry"].StepIndex =
                seq.AddItem(
                    delegate(object obj)
                    {
                        App.Current.Dispatcher.Invoke(
                            new Action(
                                delegate
                                {
                                    questionWindow = new QuestionMessageBoxWindow();
                                    questionWindow.Message = Utility.UtilityClass.GetStringResource(this, "KUKA.AreYouSureYouWantToRetryRobotAction", "Are you sure you want to retry robot action?");
                                    questionWindow.Show();
                                }), null);
                    });
            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (questionWindow.Result == QuestionMessageBoxWindow.QuestionResult.Yes)
                        actor.NextStep("Start");
                    else if (questionWindow.Result == QuestionMessageBoxWindow.QuestionResult.No)
                        actor.NextStep();
                });
            seq.AddItem((object obj) => TrayInletModule.UnloadingCompleted = true);
            seq.AddTerminate();
        }
        private void MakeTransferLargeBox()
        {
            var seq = TransferLargeBox;

            seq.Steps.Add("Start", new StepInfo());
            seq.Steps.Add("Retry", new StepInfo());

            seq.Steps["Start"].StepIndex = seq.AddItem(ScanLargeBoxOnPickingPosition);
            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (BoxFormingBufferModule.UnloadingStandby && BoxPuttingModule.LargeBoxLoadingStandby)
                    {
                        if (BoxPuttingModule.TrayPuttingUnit.InsertingPositionSensor.IsOff)
                            actor.NextStep();
                        else
                            RaiseAlarm(actor, AlarmPuttingUnitLargeBoxExist);
                    }
                });
            seq.AddItem(
                (object obj) =>
                {
                    RobotModule.SendData.Parameter = ROBOT_PARAM_NONE;
                    RobotModule.SendData.ActionCode = (byte)FAKukaRobotCommandList.LargeBoxActionList.EAction.TransferBox;
                });
            seq.AddItem(new FASequenceAtomicInfo(RobotModule.ExecuteAction, true));
            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (BoxPuttingModule.TrayPuttingUnit.InSensor.IsOn)
                    {
                        BoxFormingBufferModule.UnloadingCompleted = true;
                        BoxPuttingModule.LargeBoxLoadingCompleted = true;
                        actor.NextTerminate();
                    }
                    else
                    {
                        RaiseAlarm(actor, AlarmPuttingUnitLargeBoxNotExist, BoxPuttingModule.TrayPuttingUnit.InSensor.GetInputIOStatus());
                        BoxFormingBufferModule.UnloadingCompleted = true;
                        actor.NextStep("Retry");
                    }
                });

            QuestionMessageBoxWindow questionWindow = null;

            seq.Steps["Retry"].StepIndex =
                seq.AddItem(
                    delegate(object obj)
                    {
                        App.Current.Dispatcher.Invoke(
                            new Action(
                                delegate
                                {
                                    questionWindow = new QuestionMessageBoxWindow();
                                    questionWindow.Message = Utility.UtilityClass.GetStringResource(this, "KUKA.AreYouSureYouWantToRetryRobotAction", "Are you sure you want to retry robot action?");
                                    questionWindow.Show();
                                }), null);
                    });
            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (questionWindow.Result == QuestionMessageBoxWindow.QuestionResult.Yes)
                        actor.NextStep("Start");
                    else if (questionWindow.Result == QuestionMessageBoxWindow.QuestionResult.No)
                        actor.NextStep();
                });
            seq.AddItem((object obj) => BoxFormingBufferModule.UnloadingCompleted = true);
            seq.AddItem((object obj) => BoxPuttingModule.LargeBoxLoadingCompleted = true);
            seq.AddTerminate();
        }
        private void MakeTransferDummyBox()
        {
            var seq = TransferDummyBox;

            seq.Steps.Add("Start", new StepInfo());
            seq.Steps.Add("Retry", new StepInfo());

            seq.Steps["Start"].StepIndex = seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (DummyBoxLoadingModule.UnloadingStandby)
                        actor.NextStep();
                });
            seq.AddItem(
                (object obj) =>
                {
                    RobotModule.SendData.Parameter = ROBOT_PARAM_NONE;
                    RobotModule.SendData.ActionCode = (byte)FAKukaRobotCommandList.DummyBoxActionList.EAction.TransferBoxToPlacePos;
                    RobotModule.UseFailReturn = true;
                });
            seq.AddItem(new FASequenceAtomicInfo(RobotModule.ExecuteAction, true));
            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    DummyBoxLoadingModule.UnloadingCompleted = true;

                    if (RobotModule.ReceiveData.ActionSuccess)
                        actor.NextStep();
                    else
                        actor.NextStep("Retry");
                });
            seq.AddTerminate();

            seq.Steps["Retry"].StepIndex = seq.AddItem(
               delegate(FASequence actor, TimeSpan time)
               {
                   if (RetryInfoDummyBoxTransfer.IncreaseCount() == false)
                   {
                       RaiseAlarm(actor, AlarmDummyBoxTransferError);
                       actor.NextStep();
                   }
                   else
                   {
                       actor.NextStep("Start");
                   }
               });
            QuestionMessageBoxWindow questionWindow = null;

            seq.AddItem(
                delegate(object obj)
                {
                    App.Current.Dispatcher.Invoke(
                        new Action(
                            delegate
                            {
                                questionWindow = new QuestionMessageBoxWindow();
                                questionWindow.Message = Utility.UtilityClass.GetStringResource(this, "KUKA.AreYouSureYouWantToRetryRobotAction", "Are you sure you want to retry robot action?");
                                questionWindow.Show();
                            }), null);
                });
            seq.AddItem(
                delegate(FASequence actor, TimeSpan time)
                {
                    if (questionWindow.Result == QuestionMessageBoxWindow.QuestionResult.Yes)
                        actor.NextStep();
                    else if (questionWindow.Result == QuestionMessageBoxWindow.QuestionResult.No)
                        actor.NextTerminate();
                });
                seq.AddItem("Start");
        }