protected override bool InitStation()
 {
     ParamSetMgr.GetInstance().SetBoolParam("右搜寻蜂鸣器成功", false);
     ParamSetMgr.GetInstance().SetIntParam("右剥料次数", 0);
     ParamSetMgr.GetInstance().SetBoolParam("右装料平台上升到位", false);
     ParamSetMgr.GetInstance().SetBoolParam("右剥料回原点成功", false);
     AlarmMgr.GetIntance().DoWhenAlarmEvent += DoSomethingWhenalarm;
     if (!thread.IsAlive)
     {
         thread.IsBackground = true;
         thread.Start(this);
     }
     PushMultStep((int)StationStep.step_init);
     PlaneMgr.GetInstance().PlaneArr[(int)PlaneType.rightStripPlane].planeState = PlaneState.None;
     return(true);
 }
        protected override void StationWork(int step)
        {
            if (ParamSetMgr.GetInstance().GetIntParam("右剥料屏蔽") == 1)
            {
                ParamSetMgr.GetInstance().SetBoolParam("右剥料完成", true);
                return;
            }

            WaranResult waranResult;
            bool        bfind       = ParamSetMgr.GetInstance().GetBoolParam("右搜寻蜂鸣器成功");
            bool        bgooripos   = ParamSetMgr.GetInstance().GetBoolParam("右剥料归位");
            PlaneState  planeState  = PlaneMgr.GetInstance().PlaneArr[(int)PlaneType.rightStripPlane].planeState;
            NozzleState nozzleState = NozzleMgr.GetInstance().nozzleArr[(int)NozzleType.RightStripNozzle].nozzleState;

            if (ParamSetMgr.GetInstance().GetBoolParam("右搜寻蜂鸣器成功") && ParamSetMgr.GetInstance().GetBoolParam("右剥料归位") &&
                PlaneMgr.GetInstance().PlaneArr[(int)PlaneType.rightStripPlane].planeState == PlaneState.None &&
                NozzleMgr.GetInstance().nozzleArr[(int)NozzleType.RightStripNozzle].nozzleState == NozzleState.Have &&
                GlobalVariable.g_StationState == StationState.StationStateRun)
            {
                Info(string.Format("右装料平台有无感应器{0},右搜寻蜂鸣器成功{1},右拨料平台状态{2},右剥料吸嘴状态{3} 右剥料归位{4}",
                                   IOMgr.GetInstace().ReadIoInBit("右装料平台有无感应器"),
                                   ParamSetMgr.GetInstance().GetBoolParam("右搜寻蜂鸣器成功"),
                                   PlaneMgr.GetInstance().PlaneArr[(int)PlaneType.rightStripPlane].planeState,
                                   NozzleMgr.GetInstance().nozzleArr[(int)NozzleType.RightStripNozzle].nozzleState,
                                   ParamSetMgr.GetInstance().GetBoolParam("右剥料归位")));
                ///loadState = LoadState.exceing;
                Carray();
                // loadState = LoadState.None;
            }
            switch (step)
            {
            case (int)StationStep.step_init:
                Init();
retry_FindBuzzer:
                waranResult = FindBuzzer();
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_FindBuzzer;
                }

                if (ParamSetMgr.GetInstance().GetBoolParam("右搜寻蜂鸣器成功"))
                {
retry_go_蜂鸣器顶位:
                    if (sys.g_AppMode == AppMode.AirRun)
                    {
                        ParamSetMgr.GetInstance().SetIntParam("右蜂鸣器顶位", (int)GetStationPointDic()["装料原始位"].pointZ);
                    }

                    WaranResult waranResult1 = MoveSigleAxisPosWaitInpos(AxisZ, ParamSetMgr.GetInstance().GetIntParam("右蜂鸣器顶位"), (int)MotionMgr.GetInstace().GetAxisMovePrm(AxisZ).VelH, 20, false, this, 60000);
                    if (waranResult1 == WaranResult.Retry)
                    {
                        goto retry_go_蜂鸣器顶位;
                    }
                }
                MoveSigleAxisPosWaitInpos(AxisY, GetStationPointDic()["剥料准备位"].pointY, (double)SpeedType.High, 20, false, this, 60000);
                PushMultStep((int)StationStep.step_Separate);
                ParamSetMgr.GetInstance().SetBoolParam("右剥料归位", true);
                ParamSetMgr.GetInstance().SetIntParam("右剥料次数", 0);
                DelCurrentStep();
                break;

            case (int)StationStep.step_Separate:
                ParamSetMgr.GetInstance().SetBoolParam("右剥料完成", false);
                if (PlaneMgr.GetInstance().PlaneArr[(int)PlaneType.rightStripPlane].planeState == PlaneState.None)
                {
                    break;
                }

                int Count = ParamSetMgr.GetInstance().GetIntParam("右剥料次数");
                if (Count > 6)
                {
                    PushMultStep((int)StationStep.step_Separate);
                    DelCurrentStep();
                    break;
                }

                Separate(Count);

                Count = ParamSetMgr.GetInstance().GetIntParam("右剥料次数");
                if (Count >= 2 && Count <= 6)
                {
                    ParamSetMgr.GetInstance().SetBoolParam("右剥料完成", true);
                    PushMultStep((int)StationStep.step_WaitGetFinish);
                    DelCurrentStep();
                }
                else if (Count > 6)
                {
                    ParamSetMgr.GetInstance().SetBoolParam("右剥料完成", false);
                    PushMultStep((int)StationStep.step_Separate);

                    DelCurrentStep();
                    break;
                }
                else
                {
                    PushMultStep((int)StationStep.step_Separate);
                    DelCurrentStep();
                }
                break;

            case (int)StationStep.step_WaitGetFinish:
                if (ParamSetMgr.GetInstance().GetBoolParam("右剥料取料完成"))
                {
                    ParamSetMgr.GetInstance().SetBoolParam("右剥料取料完成", false);
                    PushMultStep((int)StationStep.step_Separate);
                    DelCurrentStep();
                }
                break;
            }
        }
        private void LoadWortk(bool bManual = false)
        {
            try
            {
                if (!ParamSetMgr.GetInstance().GetBoolParam("右剥料回原点成功"))
                {
                    return;
                }
                if (!IOMgr.GetInstace().ReadIoInBit("右装料平台有无感应器") &&
                    !ParamSetMgr.GetInstance().GetBoolParam("右搜寻蜂鸣器成功") &&
                    loadState != LoadState.exceing &&
                    sys.g_AppMode == AppMode.AirRun &&
                    GlobalVariable.g_StationState == StationState.StationStateRun)
                {
                    Info(string.Format("右装料平台有无感应器{0},右搜寻蜂鸣器成功{1},右拨料平台状态{2},右剥料吸嘴状态{3} 右剥料归位{4}",
                                       IOMgr.GetInstace().ReadIoInBit("右装料平台有无感应器"),
                                       ParamSetMgr.GetInstance().GetBoolParam("右搜寻蜂鸣器成功"),
                                       PlaneMgr.GetInstance().PlaneArr[(int)PlaneType.rightStripPlane].planeState,
                                       NozzleMgr.GetInstance().nozzleArr[(int)NozzleType.RightStripNozzle].nozzleState,
                                       ParamSetMgr.GetInstance().GetBoolParam("右剥料归位")));
retry_find:
                    loadState = LoadState.exceing;
                    WaranResult waranResult = FindBuzzer();
                    if (waranResult == WaranResult.Retry)
                    {
                        goto retry_find;
                    }
                    loadState = LoadState.None;
                }


                if (ParamSetMgr.GetInstance().GetBoolParam("右搜寻蜂鸣器成功") &&
                    ParamSetMgr.GetInstance().GetBoolParam("右装料平台上升到位") &&
                    NozzleMgr.GetInstance().nozzleArr[(int)NozzleType.RightStripNozzle].nozzleState == NozzleState.None &&
                    loadState != LoadState.exceing &&
                    GlobalVariable.g_StationState == StationState.StationStateRun)
                {
                    Info(string.Format("右装料平台有无感应器{0},右搜寻蜂鸣器成功{1},右拨料平台状态{2},右剥料吸嘴状态{3} 右剥料归位{4}",
                                       IOMgr.GetInstace().ReadIoInBit("右装料平台有无感应器"),
                                       ParamSetMgr.GetInstance().GetBoolParam("右搜寻蜂鸣器成功"),
                                       PlaneMgr.GetInstance().PlaneArr[(int)PlaneType.rightStripPlane].planeState,
                                       NozzleMgr.GetInstance().nozzleArr[(int)NozzleType.RightStripNozzle].nozzleState,
                                       ParamSetMgr.GetInstance().GetBoolParam("右剥料归位")));
                    loadState = LoadState.exceing;
                    Pick();
                    loadState = LoadState.None;
                }

                if (ParamSetMgr.GetInstance().GetBoolParam("右搜寻蜂鸣器成功") &&
                    !ParamSetMgr.GetInstance().GetBoolParam("右装料平台上升到位") &&
                    GlobalVariable.g_StationState == StationState.StationStateRun)
                {
                    Info("装料步进运动");
                    int    pos     = MotionMgr.GetInstace().GetAxisPos(AxisZ);
                    double steplen = ParamSetMgr.GetInstance().GetDoubleParam("装料步长");
                    pos = pos + (int)(steplen * nResolutionZ);
                    MoveSigleAxisPosWaitInpos(AxisZ, pos, MotionMgr.GetInstace().GetAxisMovePrm(AxisZ).VelH, 20, bManual, this);
                    ParamSetMgr.GetInstance().SetBoolParam("右装料平台上升到位", true);
                }
            }
            catch (Exception e)
            {
                loadState = LoadState.None;
                Warn("异常发生" + e.Message);
                return;
            }
        }
        public void Separate(int index, bool bManual = false)
        {
            double      pos = GetStationPointDic()["剥料起始位"].pointY;
            double      posz = 0, posy = 0;
            WaranResult waranResult;

            Info(string.Format("{0} {1}次剥料", bManual?"手动":"自动", index));
            if (index > 6)
            {
                return;
            }

            switch (index)
            {
            case 0:
                #region  压
                ParamSetMgr.GetInstance().SetBoolParam("右剥料归位", false);
retry_pressup:
                IOMgr.GetInstace().WriteIoBit("右剥料后压紧气缸电磁阀", false);
                waranResult = CheckIobyName("右剥料后压紧气缸原位", true, "右剥料:Separate:右剥料后压紧气缸原位 到位失败", bManual);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_pressup;
                }

                //IOMgr.GetInstace().WriteIoBit("右剥料压紧气缸电磁阀", false);
                //waranResult = CheckIobyName("右剥料压紧气缸原位", true, "右剥料:Separate:右剥料压紧气缸原位 到位失败", bManual);
                //if (waranResult == WaranResult.Retry)
                //    goto retry_pressup;

                IOMgr.GetInstace().WriteIoBit("右剥料夹料气缸电磁阀", false);
                waranResult = CheckIobyName("右剥料夹料气缸原位", true, "右剥料:Separate:右剥料夹料气缸原位 到位失败", bManual);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_pressup;
                }


                IOMgr.GetInstace().WriteIoBit("右剥料气缸电磁阀", true);


                double xpos = GetStationPointDic()["剥料下压位"].pointX;
                double ypos = GetStationPointDic()["剥料下压位"].pointY;
                Info("右剥料:Y轴 去剥料下压位,RBZ轴 去剥料前压位");
                //MoveSigleAxisPosWaitInpos(AxisY, pos, MotionMgr.GetInstace().GetAxisMovePrm(AxisY).VelH, 20, bManual, this);
                MoveMulitAxisPosWaitInpos(new int[] { AxisX, AxisY }, new double[] { xpos, ypos }, new double[] { (double)SpeedType.High, (double)SpeedType.High }, 20, bManual, this, 60000);


retry_pressdown:
                IOMgr.GetInstace().WriteIoBit("右剥料后压紧气缸电磁阀", true);
                waranResult = CheckIobyName("右剥料后压紧气缸到位", true, "右剥料:Separate:右剥料后压紧气缸到位 到位失败", bManual);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_pressdown;
                }


#if false
                IOMgr.GetInstace().WriteIoBit("右剥料前推压紧气缸电磁阀", true);
                waranResult = CheckIobyName("右剥料前推压紧气缸到位", true, "右剥料:Separate:右剥料前推压紧气缸到位 到位失败", bManual);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_pressdown;
                }
#endif

                ypos = GetStationPointDic()["剥料前压位"].pointY;
                Info("去剥料前压位");
                MoveSigleAxisPosWaitInpos(AxisY, ypos, (double)SpeedType.High, 20, bManual, this);

retry_pushfront_:
                IOMgr.GetInstace().WriteIoBit("右剥料气缸电磁阀", true);
                waranResult = CheckIobyName("右剥料气缸到位", true, "右剥料:Separate:右剥料气缸到位 到位失败", bManual);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_pushfront_;
                }

#if false
retry_push:
                IOMgr.GetInstace().WriteIoBit("右剥料气缸电磁阀", true);
                waranResult = CheckIobyName("右剥料气缸到位", true, "右剥料:Separate:右剥料气缸到位 到位失败", bManual);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_push;
                }
#endif


                Info("右剥料 下拉");
                xpos = GetStationPointDic()["剥料前压位"].pointX;
                Info("去剥料前压位下压");
                MoveSigleAxisPosWaitInpos(AxisX, xpos, (double)SpeedType.High, 20, bManual, this);

                Info("右剥料 预剥料完成");

retry_camp:
                IOMgr.GetInstace().WriteIoBit("右剥料夹料气缸电磁阀", true);
                waranResult = CheckIobyName("右剥料夹料气缸到位", true, "右剥料:Separate:右剥料夹料气缸到位 到位失败", bManual);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_camp;
                }


                //IOMgr.GetInstace().WriteIoBit("右剥料压紧气缸电磁阀", true);
                //waranResult = CheckIobyName("右剥料压紧气缸到位", true, "右剥料:Separate:右剥料压紧气缸到位 到位失败", bManual);
                //if (waranResult == WaranResult.Retry)
                //    goto retry_pressdown;
                break;

                #endregion
            case 6:
                #region 弃料


                //retry_pressbackdown:
                //IOMgr.GetInstace().WriteIoBit("右剥料后压紧气缸电磁阀", true);
                //waranResult = CheckIobyName("右剥料后压紧气缸到位", true, "右剥料:Separate:右剥料后压紧气缸到位 到位失败", bManual);
                //if (waranResult == WaranResult.Retry)
                //    goto retry_pressbackdown;

                //retry_Spressup2:
                //IOMgr.GetInstace().WriteIoBit("右剥料夹料气缸电磁阀", true);
                //waranResult = CheckIobyName("右剥料夹料气缸到位", true, "右剥料:Separate:右剥料夹料气缸到位 到位失败", bManual);
                //if (waranResult == WaranResult.Retry)
                //    goto retry_Spressup2;
retry_pressbackup:
                IOMgr.GetInstace().WriteIoBit("右剥料后压紧气缸电磁阀", false);
                waranResult = CheckIobyName("右剥料后压紧气缸原位", true, "右剥料:Separate:右剥料后压紧气缸原位 到位失败", bManual);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_pressbackup;
                }

                posz = GetStationPointDic()["剥料弃料位"].pointX;
                // posy= GetStationPointDic()["剥料弃料位"].pointY;
                Info("右剥料:去弃料位");
                MoveSigleAxisPosWaitInpos(AxisX, posz, MotionMgr.GetInstace().GetAxisMovePrm(AxisX).VelH, 20, bManual, this);
                //  MoveLine2DWaitInpos("右剥料YZ", new double[] { posz, posy }, 20, bManual);



                IOMgr.GetInstace().WriteIoBit("右剥料上吹气电磁阀", true);
                IOMgr.GetInstace().WriteIoBit("右剥料下吹气电磁阀", true);

retry_SFront2:
                IOMgr.GetInstace().WriteIoBit("右剥料气缸电磁阀", false);
                waranResult = CheckIobyName("右剥料气缸原位", true, "右剥料:Separate:右剥料气缸原位 到位失败", bManual);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_SFront2;
                }
                PulseGenerator pulseGenerator = new PulseGenerator(200, 8, new Action <int>((nCount) => {
                    if (nCount % 2 == 0)
                    {
                        IOMgr.GetInstace().WriteIoBit("右剥料下吹气电磁阀", false);
                    }
                    else
                    {
                        IOMgr.GetInstace().WriteIoBit("右剥料下吹气电磁阀", true);
                    }
                }), new Action(() => {
                    IOMgr.GetInstace().WriteIoBit("右剥料下吹气电磁阀", false);
                }));

retry_Spressup3:
                IOMgr.GetInstace().WriteIoBit("右剥料夹料气缸电磁阀", false);
                waranResult = CheckIobyName("右剥料夹料气缸原位", true, "右剥料:Separate:右剥料夹料气缸原位 到位失败", bManual);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_Spressup3;
                }

                pulseGenerator.StartPulseGenerator();
                //retry_pressfrontpressup2:
                //IOMgr.GetInstace().WriteIoBit("右剥料压紧气缸电磁阀", false);
                //    waranResult = CheckIobyName("右剥料压紧气缸原位", true, "右剥料:Separate:右剥料前推压紧气缸到位 到位失败", bManual);
                //if (waranResult == WaranResult.Retry)
                //        goto retry_pressfrontpressup2;

                //retry_frontpush:
                //IOMgr.GetInstace().WriteIoBit("右剥料前推压紧气缸电磁阀", true);
                //waranResult = CheckIobyName("右剥料前推压紧气缸到位", true, "右剥料:Separate:右剥料前推压紧气缸到位 到位失败", bManual);
                //if (waranResult == WaranResult.Retry)
                //    goto retry_frontpush;

                //retry_pressbackdown2:
                //IOMgr.GetInstace().WriteIoBit("右剥料后压紧气缸电磁阀", true);
                //waranResult = CheckIobyName("右剥料后压紧气缸到位", true, "右剥料:Separate:右剥料后压紧气缸原位 到位失败", bManual);
                //if (waranResult == WaranResult.Retry)
                // goto retry_pressbackdown2;

                // retry_pressfrontup:
                //IOMgr.GetInstace().WriteIoBit("右剥料压紧气缸电磁阀", false);
                // waranResult = CheckIobyName("右剥料压紧气缸原位", true, "右剥料:Separate:右剥料压紧气缸原位 到位失败", bManual);
                //if (waranResult == WaranResult.Retry)
                //  goto retry_pressfrontup;


retry_pressbackup5:
                IOMgr.GetInstace().WriteIoBit("右剥料后压紧气缸电磁阀", false);
                waranResult = CheckIobyName("右剥料后压紧气缸原位", true, "右剥料:Separate:右剥料后压紧气缸原位 到位失败", bManual);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_pressbackup5;
                }

                pos = GetStationPointDic()["剥料准备位"].pointY;
                double posX = GetStationPointDic()["剥料准备位"].pointX;
                Info("右剥料:回剥料准备位");
                MoveMulitAxisPosWaitInpos(new int[] { AxisX, AxisY }, new double[] { posX, pos }, new double[] { (double)SpeedType.High, (double)SpeedType.High }, 20, bManual, this, 60000);
                IOMgr.GetInstace().WriteIoBit("右剥料上吹气电磁阀", false);
                IOMgr.GetInstace().WriteIoBit("右剥料下吹气电磁阀", false);

                ParamSetMgr.GetInstance().SetBoolParam("右剥料归位", true);
                PlaneMgr.GetInstance().PlaneArr[(int)PlaneType.rightStripPlane].planeState = PlaneState.None;
                break;

                #endregion
            default:
                #region 剥料(1 2 3 4 5)

                ParamSetMgr.GetInstance().SetBoolParam("右剥料归位", false);
#if false
retry_pressfrontpressup:
                IOMgr.GetInstace().WriteIoBit("右剥料压紧气缸电磁阀", true);
                waranResult = CheckIobyName("右剥料压紧气缸到位", true, "右剥料:Separate:右剥料压紧气缸到位 到位失败", bManual);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_pressfrontpressup;
                }

retry_pressfrontfront2:
                IOMgr.GetInstace().WriteIoBit("右剥料前推压紧气缸电磁阀", false);
                waranResult = CheckIobyName("右剥料前推压紧气缸原位", true, "右剥料:Separate:右剥料前推压紧气缸到位 到位失败", bManual);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_pressfrontfront2;
                }
#endif

#if true
retry_Sback:
                IOMgr.GetInstace().WriteIoBit("右剥料气缸电磁阀", true);
                waranResult = CheckIobyName("右剥料气缸到位", true, "右剥料:Separate:右剥料气缸到位 到位失败", bManual);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_Sback;
                }
#else
retry_push2:
                IOMgr.GetInstace().WriteIoBit("右剥料气缸电磁阀", false);
                waranResult = CheckIobyName("右剥料气缸原位", true, "右剥料:Separate:右剥料气缸电原位 到位失败", bManual);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_push2;
                }
#endif
                //retry_SFront:
                //IOMgr.GetInstace().WriteIoBit("右剥料气缸电磁阀", false);
                //waranResult = CheckIobyName("右剥料气缸原位", true, "右剥料:Separate:右剥料气缸原位 到位失败", bManual);
                //if (waranResult == WaranResult.Retry)
                //    goto retry_SFront;

retry_Spressup:
                IOMgr.GetInstace().WriteIoBit("右剥料夹料气缸电磁阀", true);
                waranResult = CheckIobyName("右剥料夹料气缸到位", true, "右剥料:Separate:右剥料夹料气缸到位 到位失败", bManual);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_Spressup;
                }

                pos = GetStationPointDic()["剥料起始位"].pointY;
                double lenstep = ParamSetMgr.GetInstance().GetDoubleParam("剥料步长");
                posy = pos - (int)((index - 1) * lenstep * nResolutionY);
                pos  = GetStationPointDic()["剥料起始位"].pointX;
                posz = pos - (int)((index - 1) * lenstep * nResolutionX);
                MoveLine2DWaitInpos("右剥料YZ", new double[] { posz, posy }, 10, bManual);

                //Info("去剥料起始位Y");
                //MoveSigleAxisPosWaitInpos(AxisY, pos, MotionMgr.GetInstace().GetAxisMovePrm(AxisY).VelH, 20, bManual,  this);

                //Info("去剥料起始位LZ");
                //MoveSigleAxisPosWaitInpos(AxisX, pos, MotionMgr.GetInstace().GetAxisMovePrm(AxisX).VelH, 20, bManual,  this);


                Info("压紧气缸下压");

retry_pressbackdownagain:
                IOMgr.GetInstace().WriteIoBit("右剥料后压紧气缸电磁阀", true);
                waranResult = CheckIobyName("右剥料后压紧气缸到位", true, "右剥料:Separate:右剥料后压紧气缸到位 到位失败", bManual);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_pressbackdownagain;
                }

                //retry_pressfrontfront:
                //    IOMgr.GetInstace().WriteIoBit("右剥料前推压紧气缸电磁阀", true);
                //    waranResult = CheckIobyName("右剥料前推压紧气缸到位", true, "右剥料:Separate:右剥料前推压紧气缸到位 到位失败", bManual);
                //    if (waranResult == WaranResult.Retry)
                //        goto retry_pressfrontfront;

                //retry_pressfrontpressdown:
                //IOMgr.GetInstace().WriteIoBit("右剥料压紧气缸电磁阀", true);
                //waranResult = CheckIobyName("右剥料压紧气缸到位", true, "右剥料:Separate: 右剥料压紧气缸到位 到位失败", bManual);
                //if (waranResult == WaranResult.Retry)
                //    goto retry_pressfrontpressdown;
                //retry_Spressdown:
                //IOMgr.GetInstace().WriteIoBit("右剥料夹料气缸电磁阀", true);
                //waranResult = CheckIobyName("右剥料夹料气缸到位", true, "右剥料:Separate:右剥料夹料气缸到位 到位失败", bManual);
                //if (waranResult == WaranResult.Retry)
                //    goto retry_Spressdown;

                //Thread.Sleep(ParamSetMgr.GetInstance().GetIntParam("下压延时"));
                //retry_Sback:
                //  IOMgr.GetInstace().WriteIoBit("右剥料气缸电磁阀", true);
                //  waranResult = CheckIobyName("右剥料气缸到位", true, "右剥料:Separate:右剥料气缸到位 到位失败", bManual);
                //  if (waranResult == WaranResult.Retry)
                //      goto retry_Sback;

                // Thread.Sleep(ParamSetMgr.GetInstance().GetIntParam("拨料延时"));
                //retry_pressfrontpressup3:
                //IOMgr.GetInstace().WriteIoBit("右剥料压紧气缸电磁阀", false);
                //waranResult = CheckIobyName("右剥料压紧气缸原位", true, "右剥料:Separate:右剥料压紧气缸原位 到位失败", bManual);
                //if (waranResult == WaranResult.Retry)
                //    goto retry_pressfrontpressup3;

                //retry_pressfrontback:
                //IOMgr.GetInstace().WriteIoBit("右剥料前推压紧气缸电磁阀", false);
                //waranResult = CheckIobyName("右剥料前推压紧气缸原位", true, "右剥料:Separate:右剥料前推压紧气缸原位 到位失败", bManual);
                //if (waranResult == WaranResult.Retry)
                //    goto retry_pressfrontback;

                double currentpos = MotionMgr.GetInstace().GetAxisPos(AxisX);
                MoveSigleAxisPosWaitInpos(AxisX, currentpos + ParamSetMgr.GetInstance().GetDoubleParam("剥料后拉距离") * nResolutionY, (double)SpeedType.High, 20, bManual, this, 60000);
                break;
                #endregion
            }

            ParamSetMgr.GetInstance().SetIntParam("右剥料次数", ++index);
        }
        public bool Carray(bool bmanul = false)
        {
            Info("右剥料工站:搬运气缸开始搬运物料");
            WaranResult waranResult;

            // CheckAndUp(bmanul);
retry_carry_up:
            ParamSetMgr.GetInstance().SetBoolParam("右剥料完成", false);
            Info("右装料Z轴气缸电磁阀 上升");
            IOMgr.GetInstace().WriteIoBit("右装料Z轴气缸电磁阀", false);
            waranResult = CheckIobyName("右装料Z轴气缸原位", true, "右剥料工站:右装料Z轴气缸电磁阀 上升失败,请检查气缸和感应器 线路 ", bmanul);
            if (waranResult == WaranResult.Retry)
            {
                goto retry_carry_up;
            }
            StationRightPackage stationLeftPackage = (StationRightPackage)StationMgr.GetInstance().GetStation("右贴装站");
            int AxisYNooFPageBack = stationLeftPackage.AxisY;
            int AxiXYNooFPageBack = stationLeftPackage.AxisX;

retry_carryMoving:
            if (MotionMgr.GetInstace().GetHomeFinishFlag(AxisY) == AxisHomeFinishFlag.Homed && MotionMgr.GetInstace().GetAxisPos(AxisY) > GetStationPointDic()["剥料准备位"].pointY - 50 &&
                MotionMgr.GetInstace().GetHomeFinishFlag(AxisYNooFPageBack) == AxisHomeFinishFlag.Homed && MotionMgr.GetInstace().GetAxisPos(AxisYNooFPageBack) < stationLeftPackage.GetStationPointDic()["搬料安全位"].pointY - 50
                )
            {
#if false
                IOMgr.GetInstace().WriteIoBit("右剥料前推压紧气缸电磁阀", true);
                waranResult = CheckIobyName("右剥料前推压紧气缸到位", true, "右剥料工站:右剥料前推压紧气缸到位失败,请检查气缸和感应器 线路 ", bmanul);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_carryMoving;
                }

                IOMgr.GetInstace().WriteIoBit("右剥料压紧气缸电磁阀", true);
                waranResult = CheckIobyName("右剥料压紧气缸到位", true, "右剥料工站:右剥料压紧气缸到位失败,请检查气缸和感应器 线路 ", bmanul);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_carryMoving;
                }
#endif
                Info("右装料搬运气缸电磁阀 移动搬料");
                IOMgr.GetInstace().WriteIoBit("右装料搬运气缸电磁阀", true);
                waranResult = CheckIobyName("右装料搬运气缸到位", true, "右剥料工站:右装料搬运气缸到位失败,物料可能掉落,请检查气缸和感应器 线路 ", bmanul);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_carryMoving;
                }

                //  CheckBuzzerPlaneAndUp();

retry_carry_down:
                Info("右装料Z轴气缸电磁阀 下降");
                IOMgr.GetInstace().WriteIoBit("右装料Z轴气缸电磁阀", true);
                waranResult = CheckIobyName("右装料Z轴气缸到位", true, "右剥料工站:右装料Z轴气缸原下降失败,物料可能掉落,请检查气缸和感应器 线路 ", bmanul);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_carry_down;
                }

                Info("右装料真空吸电磁阀 关闭");
                Info("右装料破真空电磁阀 打开");
                Info("右剥料真空吸电磁阀 打开");
                IOMgr.GetInstace().WriteIoBit("右装料破真空电磁阀", true);
                IOMgr.GetInstace().WriteIoBit("右装料真空吸电磁阀", false);
                IOMgr.GetInstace().WriteIoBit("右剥料真空吸电磁阀", true);
                Thread.Sleep(ParamSetMgr.GetInstance().GetIntParam("吸真空延时"));

                IOMgr.GetInstace().WriteIoBit("右装料破真空电磁阀", false);
retry_carry_up2:
                Info("右装料Z轴气缸电磁阀 上升");
                IOMgr.GetInstace().WriteIoBit("右装料Z轴气缸电磁阀", false);
                waranResult = CheckIobyName("右装料Z轴气缸原位", true, "右剥料工站:右装料Z轴气缸电磁阀 上升 失败,请检查气缸和感应器 线路 ", bmanul);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_carry_up2;
                }

                waranResult = CheckIobyName("右剥料真空检测", true, "右剥料工站:Carray:蜂鸣器片 在剥料平台未吸紧", bmanul);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_carry_down;
                }

                Info("右装料真空吸电磁阀 复检 检查料是否脱落");
                IOMgr.GetInstace().WriteIoBit("右装料破真空电磁阀", false);
                IOMgr.GetInstace().WriteIoBit("右装料真空吸电磁阀", true);
                waranResult = CheckIobyName("右装料真空检测", false, "右剥料工站 :Carray:蜂鸣器片 在装料抓手上未脱离", bmanul);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_carry_down;
                }
                IOMgr.GetInstace().WriteIoBit("右装料真空吸电磁阀", false);


retry_carryMovingback:
                Info("右装料搬运气缸电磁阀 移动搬料");
                IOMgr.GetInstace().WriteIoBit("右装料搬运气缸电磁阀", false);
                waranResult = CheckIobyName("右装料搬运气缸原位", true, "右剥料工站:Carray:搬运气缸回到原位", bmanul);
                if (waranResult == WaranResult.Retry)
                {
                    goto retry_carryMovingback;
                }
                IOMgr.GetInstace().WriteIoBit("右装料真空吸电磁阀", false);
                IOMgr.GetInstace().WriteIoBit("右装料破真空电磁阀", false);
                IOMgr.GetInstace().WriteIoBit("右剥料真空吸电磁阀", false);
                IOMgr.GetInstace().WriteIoBit("右剥料后压紧气缸电磁阀", false);
                ParamSetMgr.GetInstance().SetIntParam("右剥料次数", 0);
                NozzleMgr.GetInstance().nozzleArr[(int)NozzleType.RightStripNozzle].nozzleState = NozzleState.None;
                PlaneMgr.GetInstance().PlaneArr[(int)PlaneType.rightStripPlane].planeState      = PlaneState.Have;
                return(true);
            }
            else
            {
                Info("Y轴 在剥料准备位前 不能移动 请挪开 或者 右剥料平台Y轴 没有回原点");
                return(false);

                WaranResult waranResult2 = AlarmMgr.GetIntance().WarnWithDlg("Y轴 在剥料准备位前 不能移动 请挪开 或者 右剥料平台Y轴 没有回原点", bmanul ? null : this, CommonDlg.DlgWaranType.WaranInorge_Stop_Pause_Retry);
                if (waranResult2 == WaranResult.Retry)
                {
                    goto retry_carryMoving;
                }
            }
        }