private static void Run_Light()
 {
     if (Run_Light_Time_EN == false)
     {
         Run_Light_Time_EN = true;
         Gg.SetDo(0, 3, 0); //蜂鸣器
         Gg.SetDo(0, 0, 1); //红色指示灯
         Gg.SetDo(0, 1, 0); //黄色指示灯
         Gg.SetDo(0, 2, 0); //绿色指示灯
         Run_Light_Time_N1 = API.GetTickCount();
     }
     if (API.GetTickCount() - Run_Light_Time_N1 > 500)
     {
         if (API.GetTickCount() - Run_Light_Time_N2 > 500)
         {
             Run_Light_Time_EN = false;
         }
         Gg.SetDo(0, 0, 0); //红色指示灯
     }
     else
     {
         Run_Light_Time_N2 = API.GetTickCount();
     }
 }
 private static void IntOK_Light()
 {
     if (IntOK_Light_Time_EN == false)
     {
         IntOK_Light_Time_EN = true;
         Gg.SetDo(0, 3, 0); //蜂鸣器
         Gg.SetDo(0, 0, 0); //红色指示灯
         Gg.SetDo(0, 1, 1); //黄色指示灯
         Gg.SetDo(0, 2, 0); //绿色指示灯
         IntOK_Light_Time_N1 = API.GetTickCount();
     }
     if (API.GetTickCount() - IntOK_Light_Time_N1 > 500)
     {
         if (API.GetTickCount() - IntOK_Light_Time_N2 > 500)
         {
             IntOK_Light_Time_EN = false;
         }
         //Gg.SetDo(0, 1, 0); //黄色指示灯'开启变成闪亮
     }
     else
     {
         IntOK_Light_Time_N2 = API.GetTickCount();
     }
 }
Exemple #3
0
        /// <summary>
        /// GotoHome(short CardNum[卡号], short Axis[轴号], double homeToLimitFDist[极限到原点距离], double searchHomeDist[原点搜索距离], double offsetPos[感应宽度], double homeoffset[原点偏移距离], double vel[搜索原点速度])
        /// </summary>
        /// <param name="CardNum"></param>
        /// <param name="Axis"></param>
        /// <param name="homeToLimitFDist"></param>
        /// <param name="searchHomeDist"></param>
        /// <param name="offsetPos"></param>
        /// <param name="homeoffset"></param>
        /// <param name="vel"></param>
        public static void GotoHome(short CardNum, short Axis, double homeToLimitFDist, double searchHomeDist, double offsetPos, double homeoffset, double vel)
        {
            uint temp_pClock = 0;

            if (GoHome.Instance.AxisHome[CardNum, Axis].Step != 0)
            {
                GoHome.Instance.AxisHome[CardNum, Axis].State = true;
                switch (GoHome.Instance.AxisHome[CardNum, Axis].Step)
                {
                case 10:
                    gts.GT_ClrSts(CardNum, Axis, (short)1);              //清除报警
                    gts.GT_SetPrfPos(CardNum, Axis, 0);                  //规划器置零
                    gts.GT_SetEncPos(CardNum, Axis, 0);                  //编码器置零
                    gts.GT_SynchAxisPos(CardNum, 1 << (Axis - 1));       //将当前轴进行位置同步
                    GoHome.Instance.AxisHome[CardNum, Axis].Counter = 0; //回原点计数
                    GoHome.Instance.AxisHome[CardNum, Axis].Step    = 20;
                    break;

                case 20:
                    GoHome.Instance.AxisHome[CardNum, Axis].Capture = 0;
                    if (Gg.GetHomeDi(CardNum, Axis) == 0)     //判断是否在原点上
                    {
                        if (GoHome.Instance.AxisHome[CardNum, Axis].Counter > 1)
                        {
                            GoHome.Instance.AxisHome[CardNum, Axis].Step = 140;
                        }
                        else
                        {
                            GoHome.Instance.AxisHome[CardNum, Axis].Counter = GoHome.Instance.AxisHome[CardNum, Axis].Counter + 1;
                            GoHome.Instance.AxisHome[CardNum, Axis].Step    = 30;  //开始搜索原点
                        }
                    }
                    else
                    {
                        GoHome.Instance.AxisHome[CardNum, Axis].Step = 200;     //偏离原点,方向与搜索原点方向相反
                    }
                    break;

                case 30:
                    gts.GT_ClrSts(CardNum, Axis, (short)1);
                    gts.GT_SetCaptureMode(CardNum, Axis, gts.CAPTURE_HOME);                                                    //第一次原点搜索
                    GoHome.Instance.AxisHome[CardNum, Axis].TempPos = 0;
                    Gg.AbsMotion(CardNum, Axis, System.Convert.ToDouble(Gg.GetPrfPosmm(CardNum, Axis) + searchHomeDist), vel); //启动运动,开始搜索原点
                    GoHome.Instance.AxisHome[CardNum, Axis].Step = 40;
                    break;

                case 40:
                    gts.GT_ClrSts(CardNum, Axis, (short)1);
                    gts.GT_GetSts(CardNum, Axis, out GoHome.Instance.AxisHome[CardNum, Axis].status, (short)1, out temp_pClock);
                    gts.GT_GetCaptureStatus(CardNum, Axis, out GoHome.Instance.AxisHome[CardNum, Axis].Capture, out GoHome.Instance.AxisHome[CardNum, Axis].TempPos, (short)1, out temp_pClock); //获取当前轴原点捕获的状态及捕获的当前位置
                    if (GoHome.Instance.AxisHome[CardNum, Axis].Capture == 1)                                                                                                                    //判断当前轴是否原点捕获触发
                    {
                        Gg.AxisStop(CardNum, Axis);                                                                                                                                              //当前轴停止
                        GoHome.Instance.AxisHome[CardNum, Axis].Capture = 0;
                        GoHome.Instance.AxisHome[CardNum, Axis].Step    = 50;
                    }
                    else if (Gg.GetLimitDi_Z(CardNum, Axis) == 1) //判断当前轴是否触发正极限
                    {
                        Gg.AxisStop(CardNum, Axis);               //当前轴停止
                        GoHome.Instance.AxisHome[CardNum, Axis].Step = 170;
                    }
                    else if (Gg.GetLimitDi_F(CardNum, Axis) == 1) //判断当前轴是否触发负极限
                    {
                        Gg.AxisStop(CardNum, Axis);               //当前轴停止
                        GoHome.Instance.AxisHome[CardNum, Axis].Step = 150;
                    }
                    else if (System.Convert.ToBoolean(GoHome.Instance.AxisHome[CardNum, Axis].status & 0x400) == false)     //判断当前轴规划器是否运动停止(原点搜索距离太小)
                    {
                        GoHome.Instance.AxisHome[CardNum, Axis].Step = 140;
                    }
                    break;

                case 50:
                    Gg.AbsMotion(CardNum, Axis, System.Convert.ToDouble(GoHome.Instance.AxisHome[CardNum, Axis].TempPos / Gg.PlusPerUnit(CardNum, Axis)) / Tools.GeerRate[CardNum, Axis] + 1, 2);
                    //Gg.AbsMotion(CardNum, Axis, System.Convert.ToDouble(Gg.GetPrfPosmm(CardNum, Axis) + offsetPos), 10); //启动运动,原点反向运动
                    GoHome.Instance.AxisHome[CardNum, Axis].Step = 60;
                    break;

                case 60:
                    gts.GT_ClrSts(CardNum, Axis, (short)1);
                    gts.GT_GetSts(CardNum, Axis, out GoHome.Instance.AxisHome[CardNum, Axis].status, (short)1, out temp_pClock); //获取当前轴的状态
                    if (System.Convert.ToBoolean(GoHome.Instance.AxisHome[CardNum, Axis].status & 0x400) == false)               //判断当前轴是否运动停止
                    {
                        GoHome.Instance.AxisHome[CardNum, Axis].Step = 70;
                    }
                    break;

                case 70:
                    gts.GT_SetCaptureMode(CardNum, Axis, gts.CAPTURE_HOME);                                                 //第二次原点搜索
                    //hRtn = gts.GT_SetCaptureMode(CardNum, Axis,gts. CAPTURE_INDEX);    //启动当前轴的Z相脉冲捕获
                    Gg.AbsMotion(CardNum, Axis, System.Convert.ToDouble(Gg.GetPrfPosmm(CardNum, Axis) - offsetPos * 2), 1); //以1mm/s速度找原点
                    GoHome.Instance.AxisHome[CardNum, Axis].Step = 80;                                                      //跳转到下一步
                    break;

                case 80:
                    gts.GT_ClrSts(CardNum, Axis, (short)1);
                    gts.GT_GetSts(CardNum, Axis, out GoHome.Instance.AxisHome[CardNum, Axis].status, (short)1, out temp_pClock);                                                                 //获取当前轴的状态
                    gts.GT_GetCaptureStatus(CardNum, Axis, out GoHome.Instance.AxisHome[CardNum, Axis].Capture, out GoHome.Instance.AxisHome[CardNum, Axis].TempPos, (short)1, out temp_pClock); //获取当前轴Z相脉冲捕获的状态及捕获的当前位置
                    if (GoHome.Instance.AxisHome[CardNum, Axis].Capture == 1)                                                                                                                    //判断当前轴是否Z相脉冲捕获触发
                    {
                        Gg.AxisStop(CardNum, Axis);                                                                                                                                              //当前轴停止
                        GoHome.Instance.AxisHome[CardNum, Axis].Capture = 0;                                                                                                                     //捕获触发标志清零
                        GoHome.Instance.AxisHome[CardNum, Axis].Step    = 90;
                    }
                    else if (System.Convert.ToBoolean(GoHome.Instance.AxisHome[CardNum, Axis].status & 0x400) == false)
                    {
                        GoHome.Instance.AxisHome[CardNum, Axis].Step = 140;     //跳转到第110步(或脉冲未捕获,回原点结束,回原点失败)
                    }
                    break;

                case 90:
                    if (homeoffset < 5)
                    {
                        Gg.AbsMotion(CardNum, Axis, System.Convert.ToDouble(GoHome.Instance.AxisHome[CardNum, Axis].TempPos / Gg.PlusPerUnit(CardNum, Axis) / Tools.GeerRate[CardNum, Axis]) + homeoffset, 2);
                    }
                    else
                    {
                        Gg.AbsMotion(CardNum, Axis, System.Convert.ToDouble(GoHome.Instance.AxisHome[CardNum, Axis].TempPos / Gg.PlusPerUnit(CardNum, Axis) / Tools.GeerRate[CardNum, Axis]) + homeoffset, 30);
                    }
                    GoHome.Instance.AxisHome[CardNum, Axis].Step = 100;
                    break;

                case 100:
                    gts.GT_ClrSts(CardNum, Axis, (short)1);
                    gts.GT_GetSts(CardNum, Axis, out GoHome.Instance.AxisHome[CardNum, Axis].status, (short)1, out temp_pClock);
                    if (System.Convert.ToBoolean(GoHome.Instance.AxisHome[CardNum, Axis].status & 0x400) == false)     //判断当前轴是否运动停止
                    {
                        GoHome.Instance.AxisHome[CardNum, Axis].oldtime = API.GetTickCount();
                        GoHome.Instance.AxisHome[CardNum, Axis].Step    = 110;
                    }
                    break;

                case 110:
                    if (API.GetTickCount() - GoHome.Instance.AxisHome[CardNum, Axis].oldtime > 200)
                    {
                        GoHome.Instance.AxisHome[CardNum, Axis].Step = 120;
                    }
                    break;

                case 120:
                    gts.GT_SetPrfPos(CardNum, Axis, 0);            //将当前轴规划器位置修改为零点
                    gts.GT_SetEncPos(CardNum, Axis, 0);            //将当前轴编码器位置修改为零点
                    gts.GT_SynchAxisPos(CardNum, 1 << (Axis - 1)); //将当前轴进行位置同步
                    GoHome.Instance.AxisHome[CardNum, Axis].oldtime = API.GetTickCount();
                    GoHome.Instance.AxisHome[CardNum, Axis].Step    = 130;
                    break;

                case 130:
                    if (API.GetTickCount() - GoHome.Instance.AxisHome[CardNum, Axis].oldtime > 50)
                    {
                        if (Gg.GetEncPos(CardNum, Axis) == 0 && Gg.GetPrfPos(CardNum, Axis) == 0)
                        {
                            GoHome.Instance.AxisHome[CardNum, Axis].Result = true;
                            GoHome.Instance.AxisHome[CardNum, Axis].State  = false;
                            GoHome.Instance.AxisHome[CardNum, Axis].Step   = 0;
                        }
                        else
                        {
                            GoHome.Instance.AxisHome[CardNum, Axis].oldtime = API.GetTickCount();
                            GoHome.Instance.AxisHome[CardNum, Axis].Step    = 110;
                        }
                    }
                    break;

                case 140:
                    GoHome.Instance.AxisHome[CardNum, Axis].Result = false;
                    GoHome.Instance.AxisHome[CardNum, Axis].State  = false;
                    GoHome.Instance.AxisHome[CardNum, Axis].Step   = 0;
                    break;

                //*********************************************************************************************************************
                case 150:     //负极限和原点之间距离
                    gts.GT_ClrSts(CardNum, Axis, (short)1);
                    Gg.AbsMotion(CardNum, Axis, System.Convert.ToDouble(Gg.GetPrfPosmm(CardNum, Axis) + homeToLimitFDist), vel * 0.5);
                    GoHome.Instance.AxisHome[CardNum, Axis].Step = 160;
                    break;

                case 160:
                    gts.GT_ClrSts(CardNum, Axis, (short)1);
                    gts.GT_GetSts(CardNum, Axis, out GoHome.Instance.AxisHome[CardNum, Axis].status, (short)1, out temp_pClock);
                    if (System.Convert.ToBoolean(GoHome.Instance.AxisHome[CardNum, Axis].status & 0x400) == false)
                    {
                        GoHome.Instance.AxisHome[CardNum, Axis].Step = 20;     //重新搜索原点
                    }
                    break;

                //*********************************************************************************************************************
                case 170:     //offsetPos大于感应片的宽度
                    gts.GT_ClrSts(CardNum, Axis, (short)1);
                    Gg.AbsMotion(CardNum, Axis, System.Convert.ToDouble(Gg.GetPrfPosmm(CardNum, Axis) - offsetPos), vel);
                    GoHome.Instance.AxisHome[CardNum, Axis].Step = 180;
                    break;

                case 180:
                    gts.GT_ClrSts(CardNum, Axis, (short)1);
                    gts.GT_GetSts(CardNum, Axis, out GoHome.Instance.AxisHome[CardNum, Axis].status, (short)1, out temp_pClock);
                    if (System.Convert.ToBoolean(GoHome.Instance.AxisHome[CardNum, Axis].status & 0x400) == false)
                    {
                        GoHome.Instance.AxisHome[CardNum, Axis].Step = 20;     //重新搜索原点
                    }
                    break;

                //*********************************************************************************************************************
                case 200:     //offsetPos大于感应片的宽度
                    Gg.AbsMotion(CardNum, Axis, System.Convert.ToDouble(Gg.GetPrfPosmm(CardNum, Axis) + offsetPos), vel);
                    GoHome.Instance.AxisHome[CardNum, Axis].Step = 201;
                    break;

                case 201:
                    if (Gg.GetHomeDi(CardNum, Axis) == 0)     //判断是否在原点上
                    {
                        Gg.AbsMotion(CardNum, Axis, System.Convert.ToDouble(Gg.GetPrfPosmm(CardNum, Axis) + 1), vel);
                        GoHome.Instance.AxisHome[CardNum, Axis].oldtime = API.GetTickCount();
                        GoHome.Instance.AxisHome[CardNum, Axis].Step    = 210;
                    }
                    else
                    {
                        gts.GT_ClrSts(CardNum, Axis, (short)1);
                        gts.GT_GetSts(CardNum, Axis, out GoHome.Instance.AxisHome[CardNum, Axis].status, (short)1, out temp_pClock);
                        if (System.Convert.ToBoolean(GoHome.Instance.AxisHome[CardNum, Axis].status & 0x400) == false)
                        {
                            GoHome.Instance.AxisHome[CardNum, Axis].oldtime = API.GetTickCount();
                            GoHome.Instance.AxisHome[CardNum, Axis].Step    = 140;
                        }
                    }
                    break;

                case 210:
                    gts.GT_ClrSts(CardNum, Axis, (short)1);
                    gts.GT_GetSts(CardNum, Axis, out GoHome.Instance.AxisHome[CardNum, Axis].status, (short)1, out temp_pClock);
                    if (System.Convert.ToBoolean(GoHome.Instance.AxisHome[CardNum, Axis].status & 0x400) == false)
                    {
                        GoHome.Instance.AxisHome[CardNum, Axis].oldtime = API.GetTickCount();
                        GoHome.Instance.AxisHome[CardNum, Axis].Step    = 220;
                    }
                    break;

                case (short)220:
                    if (API.GetTickCount() - GoHome.Instance.AxisHome[CardNum, Axis].oldtime > 200)
                    {
                        if (Gg.GetHomeDi(CardNum, Axis) == 1)
                        {
                            GoHome.Instance.AxisHome[CardNum, Axis].Step = 140;
                        }
                        else
                        {
                            GoHome.Instance.AxisHome[CardNum, Axis].Step = 20;
                        }
                    }
                    break;
                }
            }
        }
Exemple #4
0
        public void HomeSub()
        {
            switch (StepHome)
            {
            case 10:
                Reset.State = true;
                AddList("设备初始化开始,请等待!");
                Gg.SetDo(0, Gg.OutPut0.载具真空吸1, 0);
                Gg.SetDo(0, Gg.OutPut0.载具真空吸2, 0);
                Gg.SetDo(0, Gg.OutPut0.载具真空吸3, 0);
                Gg.SetDo(0, Gg.OutPut0.载具真空吸4, 0);
                Gg.SetDo(0, Gg.OutPut0.载具破真空1, 0);
                Gg.SetDo(0, Gg.OutPut0.载具破真空2, 0);
                Gg.SetDo(0, Gg.OutPut0.载具破真空3, 0);
                Gg.SetDo(0, Gg.OutPut0.载具破真空4, 0);

                Gg.SetDo(0, Gg.OutPut0.保压站刹车继电器, 0);
                Gg.SetDo(0, Gg.OutPut0.警示蜂鸣器, 0);
                Gg.SetDo(0, Gg.OutPut0.装配站刹车继电器, 0);

                Gg.SetDo(0, Gg.OutPut1.取料吸嘴破真空, 0);
                Gg.SetDo(0, Gg.OutPut1.取料吸嘴真空吸, 0);

                Gg.SetExDo(0, 0, Gg.OutPut2.NG蜂鸣器, 0);
                Gg.SetExDo(0, 0, Gg.OutPut2.NG指示灯, 0);
                Gg.SetExDo(0, 0, Gg.OutPut2.OK指示灯, 0);
                Gg.SetExDo(0, 0, Gg.OutPut2.保压升降气缸, 0);
                Gg.SetExDo(0, 0, Gg.OutPut2.除底摸平移气缸, 0);
                Gg.SetExDo(0, 0, Gg.OutPut2.除底膜吸嘴气缸, 0);
                Gg.SetExDo(0, 0, Gg.OutPut2.检气缸, 0);
                Gg.SetExDo(0, 0, Gg.OutPut2.拉料无杆干气缸, 0);
                Gg.SetExDo(0, 0, Gg.OutPut2.片料夹紧气缸右, 0);
                Gg.SetExDo(0, 0, Gg.OutPut2.片料夹紧气缸左, 0);
                Gg.SetExDo(0, 0, Gg.OutPut2.取底膜破真空, 0);
                Gg.SetExDo(0, 0, Gg.OutPut2.取底膜真空吸, 0);
                Gg.SetExDo(0, 0, Gg.OutPut2.取片料破真空, 0);
                Gg.SetExDo(0, 0, Gg.OutPut2.取片料真空吸, 0);
                Gg.SetExDo(0, 0, Gg.OutPut2.撕摸升降气缸, 0);

                ////界面
                Frm_Main.fMain.Btn_Stop.Enabled       = false;
                Frm_Main.fMain.Btn_Pause.Enabled      = false;
                Frm_Main.fMain.Btn_Stop.BZ_BackColor  = PVar.BZColor_UnselectedBtn;
                Frm_Main.fMain.Btn_Pause.BZ_BackColor = PVar.BZColor_UnselectedBtn;
                Frm_ProgressBar.IsShowProgresBar(true);
                InitTimeOut = API.GetTickCount();
                StepHome    = 20;
                break;

            case 20:
                Frm_ProgressBar.SetValueProgressBar(10);         //初始化进度条的进度更新显示
                if (Gg.GetDi(0, Gg.InPut0.载具真空检测1) == 0 && Gg.GetDi(0, Gg.InPut0.载具真空检测2) == 0 &&
                    Gg.GetDi(0, Gg.InPut0.载具真空检测3) == 0 && Gg.GetDi(0, Gg.InPut0.载具真空检测4) == 0 &&
                    Gg.GetExDi(0, Gg.InPut2.撕摸升降气缸缩回) == 1 && Gg.GetExDi(0, Gg.InPut2.撕摸升降气缸伸出) == 0
                    //&& Gg.GetExDi(0, Gg.InPut2.复检气缸缩回) == 1 && Gg.GetExDi(0, Gg.InPut2.复检气缸伸出) == 0
                    && Gg.GetExDi(0, Gg.InPut2.保压升降气缸缩回) == 1 && Gg.GetExDi(0, Gg.InPut2.保压升降气缸伸出) == 0 &&
                    Gg.GetExDi(0, Gg.InPut2.除底摸平移气缸缩回) == 1 && Gg.GetExDi(0, Gg.InPut2.除底摸平移气缸伸出) == 0 &&
                    Gg.GetExDi(0, Gg.InPut2.除底膜吸嘴气缸缩回) == 1 && Gg.GetExDi(0, Gg.InPut2.除底膜吸嘴气缸伸出) == 0)
                {
                    InitTimeOut = API.GetTickCount();
                    StepHome    = 30;
                }

                if (API.GetTickCount() - InitTimeOut > 2000)
                {
                    if (Gg.GetDi(0, Gg.InPut0.载具真空检测1) == 1)
                    {
                        AddList("1#载具真空检测1异常,请检查!");
                        ShowList("1#载具真空检测1异常,请检查!");
                    }
                    if (Gg.GetDi(0, Gg.InPut0.载具真空检测2) == 1)
                    {
                        AddList("2#载具真空检测2异常,请检查!");
                        ShowList("2#载具真空检测2异常,请检查!");
                    }
                    if (Gg.GetDi(0, Gg.InPut0.载具真空检测3) == 1)
                    {
                        AddList("3#载具真空检测3异常,请检查!");
                        ShowList("3#载具真空检测3异常,请检查!");
                    }
                    if (Gg.GetDi(0, Gg.InPut0.载具真空检测4) == 1)
                    {
                        AddList("4#载具真空检测3异常,请检查!");
                        ShowList("4#载具真空检测3异常,请检查!");
                    }
                    if (Gg.GetExDi(0, Gg.InPut2.撕摸升降气缸缩回) == 0 || Gg.GetExDi(0, Gg.InPut2.撕摸升降气缸伸出) == 1)
                    {
                        AddList("撕摸升降气缸缩回信号异常,请检查!");
                        ShowList("撕摸升降气缸缩回信号异常,请检查!");
                    }

                    //if (Gg.GetExDi(0, Gg.InPut2.复检气缸缩回) == 0 || Gg.GetExDi(0, Gg.InPut2.复检气缸伸出) == 1)
                    //    {
                    //    AddList("复检气缸缩回信号异常,请检查!");
                    //    ShowList("复检气缸缩回信号异常,请检查!");
                    //    }

                    if (Gg.GetExDi(0, Gg.InPut2.保压升降气缸缩回) == 0 || Gg.GetExDi(0, Gg.InPut2.保压升降气缸伸出) == 1)
                    {
                        AddList("保压升降气缸缩回信号异常,请检查!");
                        ShowList("保压升降气缸缩回信号异常,请检查!");
                    }

                    if (Gg.GetExDi(0, Gg.InPut2.除底摸平移气缸缩回) == 0 || Gg.GetExDi(0, Gg.InPut2.除底摸平移气缸伸出) == 1)
                    {
                        AddList("除底摸平移气缸缩回信号异常,请检查!");
                        ShowList("除底摸平移气缸缩回信号异常,请检查!");
                    }

                    if (Gg.GetExDi(0, Gg.InPut2.除底膜吸嘴气缸缩回) == 0 || Gg.GetExDi(0, Gg.InPut2.除底膜吸嘴气缸伸出) == 1)
                    {
                        AddList("除底膜吸嘴气缸缩回信号异常,请检查!");
                        ShowList("除底膜吸嘴气缸缩回信号异常,请检查!");
                    }

                    StepHome = 1000;
                }
                break;

            case 30:
                AddList("组装Z轴开始回原点…");
                AddList("保压Z轴开始回原点…");
                GoHome.Instance.AxisHome[0, 3].Result = false;
                GoHome.Instance.AxisHome[0, 8].Result = false;
                GoHome.Instance.AxisHome[0, 3].Enable = true;
                GoHome.Instance.AxisHome[0, 8].Enable = true;
                GoHome.Instance.AxisHome[0, 3].Step   = 10;
                GoHome.Instance.AxisHome[0, 8].Step   = 10;
                InitTimeOut = API.GetTickCount();
                Frm_ProgressBar.SetValueProgressBar(30);
                StepHome = 40;
                break;

            case 40:
                GotoHome(0, 3, 20, -1000, 10, 1, 10);
                GotoHome(0, 8, 20, -1000, 10, 1, 10);
                if (GoHome.Instance.AxisHome[0, 3].Step == 0 && GoHome.Instance.AxisHome[0, 3].Enable)
                {
                    GoHome.Instance.AxisHome[0, 3].Enable = false;
                    if (GoHome.Instance.AxisHome[0, 3].Result)
                    {
                        AddList("组装Z轴回原点成功!");
                    }
                    else
                    {
                        AddList("组装Z轴回原点失败!");
                        ShowList("组装Z轴回原点失败!");
                        StepHome = 1000;
                    }
                }

                if (GoHome.Instance.AxisHome[0, 8].Step == 0 && GoHome.Instance.AxisHome[0, 8].Enable)
                {
                    GoHome.Instance.AxisHome[0, 8].Enable = false;
                    if (GoHome.Instance.AxisHome[0, 8].Result)
                    {
                        AddList("保压Z轴回原点成功!");
                    }
                    else
                    {
                        AddList("保压Z轴回原点失败!");
                        ShowList("保压Z轴回原点失败!");
                        StepHome = 1000;
                    }
                }

                if (GoHome.Instance.AxisHome[0, 3].Result && GoHome.Instance.AxisHome[0, 8].Result)
                {
                    Frm_ProgressBar.SetValueProgressBar(50);
                    InitTimeOut = API.GetTickCount();
                    StepHome    = 50;
                }
                break;

            case 50:
                AddList("组装X轴开始回原点…");
                AddList("组装Y轴开始回原点…");
                AddList("组装R轴开始回原点…");
                GoHome.Instance.AxisHome[0, 1].Result = false;
                GoHome.Instance.AxisHome[0, 2].Result = false;
                GoHome.Instance.AxisHome[0, 4].Result = false;
                GoHome.Instance.AxisHome[0, 1].Enable = true;
                GoHome.Instance.AxisHome[0, 2].Enable = true;
                GoHome.Instance.AxisHome[0, 4].Enable = true;
                GoHome.Instance.AxisHome[0, 1].Step   = 10;
                GoHome.Instance.AxisHome[0, 2].Step   = 10;
                GoHome.Instance.AxisHome[0, 4].Step   = 10;
                InitTimeOut = API.GetTickCount();
                StepHome    = 60;
                break;

            case 60:
                GotoHome(0, 1, 20, -1000, 10, 1, 10);
                GotoHome(0, 2, 20, -1000, 10, 1, 10);
                GotoHome(0, 4, 20, -1000, 10, 1, 10);

                if (GoHome.Instance.AxisHome[0, 1].Step == 0 && GoHome.Instance.AxisHome[0, 1].Enable)
                {
                    GoHome.Instance.AxisHome[0, 1].Enable = false;
                    if (GoHome.Instance.AxisHome[0, 1].Result)
                    {
                        AddList("组装X轴回原点成功!");
                    }
                    else
                    {
                        AddList("组装X轴回原点失败!");
                        ShowList("组装X轴回原点失败!");
                        StepHome = 1000;
                    }
                }

                if (GoHome.Instance.AxisHome[0, 2].Step == 0 && GoHome.Instance.AxisHome[0, 2].Enable)
                {
                    GoHome.Instance.AxisHome[0, 2].Enable = false;
                    if (GoHome.Instance.AxisHome[0, 2].Result)
                    {
                        AddList("组装Y轴回原点成功!");
                    }
                    else
                    {
                        AddList("组装Y轴回原点失败!");
                        ShowList("组装Y轴回原点失败!");
                        StepHome = 1000;
                    }
                }

                if (GoHome.Instance.AxisHome[0, 4].Step == 0 && GoHome.Instance.AxisHome[0, 4].Enable)
                {
                    GoHome.Instance.AxisHome[0, 4].Enable = false;
                    if (GoHome.Instance.AxisHome[0, 4].Result)
                    {
                        AddList("组装R轴回原点成功!");
                    }
                    else
                    {
                        AddList("组装R轴回原点失败!");
                        ShowList("组装R轴回原点失败!");
                        StepHome = 1000;
                    }
                }

                if (GoHome.Instance.AxisHome[0, 1].Result && GoHome.Instance.AxisHome[0, 2].Result && GoHome.Instance.AxisHome[0, 4].Result)
                {
                    Frm_ProgressBar.SetValueProgressBar(70);
                    InitTimeOut = API.GetTickCount();
                    StepHome    = 70;
                }
                break;

            case 70:
                AddList("上料Z轴开始回原点…");
                AddList("平移Y轴开始回原点…");
                AddList("拉料Z轴开始回原点…");
                GoHome.Instance.AxisHome[0, 5].Result = false;
                GoHome.Instance.AxisHome[0, 6].Result = false;
                GoHome.Instance.AxisHome[0, 7].Result = false;
                GoHome.Instance.AxisHome[0, 5].Enable = true;
                GoHome.Instance.AxisHome[0, 6].Enable = true;
                GoHome.Instance.AxisHome[0, 7].Enable = true;
                GoHome.Instance.AxisHome[0, 5].Step   = 10;
                GoHome.Instance.AxisHome[0, 6].Step   = 10;
                GoHome.Instance.AxisHome[0, 7].Step   = 10;
                InitTimeOut = API.GetTickCount();
                StepHome    = 80;
                break;

            case 80:
                GotoHome(0, 5, 20, -1000, 10, 1, 10);
                GotoHome(0, 6, 20, -1000, 10, 1, 30);
                GotoHome(0, 7, 20, -1000, 10, 1, 10);

                if (GoHome.Instance.AxisHome[0, 5].Step == 0 && GoHome.Instance.AxisHome[0, 5].Enable)
                {
                    GoHome.Instance.AxisHome[0, 5].Enable = false;
                    if (GoHome.Instance.AxisHome[0, 5].Result)
                    {
                        AddList("上料Z轴回原点成功!");
                    }
                    else
                    {
                        AddList("上料Z轴回原点失败!");
                        ShowList("上料Z轴回原点失败!");
                        StepHome = 1000;
                    }
                }

                if (GoHome.Instance.AxisHome[0, 6].Step == 0 && GoHome.Instance.AxisHome[0, 6].Enable)
                {
                    GoHome.Instance.AxisHome[0, 6].Enable = false;
                    if (GoHome.Instance.AxisHome[0, 6].Result)
                    {
                        AddList("平移Y轴回原点成功!");
                    }
                    else
                    {
                        AddList("平移Y轴回原点失败!");
                        ShowList("平移Y轴回原点失败!");
                        StepHome = 1000;
                    }
                }

                if (GoHome.Instance.AxisHome[0, 7].Step == 0 && GoHome.Instance.AxisHome[0, 7].Enable)
                {
                    GoHome.Instance.AxisHome[0, 7].Enable = false;
                    if (GoHome.Instance.AxisHome[0, 7].Result)
                    {
                        AddList("拉料Z轴回原点成功!");
                    }
                    else
                    {
                        AddList("拉料Z轴回原点失败!");
                        ShowList("拉料Z轴回原点失败!");
                        StepHome = 1000;
                    }
                }

                if (GoHome.Instance.AxisHome[0, 5].Result && GoHome.Instance.AxisHome[0, 6].Result && GoHome.Instance.AxisHome[0, 7].Result)
                {
                    Frm_ProgressBar.SetValueProgressBar(80);
                    InitTimeOut = API.GetTickCount();
                    StepHome    = 90;
                }
                break;

            case 90:
                AddList("转盘R轴开始回原点…");
                GoHome.Instance.AxisHome[1, 2].Result = false;
                GoHome.Instance.AxisHome[1, 1].Enable = true;
                GoHome.Instance.AxisHome[1, 1].Step   = 10;
                InitTimeOut = API.GetTickCount();
                StepHome    = 100;
                break;

            case 100:
                GotoHome(1, 1, 30, -360, 5, mFunction.Pos.TeachAxis1[2, 0], 30);

                if (GoHome.Instance.AxisHome[1, 1].Step == 0 && GoHome.Instance.AxisHome[1, 1].Enable)
                {
                    GoHome.Instance.AxisHome[1, 1].Enable = false;
                    if (GoHome.Instance.AxisHome[1, 1].Result)
                    {
                        AddList("转盘R轴回原点成功!");
                    }
                    else
                    {
                        AddList("转盘R轴回原点失败!");
                        ShowList("转盘R轴回原点失败!");
                        StepHome = 1000;
                    }
                }

                if (GoHome.Instance.AxisHome[1, 1].Result)
                {
                    Frm_ProgressBar.SetValueProgressBar(90);
                    InitTimeOut = API.GetTickCount();
                    StepHome    = 150;
                }
                break;

            case 150:
                AddList("各轴开始回待机位置…");
                //组装站
                Gg.AbsMotion(0, 1, mFunction.Pos.TeachAxis1[0, 0], 20);
                Gg.AbsMotion(0, 2, mFunction.Pos.TeachAxis2[0, 0], 20);
                Gg.AbsMotion(0, 3, mFunction.Pos.TeachAxis3[0, 0], 20);
                Gg.AbsMotion(0, 4, mFunction.Pos.TeachAxis4[0, 0], 20);

                //保压站
                Gg.AbsMotion(0, 8, mFunction.Pos.TeachAxis1[1, 0], 20);    //保压初始位置
                Tools.AxisTmplPos[1, 1] = 0;

                //供料
                Gg.AbsMotion(0, 5, mFunction.Pos.TeachAxis2[3, 4], 50);    //供料起始位置
                Gg.AbsMotion(0, 6, mFunction.Pos.TeachAxis1[3, 6], 100);   //避让位置
                Gg.AbsMotion(0, 7, mFunction.Pos.TeachAxis3[3, 7], 50);    //换料位置

                InitTimeOut = API.GetTickCount();
                StepHome    = 160;
                break;

            case 160:
                if (Gg.ZSPD(0, 1) && Gg.ZSPD(0, 2) && Gg.ZSPD(0, 3) && Gg.ZSPD(0, 4) && Gg.ZSPD(0, 5) && Gg.ZSPD(0, 6) && Gg.ZSPD(0, 7) && Gg.ZSPD(0, 8) && Gg.ZSPD(1, 1))
                {
                    AddList("各轴回待机位置完成!");
                    InitTimeOut = API.GetTickCount();
                    StepHome    = 170;
                }
                else
                {
                    if ((API.GetTickCount() - InitTimeOut) > 10000)
                    {
                        if (Gg.ZSPD(0, 1) == false)
                        {
                            AddList("组装X轴回待机位置失败!");
                            ShowList("组装X轴回待机位置失败!");
                        }
                        if (Gg.ZSPD(0, 2) == false)
                        {
                            AddList("组装Y轴回待机位置失败!");
                            ShowList("组装Y轴回待机位置失败!");
                        }
                        if (Gg.ZSPD(0, 3) == false)
                        {
                            AddList("组装Z轴回待机位置失败!");
                            ShowList("组装Z轴回待机位置失败!");
                        }
                        if (Gg.ZSPD(0, 4) == false)
                        {
                            AddList("组装R轴回待机位置失败!");
                            ShowList("组装R轴回待机位置失败!");
                        }
                        if (Gg.ZSPD(0, 5) == false)
                        {
                            AddList("上料Z轴回待机位置失败!");
                            ShowList("上料Z轴回待机位置失败!");
                        }
                        if (Gg.ZSPD(0, 6) == false)
                        {
                            AddList("平移Y轴回待机位置失败!");
                            ShowList("平移Y轴回待机位置失败!");
                        }
                        if (Gg.ZSPD(0, 7) == false)
                        {
                            AddList("拉料Z轴回待机位置失败!");
                            ShowList("拉料Z轴回待机位置失败!");
                        }
                        if (Gg.ZSPD(0, 8) == false)
                        {
                            AddList("保压Z轴回待机位置失败!");
                            ShowList("保压Z轴回待机位置失败!");
                        }
                        if (Gg.ZSPD(1, 1) == false)
                        {
                            AddList("转盘R轴回待机位置失败!");
                            ShowList("转盘R轴回待机位置失败!");
                        }

                        StepHome = 1000;
                    }
                }
                break;

            case 170:
                if (API.GetTickCount() - InitTimeOut > 500)
                {
                    //gts.GT_SetPrfPos(1, 1, 0); //规划器置零
                    //gts.GT_SetEncPos(1, 1, 0); //编码器置零
                    //gts.GT_SynchAxisPos(1, 1 << 0); //将当前轴进行位置同步
                    InitTimeOut = API.GetTickCount();
                    StepHome    = 800;
                }
                break;

            case 800:
                AddList("初始化完成");
                ShowList("初始化完成");
                PVar.LampStatus    = 20;
                PVar.Stop_Flag     = true;
                PVar.AutoRunFlag   = false;
                PVar.MacHold       = false;
                PVar.CPKDoneCounts = 0;
                PVar.WorkMode      = 0;

                Frm_Main.fMain.Panel_CPK.Visible = false;
                Frm_Engineering.fEngineering.Btn_SelectMaterial.Enabled = true;

                //按钮初始化
                Frm_Main.fMain.Btn_Start.Enabled      = true;
                Frm_Main.fMain.Btn_Pause.Enabled      = false;
                Frm_Main.fMain.Btn_Stop.Enabled       = true;
                Frm_Main.fMain.Btn_Start.BZ_BackColor = PVar.BZColor_SelectedBtn;       //'主页面初始化和自动运行按钮
                Frm_Main.fMain.Btn_Pause.BZ_BackColor = PVar.BZColor_UnselectedBtn;
                Frm_Main.fMain.Btn_Stop.BZ_BackColor  = PVar.BZColor_UnselectedBtn;

                Frm_Engineering.fEngineering.TabPage3.Parent = Frm_Engineering.fEngineering.TabControl1;
                Frm_Engineering.fEngineering.TabPage4.Parent = Frm_Engineering.fEngineering.TabControl1;

                Frm_ProgressBar.IsShowProgresBar(false);         //'初始化进度条显示
                Frm_Engineering.fEngineering.Home_Timer.Enabled = false;
                for (int i = 0; i <= 4; i++)
                {
                    PVar.Sta_Work[i].State     = false;
                    PVar.Sta_Work[i].Result    = false;
                    PVar.Sta_Work[i].IsHaveHSG = false;
                    PVar.Sta_Work[i].Step      = 0;
                }
                Mod_ErrorCode.CheckSystemTimeStep = 0;
                GoHome.Instance.Reset.State       = false;
                GoHome.Instance.Reset.Result      = true;
                StepHome = 0;
                break;

            case 1000:
                PVar.LampStatus = 10;
                PVar.MacHold    = false;
                PVar.Stop_Flag  = true;
                Frm_Engineering.fEngineering.Btn_SelectMaterial.Enabled = false;
                //按钮初始化
                Frm_Main.fMain.Btn_Start.Enabled      = true;
                Frm_Main.fMain.Btn_Pause.Enabled      = false;
                Frm_Main.fMain.Btn_Stop.Enabled       = false;
                Frm_Main.fMain.Btn_Start.BZ_BackColor = PVar.BZColor_UnselectedBtn;       //主页面初始化和自动运行按钮
                Frm_Main.fMain.Btn_Pause.BZ_BackColor = PVar.BZColor_UnselectedBtn;
                Frm_Main.fMain.Btn_Stop.BZ_BackColor  = PVar.BZColor_SelectedEndBtn;

                Frm_Engineering.fEngineering.Home_Timer.Enabled = false;
                Frm_ProgressBar.IsShowProgresBar(false);         //初始化进度条显示
                GoHome.Instance.Reset.Result = false;
                GoHome.Instance.Reset.State  = false;
                StepHome = 0;
                break;
            }
        }
Exemple #5
0
        public static void AutoRun(ref PVar.WorkType StaWork)
        {
            try
            {
                switch (StaWork.Step)
                {
                case 10:
                    if (PVar.Stop_Flag == false)
                    {
                        PVar.Sta_Work[1].IsHaveHSG = false;
                        StaWork.Result             = false;
                        StaWork.State = false;
                        StaWork.Step  = 20;
                        //PVar.Sta_Work[1].Step = 20;
                    }
                    break;

                case 20:
                    if (PVar.ParList.CheckSts[17] == false)
                    {
                        if (StaWork.State == false && Gg.GetDi(0, Gg.InPut0.放料光纤感应) == 1 && Gg.GetDi(0, Gg.InPut0.安全光幕) == 0)
                        {
                            AddList("光幕启动开始!");
                            TimeOut      = API.GetTickCount();
                            StaWork.Step = 30;
                        }
                        else
                        {
                            if (API.GetTickCount() - TimeOut > 1000)
                            {
                                TimeOut      = API.GetTickCount();
                                StaWork.Step = 10;
                            }
                        }
                    }
                    else
                    {
                        if (StaWork.State == false)
                        {
                            AddList("光幕启动开始!");
                            TimeOut      = API.GetTickCount();
                            StaWork.Step = 30;
                        }
                        else
                        {
                            if (API.GetTickCount() - TimeOut > 1000)
                            {
                                TimeOut      = API.GetTickCount();
                                StaWork.Step = 10;
                            }
                        }
                    }
                    break;


                case 30:
                    if (PVar.ParList.CheckSts[17] == false)
                    {
                        if (Gg.GetDi(0, Gg.InPut0.放料光纤感应) == 1 && Gg.GetDi(0, Gg.InPut0.安全光幕) == 1)
                        {
                            if (BVar.ProductTakeOut)
                            {
                                AddList("启动OK!");

                                //根据载具编号打开相对应的真空吸
                                BVar.OpenedVacumeNo = OpenFixtureVocume();
                                TimeOut             = API.GetTickCount();
                                StaWork.Step        = 40;
                            }
                            else
                            {
                                AddList("请先取出产品!");
                                ShowList("请先取出产品!");
                                //蜂鸣器
                                PVar.Ring_EN = true;
                                TimeOut      = API.GetTickCount();
                                StaWork.Step = 1000;
                            }
                        }
                        else
                        {
                            if (Gg.GetDi(0, Gg.InPut0.放料光纤感应) == 0 && Gg.GetDi(0, Gg.InPut0.安全光幕) == 1)
                            {
                                TimeOut      = API.GetTickCount();
                                StaWork.Step = 10;
                            }
                        }
                    }
                    else
                    {
                        AddList("启动OK!");
                        //根据载具编号打开相对应的真空吸
                        //BVar.OpenedVacumeNo = OpenFixtureVocume();
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 50;
                    }
                    break;

                case 40:
                    if (API.GetTickCount() - TimeOut > 1000)    //延时1秒,等待真空吸信号
                    {
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 50;
                    }
                    break;

                case 50:
                    if (PVar.ParList.CheckSts[17] == false)
                    {
                        if (Gg.GetDi(0, BVar.OpenedVacumeNo + 5) == 1)    //判断真空吸信号
                        {
                            TimeOut      = API.GetTickCount();
                            StaWork.Step = 60;
                        }
                        else
                        {
                            if (API.GetTickCount() - TimeOut > 2000)
                            {
                                AddList("HSG真空吸没达到检测值,请检查产品是否放好!");
                                ShowList("HSG真空吸没达到检测值,请检查产品是否放好!");
                                TimeOut      = API.GetTickCount();
                                StaWork.Step = 1000;
                            }
                        }
                    }
                    else
                    {
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 60;
                    }
                    break;

                case 60:    //等待所有工位结束工作
                    if (PVar.ParList.CheckSts[17] == false)
                    {
                        if (PVar.Stop_Flag == false)
                        {
                            if (Gg.GetDi(0, Gg.InPut0.安全光幕) == 1 && Gg.GetDi(0, BVar.OpenedVacumeNo + 5) == 1 && PVar.Sta_Work[2].State == false && PVar.Sta_Work[3].State == false && PVar.Sta_Work[4].State == false)
                            {
                                StaWork.State = true;
                                CT_Start      = true;
                                PVar.Sta_Work[1].IsHaveHSG = true;
                                Frm_Engineering.fEngineering.OvalShape_Sta0.BackColor = Color.DarkOrange;
                                Frm_Engineering.fEngineering.Chk_StaRound.BackColor   = Color.DarkOrange;
                                if (Gg.GetPrfPos(1, 1) > 300)       //int类型最大值为2^31-1=2147483647
                                {
                                    gts.GT_SetPrfPos(1, 1, 0);      //规划器置零
                                    gts.GT_SetEncPos(1, 1, 0);      //编码器置零
                                    gts.GT_SynchAxisPos(1, 1 << 0); //将当前轴进行位置同步
                                }

                                AddList("转盘开始转动!");
                                TimeOut      = API.GetTickCount();
                                StaWork.Step = 70;
                            }
                            else
                            {
                                if (Gg.GetDi(0, BVar.OpenedVacumeNo + 5) == 0)    //判断真空吸信号
                                {
                                    AddList("HSG真空吸力异常,启动失败,请重新启动!");
                                    ShowList("HSG真空吸力异常,启动失败,请重新启动!");
                                    TimeOut      = API.GetTickCount();
                                    StaWork.Step = 1000;
                                }
                            }
                        }
                        else
                        {
                            TimeOut      = API.GetTickCount();
                            StaWork.Step = 1000;
                        }
                    }
                    else
                    {
                        if (PVar.Stop_Flag == false)
                        {
                            if (Gg.GetDi(0, Gg.InPut0.安全光幕) == 1 && PVar.Sta_Work[2].State == false && PVar.Sta_Work[3].State == false && PVar.Sta_Work[4].State == false)
                            {
                                StaWork.State = true;
                                CT_Start      = true;
                                PVar.Sta_Work[1].IsHaveHSG = true;
                                Frm_Engineering.fEngineering.OvalShape_Sta0.BackColor = Color.DarkOrange;
                                Frm_Engineering.fEngineering.Chk_StaRound.BackColor   = Color.DarkOrange;
                                if (Gg.GetPrfPosmm(1, 1) > 300)     //int类型最大值为2^31-1=2147483647
                                {
                                    gts.GT_SetPrfPos(1, 1, 0);      //规划器置零
                                    gts.GT_SetEncPos(1, 1, 0);      //编码器置零
                                    gts.GT_SynchAxisPos(1, 1 << 0); //将当前轴进行位置同步
                                }

                                AddList("转盘开始转动!");
                                TimeOut      = API.GetTickCount();
                                StaWork.Step = 70;
                            }
                        }
                        else
                        {
                            TimeOut      = API.GetTickCount();
                            StaWork.Step = 1000;
                        }
                    }
                    break;

                case 70:
                    StationR_State();
                    Gg.StepMotion(1, 1, PVar.ParAxis.Speed[9], 90, "+");
                    TimeOut      = API.GetTickCount();
                    StaWork.Step = 80;
                    break;

                case 80:
                    if (Gg.ZSPD(1, 1))
                    {
                        Frm_Engineering.fEngineering.OvalShape_Sta0.BackColor = Color.FromArgb(192, 255, 192);
                        Frm_Engineering.fEngineering.Chk_StaRound.BackColor   = Color.FromArgb(192, 255, 192);
                        AddList("转盘转动到位!");
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 90;
                    }
                    else
                    {
                        if (API.GetTickCount() - TimeOut > 10000)
                        {
                            AddList("转盘转动超时!");
                            ShowList("转盘转动超时!");
                            TimeOut      = API.GetTickCount();
                            StaWork.Step = 10000;
                        }
                    }
                    break;

                case 90:
                    TimeOut      = API.GetTickCount();
                    StaWork.Step = 800;
                    break;

                case 800:
                    StaWork.Result = true;
                    StaWork.State  = false;
                    StaWork.Step   = 10;
                    break;

                case 1000:
                    StaWork.Result = false;
                    StaWork.State  = false;
                    StaWork.Step   = 10;
                    break;

                //严重错误,急停处理
                case 10000:
                    Frm_Engineering.fEngineering.MacStop();
                    break;
                }
            }
            catch (Exception exc)
            {
                string Error_Str  = "";
                string Error_Str1 = "";
                Frm_Engineering.fEngineering.MacStop();
                MessageBox.Show(exc.Message);
                Error_Str  = PVar.BZ_LogPath + DateTime.Now.ToString("yyyyMMdd") + "\\" + DateTime.Now.ToString("yyyyMMdd") + "_代码异常记录" + ".txt";
                Error_Str1 = "\r\n" + "※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※" + "\r\n" +
                             "[" + DateTime.Now.ToString("HH:mm:ss") + "]" + "\r\n" + exc.ToString();
                FileRw.WriteDattxt(Error_Str, Error_Str1);
            }
        }
Exemple #6
0
        public static void AutoRun(ref PVar.WorkType StaWork)
        {
            try
            {
                switch (StaWork.Step)
                {
                case 10:
                    if (PVar.Stop_Flag == false)
                    {
                        StaWork.State = false;
                        TimeOut       = API.GetTickCount();
                        //StaWork.Step = 20;
                    }
                    break;

                case 20:
                    //本站工作状态,工站使能,转盘工作状态,本站是否有产品
                    if (StaWork.State == false && StaWork.Enable && StaWork.Result && PVar.Sta_Work[1].State == false && PVar.Sta_Work[4].IsHaveHSG)
                    {
                        StaWork.State  = true;
                        StaWork.Result = false;
                        Gg.SetExDo(0, 0, Gg.OutPut2.检气缸, 0);
                        AddList("复检开始开始!");
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 30;
                    }
                    else
                    {
                        StaWork.Step = 10;
                    }
                    break;

                case 30:
                    if (Gg.GetExDi(0, Gg.InPut2.检气缸缩回) == 1 && Gg.GetExDi(0, Gg.InPut2.检气缸伸出) == 0)
                    {
                        //AddList("复检气缸复位OK!");
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 40;
                    }
                    else
                    {
                        if (API.GetTickCount() - TimeOut > 2000)
                        {
                            AddList("复检气缸缩回信号异常!");
                            ShowList("复检气缸缩回信号异常!");
                            TimeOut      = API.GetTickCount();
                            StaWork.Step = 1000;
                        }
                    }
                    break;

                case 40:
                    if (API.GetTickCount() - TimeOut > 1000)
                    {
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 50;
                    }
                    break;

                case 50:
                    sRtn = Command.TCP_CCD2_Send(Command.检角度);
                    if (sRtn == 1)     //命令发送成功
                    {
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 60;
                    }
                    else if (sRtn == 2)     //网络链接异常
                    {
                        AddList("网络链接异常!");
                        ShowList("网络链接异常!");
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 1000;
                    }
                    else
                    {
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 1000;
                    }
                    break;


                case 60:
                    if (Command.CCD2_Resule && PVar.CCD2_Data[0] == Command.检角度)
                    {
                        AddList("复检角度数据收到!");
                        CCD_Vale[1].X     = Convert.ToDouble(PVar.CCD2_Data[1]);
                        CCD_Vale[1].Y     = Convert.ToDouble(PVar.CCD2_Data[2]);
                        CCD_Vale[1].T     = Convert.ToDouble(PVar.CCD2_Data[3]);
                        CCD_Vale[1].CC    = Convert.ToDouble(PVar.CCD2_Data[4]);
                        CCD_Vale[1].Judge = Convert.ToDouble(PVar.CCD2_Data[5]);

                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 70;
                    }
                    else
                    {
                        if (API.GetTickCount() - TimeOut > 2000)
                        {
                            AddList("等待复检角度数据超时!");
                            TimeOut      = API.GetTickCount();
                            StaWork.Step = 1000;
                        }
                    }
                    break;

                case 70:
                    if (CCD_Vale[1].Judge == 0)
                    {
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 80;
                    }
                    else if (CCD_Vale[1].Judge == 1)
                    {
                        AddList("复检角度模型搜索错误!");
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 1000;
                    }
                    else
                    {
                        AddList("CCD复检角度其他异常!");
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 1000;
                    }
                    break;

                case 80:
                    Gg.SetExDo(0, 0, Gg.OutPut2.检气缸, 1);
                    TimeOut      = API.GetTickCount();
                    StaWork.Step = 90;
                    break;

                case 90:
                    if (Gg.GetExDi(0, Gg.InPut2.检气缸缩回) == 0 && Gg.GetExDi(0, Gg.InPut2.检气缸伸出) == 1)
                    {
                        AddList("复检气缸伸出OK!");
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 100;
                    }
                    else
                    {
                        if (API.GetTickCount() - TimeOut > 4000)
                        {
                            AddList("复检气缸伸出信号异常!");
                            ShowList("复检气缸伸出信号异常!");
                            TimeOut      = API.GetTickCount();
                            StaWork.Step = 1000;
                        }
                    }
                    break;

                case 100:
                    if (API.GetTickCount() - TimeOut > 1000)
                    {
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 110;
                    }
                    break;

                case 110:
                    sRtn = Command.TCP_CCD2_Send(Command.检同心度);
                    if (sRtn == 1)     //命令发送成功
                    {
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 120;
                    }
                    else if (sRtn == 2)     //网络链接异常
                    {
                        AddList("网络链接异常!");
                        ShowList("网络链接异常!");
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 1000;
                    }
                    else
                    {
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 1000;
                    }
                    break;


                case 120:
                    if (Command.CCD2_Resule && PVar.CCD2_Data[0] == Command.检同心度)
                    {
                        AddList("复检同心度数据收到!");
                        CCD_Vale[2].X     = Convert.ToDouble(PVar.CCD2_Data[1]);
                        CCD_Vale[2].Y     = Convert.ToDouble(PVar.CCD2_Data[2]);
                        CCD_Vale[2].T     = Convert.ToDouble(PVar.CCD2_Data[3]);
                        CCD_Vale[2].CC    = Convert.ToDouble(PVar.CCD2_Data[4]);
                        CCD_Vale[2].Judge = Convert.ToDouble(PVar.CCD2_Data[5]);

                        if (CCD_Vale[2].CC <= 0.05 && CCD_Vale[2].T <= 1)
                        {
                            BVar.ProData[4, 30] = "OK";
                        }
                        else
                        {
                            BVar.ProData[4, 30] = "NG";
                        }
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 130;
                    }
                    else
                    {
                        if (API.GetTickCount() - TimeOut > 2000)
                        {
                            AddList("等待复检同心度数据超时!");
                            TimeOut      = API.GetTickCount();
                            StaWork.Step = 1000;
                        }
                    }
                    break;

                case 140:
                    if (CCD_Vale[2].Judge == 0)
                    {
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 150;
                    }
                    else if (CCD_Vale[2].Judge == 1)
                    {
                        AddList("复检角度模型搜索错误!");
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 1000;
                    }
                    else
                    {
                        AddList("CCD复检角度其他异常!");
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 1000;
                    }
                    break;

                case 150:
                    Gg.SetExDo(0, 0, Gg.OutPut2.检气缸, 0);
                    TimeOut      = API.GetTickCount();
                    StaWork.Step = 300;
                    break;

                ////复检数据处理
                case 300:
                    if (BVar.ProData[4, 30] == "OK")
                    {
                        StaWork.Result = true;
                        Frm_Engineering.fEngineering.Label_NG_OK.Text                 = "OK";
                        Frm_Production.fProduction.DRB_YieldRetest.BZ_ResultText      = "OK";
                        Frm_Production.fProduction.DRB_YieldRetest.BZ_ResultBackColor = Color.FromArgb(111, 192, 64);
                        Gg.SetExDo(0, 0, Gg.OutPut2.OK指示灯, 1);
                        Gg.SetExDo(0, 0, Gg.OutPut2.NG指示灯, 0);
                        //Gg.SetExDo(0, 0, Gg.OutPut2.NG蜂鸣器, 0);
                    }
                    else
                    {
                        Frm_Engineering.fEngineering.Label_NG_OK.Text                 = "NG";
                        Frm_Production.fProduction.DRB_YieldRetest.BZ_ResultText      = "NG";
                        Frm_Production.fProduction.DRB_YieldRetest.BZ_ResultBackColor = Color.FromArgb(200, 37, 6);
                        Gg.SetExDo(0, 0, Gg.OutPut2.OK指示灯, 0);
                        Gg.SetExDo(0, 0, Gg.OutPut2.NG指示灯, 1);
                        //Gg.SetExDo(0, 0, Gg.OutPut2.NG蜂鸣器, 0);
                        PVar.Ring_EN = true;
                    }
                    Write_FinalData();
                    TimeOut      = API.GetTickCount();
                    StaWork.Step = 800;
                    break;

                case 800:
                    StaWork.Enable = false;
                    ////StaWork.Result = true; 做为最总结过判断
                    StaWork.State = false;
                    StaWork.Step  = 10;
                    break;

                case 1000:
                    StaWork.Enable = false;
                    StaWork.Result = false;
                    StaWork.State  = false;
                    StaWork.Step   = 10;
                    break;
                }
            }
            catch (Exception ex)
            {
                string Error_Str  = "";
                string Error_Str1 = "";
                Frm_Engineering.fEngineering.MacStop();
                MessageBox.Show(ex.Message);
                Error_Str  = PVar.BZ_LogPath + DateTime.Now.ToString("yyyyMMdd") + "\\" + DateTime.Now.ToString("yyyyMMdd") + "_代码异常记录" + ".txt";
                Error_Str1 = "\r\n" + "※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※" + "\r\n" +
                             "[" + DateTime.Now.ToString("HH:mm:ss") + "]" + "\r\n" + ex.ToString();
                FileRw.WriteDattxt(Error_Str, Error_Str1);
            }
        }
Exemple #7
0
        private void AutoRun()
        {
            #region Swithch
            switch (AutoRunstep)
            {
            case 10:
                if (PVar.AutoRunFlag)
                {
                    StopWatch_Stop();
                    StopWatch_Reset();
                    AutoRunstep = 20;
                }
                break;

            case 20:    //double start
                if (Globals.Flag_ManualStart || Double_Hands_Start(1000, false))
                {
                    Globals.Flag_ManualStart = false;
                    Double_Hands_Start(1000, true);
                    SetStep("CLEAR", Mycolor.None);
                    SetStep("手动启动或双手启动开始", Mycolor.None);
                    TaskIsWorking = true;
                    StopWatch_Start();
                    AutoRunstep = 25;
                }
                break;

            case 25:
                if (Globals.settingFunc.启用空跑模式)      //空跑不需要条码
                {
                    AutoRunstep = 40;
                }
                else
                {
                    AutoRunstep = 30;
                }
                break;

            case 30:    //check the product sensor and check the fixtrue closed sensor
                if (Gg.GetDi(0, Gg.InPutMMS0.夹具到位金属感应器) == 0)
                {
                    SetStep("夹具到位金属感应器感应异常", Mycolor.ErrorRed);
                    PVar.Ring_EN = true;    //buzzer
                    AutoRunstep  = 8000;
                    break;
                }
                if (Gg.GetDi(0, Gg.InPutMMS0.产品到位光纤感应器) == 0)
                {
                    SetStep("产品到位光纤感应器感应异常", Mycolor.ErrorRed);
                    PVar.Ring_EN = true;    //buzzer
                    AutoRunstep  = 8000;
                    break;
                }
                AutoRunstep = 40;
                break;

            case 40:    //check postion
                if ((Gg.GetEncPosmm(0, BVar.MMSY) - mFunction.Pos.TeachAxis1[0, 0]) > 0.05)
                {
                    SetStep("载具不在初始位置!请回零!", Mycolor.ErrorRed);
                    PVar.Ring_EN = true;    //buzzer
                    AutoRunstep  = 8000;
                    break;
                }
                AutoRunstep = 50;
                break;

            case 45:
                if (Gg.GetDi(0, Gg.InPutMMS0.安全光幕) == 1)
                {
                    SetStep("安全光幕异常", Mycolor.ErrorRed);
                    PVar.Ring_EN = true;    //buzzer
                    AutoRunstep  = 8000;
                    break;
                }
                AutoRunstep = 50;
                break;

            case 50:                            //check barcode
                if (Globals.settingFunc.启用空跑模式) //空跑不需要条码
                {
                    AutoRunstep = 80; break;
                }
                if (PageLogin.loginTp != loginType.Op)
                {
                    if ((Globals.BarcodeSN.Length >= Globals.settingPara.学习条码长度.Length - 2 || Globals.BarcodeSN.Length >= Globals.settingPara.学习条码长度.Length + 2))
                    {
                        SetStep("条码长度OK!", Mycolor.None);
                        DataManager.Instance.CurrentCheckData.SN = Globals.BarcodeSN;
                    }
                    else
                    {
                        SetStep("生成时间条码!", Mycolor.None);
                        DataManager.Instance.CurrentCheckData.SN = DateTime.Now.ToString("yyyMMdd_HHmmss");
                    }
                    TimeOut     = API.GetTickCount();
                    AutoRunstep = 80;
                }
                else    //op
                {
                    if ((Globals.BarcodeSN.Length >= Globals.settingPara.学习条码长度.Length - 5 ||
                         Globals.BarcodeSN.Length >= Globals.settingPara.学习条码长度.Length + 5))  //OP mode ,need check the length of barcode
                    {
                        SetStep("条码长度OK!", Mycolor.None);
                        PVar.Ring_EN = true;    //buzzer
                        DataManager.Instance.CurrentCheckData.SN = Globals.BarcodeSN;
                        TimeOut     = API.GetTickCount();
                        AutoRunstep = 80;
                    }
                    else
                    {
                        SetStep("条码长度异常!", Mycolor.ErrorRed);
                        DataManager.Instance.CurrentCheckData.SN = "";
                        if (OnEngineerSN != null)
                        {
                            OnEngineerSN("");                          //让工程界面的clear SN, foucs on
                        }
                        AutoRunstep = 8000;
                    }
                }
                break;

            case 80:
                if (OnShowSth_OnSSH_Output != null)
                {
                    OnShowSth_OnSSH_Output("");                                    //clear SSHinfo
                }
                if (OnEngineerSN != null)
                {
                    OnEngineerSN("");                          //让工程界面的clear SN, foucs on
                }
                Globals.BarcodeSN = "";

                if (Globals.settingFunc.启用空跑模式)
                {
                    StopWatch_Reset();
                    StopWatch_Start();
                    SetStep("CLEAR", Mycolor.None);
                }
                StationRunMode _runmode = Globals.settingFunc.启用空跑模式 ? StationRunMode.空跑 : StationRunMode.自动运行;
                if (Globals.settingMachineInfo.什么机器 == WhichMachine.MMS)
                {
                    XTaskManager.Instance.FindTaskById((int)TasksId.MMS测试).TaskGo();
                }
                else
                {
                    XTaskManager.Instance.FindTaskById((int)TasksId.测试).TaskGo();
                }
                SetStep("每站自动开始", Mycolor.None);
                TimeOut     = API.GetTickCount();
                AutoRunstep = 90;
                break;

            case 90:
                if (Globals.settingMachineInfo.什么机器 == WhichMachine.MMS)
                {
                    if (XTaskManager.Instance.FindTaskById((int)TasksId.MMS测试).TaskIsWorking == false)
                    {
                        SetStep("自动单循环完成", Mycolor.None);
                        AutoRunstep = 100;
                    }
                }
                else
                {
                    if (XTaskManager.Instance.FindTaskById((int)TasksId.测试).TaskIsWorking == false)
                    {
                        SetStep("自动单循环完成", Mycolor.None);
                        AutoRunstep = 100;
                    }
                }

                if (API.GetTickCount() - TimeOut > 60000)
                {
                    SetStep("自动超时60S,退出主循环!!", Mycolor.ErrorRed);
                    AutoRunstep = 8000;
                }
                break;

            case 100:
                StopWatch_Stop();
                TaskIsWorking = false;
                AutoRunstep   = 10;  //正常结束
                if (Globals.settingFunc.启用空跑模式)
                {
                    SetStep("空跑模式,继续", Mycolor.ErrorRed);
                    Thread.Sleep(1000);
                    AutoRunstep = 80;
                    if (StaStop)    //如果点了停止按钮,把当前的Cycle完成
                    {
                        SetStep("停止中......", Mycolor.ErrorRed);
                        Globals.Flag_ManualStart = false;
                        StaStop     = false;
                        AutoRunstep = 10;
                    }
                }
                break;

            case 8000:
                StopWatch_Stop();
                TaskIsWorking = false;
                AutoRunstep   = 10;
                break;
            }
            SetStepNum(AutoRunstep);
            Task_StopWatchElapsedMilliseconds();//获取CT
            #endregion
        }
Exemple #8
0
 public static void CloseDevice()
 {
     Gg.GTS_Close(0);
 }
Exemple #9
0
        /// <summary>
        /// 空跑
        /// </summary>
        private void DryRun()
        {
            #region Switch
            switch (AutoRunstep)
            {
            case 10:
                SetStep("CLEAR", Mycolor.None);
                TaskIsWorking = true;
                EventShowResult(EnumShowResult.Empty);
                SetStep("AutoRun Setp10", Mycolor.None);
                AutoRunstep = 20;
                break;

            case 20:
                SetStep("AutoRun Setp20", Mycolor.None);
                AutoRunstep = 30;
                break;

            case 30:
                Thread.Sleep(1);
                SetStep("AutoRun Setp30", Mycolor.None);
                AutoRunstep = 40;
                break;

            case 40:
                Thread.Sleep(10);
                SetStep("AutoRun Setp40", Mycolor.None);
                AutoRunstep = 50;
                break;

            case 50:    //等待位置
                Gg.AbsMotion(0, BVar.MMSY, mFunction.Pos.TeachAxis1[0, 0], PVar.ParAxis.Speed[BVar.MMSY]);
                TimeOut     = API.GetTickCount();
                AutoRunstep = 60;
                break;

            case 60:
                if (Gg.ZSPD(0, BVar.MMSY))
                {
                    SetStep("测试y轴运动到初始位置成功…", Mycolor.None);
                    TimeOut     = API.GetTickCount();
                    AutoRunstep = 70;
                }
                break;

            case 70:
                if (API.GetTickCount() - TimeOut > 300)
                {
                    AutoRunstep = 80;
                }
                break;

            case 80:    //测试位置
                Gg.AbsMotion(0, BVar.MMSY, mFunction.Pos.TeachAxis1[0, 2], PVar.ParAxis.Speed[BVar.MMSY]);
                TimeOut     = API.GetTickCount();
                AutoRunstep = 90;
                break;

            case 90:
                if (Gg.ZSPD(0, BVar.MMSY))
                {
                    SetStep("测试y轴运动到测试位置成功…", Mycolor.None);
                    TimeOut     = API.GetTickCount();
                    AutoRunstep = 100;
                }
                break;

            case 100:
                if (API.GetTickCount() - TimeOut > 300)
                {
                    AutoRunstep = 110;
                }
                break;

            case 110:
                Gg.SetDo(0, Gg.OutPutMMS0.产品定位气缸电磁阀, 1);
                SetStep("定位气缸打开......", Mycolor.None);
                TimeOut     = API.GetTickCount();
                AutoRunstep = 120;
                break;

            case 120:
                if (Gg.GetDi(0, Gg.InPutMMS0.气缸到位感应器) == 1)
                {
                    SetStep("定位气缸到定位位置", Mycolor.None);
                    AutoRunstep = 150;
                }
                else if (API.GetTickCount() - TimeOut > 2000)
                {
                    SetStep("定位气缸缩到定位位置信号异常!", Mycolor.ErrorRed);
                    PostTaskAlarm(XAlarmLevel.STOP, (int)AlarmCode.载具进出气缸伸出信号异常, AlarmCategory.MOTION.ToString(), "载具进出气缸伸出信号异常");
                    AutoRunstep = 8000;
                }
                break;

            case 150:
                SetStep("测试开始.....", Mycolor.None);
                Thread.Sleep(2000);
                AutoRunstep = 180;
                break;

            case 180:
                Gg.SetDo(0, Gg.OutPutMMS0.产品定位气缸电磁阀, 0);
                SetStep("定位气缸复位......", Mycolor.None);
                TimeOut     = API.GetTickCount();
                AutoRunstep = 190;
                break;

            case 190:
                if (Gg.GetDi(0, Gg.InPutMMS0.气缸缩回位置感应器) == 1)
                {
                    SetStep("定位气缸在缩回位置", Mycolor.None);
                    AutoRunstep = 200;
                }
                else if (API.GetTickCount() - TimeOut > 2000)
                {
                    SetStep("定位气缸缩回位置信号异常!", Mycolor.ErrorRed);
                    PostTaskAlarm(XAlarmLevel.STOP, (int)AlarmCode.载具进出气缸缩回信号异常, AlarmCategory.MOTION.ToString(), "载具进出气缸缩回信号异常");
                    AutoRunstep = 8000;
                }
                break;

            case 200:
                uint pck;
                uint pck2;
                gts.GT_GetClockHighPrecision(0, out pck);
                Thread.Sleep(5);
                gts.GT_GetClockHighPrecision(0, out pck2);
                uint ctt = pck2 - pck;
                SetStep("AutoRun Setp60", Mycolor.None);
                AutoRunstep = 210;
                break;

            case 210:
                Thread.Sleep(1000);
                SetStep("AutoRun Setp70", Mycolor.None);
                #region 产生数据 1tray
                //  "装配时间", "产品条码", "Result", "X", "Y", "A", "Dis"
                DataManager.Instance.CurrentCheckData.SN        = "SNXXXXXXX";
                DataManager.Instance.CurrentCheckData.StartDate = DateTime.Now.ToString("yyyy-MM-dd");
                DataManager.Instance.CurrentCheckData.StartTime = DateTime.Now.ToString("HH:mm:ss");
                Random rd = new Random();
                if (Globals.settingMachineInfo.什么机器 == WhichMachine.IPDM)
                {
                    double left1  = DataManager.Instance.CurrentCheckData.IPD_Left1 = rd.Next(-1, 1) / 10.0 + rd.Next(-1, 1) / 100.00;
                    double left2  = DataManager.Instance.CurrentCheckData.IPD_Right1 = 22 + rd.Next(-1, 1) / 100.0 + rd.Next(0, 1) / 1000.00;
                    double Right1 = DataManager.Instance.CurrentCheckData.Mod_Brc_X = rd.Next(-1, 1) / 100.0 + rd.Next(-1, 1) / 1000.00;
                    double Right2 = DataManager.Instance.CurrentCheckData.Mod_Brc_Y = rd.Next(-1, 1) / 100.0 + rd.Next(-1, 1) / 1000.00;
                    DataManager.Instance.chartData.Adddata(left1.ToString() + "," + Right1.ToString() + "," + left2.ToString() + "," + Right2.ToString());     //AddData为更新生产的CPK数据 AddNewData为UPH数据,包括很多东西
                }
                else
                {
                    double m_A  = DataManager.Instance.CurrentCheckData.Mod_Brc_A = rd.Next(-1, 1) / 10.0 + rd.Next(-1, 1) / 100.00;
                    double m_cc = DataManager.Instance.CurrentCheckData.Mod_Brc_CC = 22 + rd.Next(-1, 1) / 100.0 + rd.Next(0, 1) / 1000.00;
                    double m_x  = DataManager.Instance.CurrentCheckData.Mod_Brc_X = rd.Next(-1, 1) / 100.0 + rd.Next(-1, 1) / 1000.00;
                    double m_y  = DataManager.Instance.CurrentCheckData.Mod_Brc_Y = rd.Next(-1, 1) / 100.0 + rd.Next(-1, 1) / 1000.00;
                    DataManager.Instance.chartData.Adddata(m_A.ToString() + "," + m_x.ToString() + "," + m_y.ToString() + "," + m_cc.ToString());     //AddData为更新生产的CPK数据 AddNewData为UPH数据,包括很多东西
                }
                if (tempi % 2 == 1)
                {
                    DataManager.Instance.CurrentCheckData.PASS     = true;
                    DataManager.Instance.CurrentCheckData.PDCAPASS = true;
                    SetStep("the result is Passed", Color.LimeGreen);
                    EventShowResult(EnumShowResult.OK);
                    DataManager.Instance.currentyield.AddOneResult(true);    //update the current yield and month yield
                }
                else
                {
                    DataManager.Instance.CurrentCheckData.PASS     = false;
                    DataManager.Instance.CurrentCheckData.PDCAPASS = false;
                    SetStep("the result is Failed", Color.Red);
                    EventShowResult(EnumShowResult.NG);
                    DataManager.Instance.currentyield.AddOneResult(false);    //update the current yield and month yield
                }


                DataManager.Instance.uph.UPHupdate();                            //UPH update by hour

                if (OnCurrentInf != null)
                {
                    OnCurrentInf(DataManager.Instance.CurrentCheckData);                          //给工程界面的数据显示
                }
                if (OnFlashDataPage != null)
                {
                    OnFlashDataPage();
                }

                tempi++;

                #endregion
                AutoRunstep = 220;
                break;

            case 220:    //等待位置
                Gg.AbsMotion(0, BVar.MMSY, mFunction.Pos.TeachAxis1[0, 0], PVar.ParAxis.Speed[BVar.MMSY]);
                TimeOut     = API.GetTickCount();
                AutoRunstep = 230;
                break;

            case 230:
                if (Gg.ZSPD(0, BVar.MMSY))
                {
                    SetStep("测试y轴运动到初始位置成功…", Mycolor.None);
                    TimeOut     = API.GetTickCount();
                    AutoRunstep = 2000;
                }
                break;

            case 2000:
                Thread.Sleep(100);
                SetStep("AutoRun Setp80", Mycolor.None);
                StaStop = false;
                StopWatch_Stop();    //stop the CT count
                AutoRunstep   = 0;
                TaskIsWorking = false;
                SetStep("SAVE", Mycolor.None);
                PostTaskAlarm(XAlarmLevel.RST, (int)AlarmCode.位, AlarmCategory.RESET.ToString(), "RST");     //for errorcode
                break;

            case 8000:
                Thread.Sleep(1);
                SetStep("AutoRun Setp8000", Mycolor.None);
                AutoRunstep = 0;
                StopWatch_Stop();    //stop the CT count
                TaskIsWorking = false;
                return;
            }
            SetStepNum(AutoRunstep);
            Task_StopWatchElapsedMilliseconds();//获取CT
            #endregion
        }
Exemple #10
0
        private FunctionStatus InitHoming()
        {
            switch (InitHomingStep)
            {
            case 10:
                AutoRunstep = 0;
                Gg.Set_Servo(0, BVar.MMSY, true);        //open servo on
                Thread.Sleep(200);
                SetStep("开始回零.......", Mycolor.None);
                InitHomingStep = 15;
                break;

            case 15:
                Gg.SetDo(0, Gg.OutPutMMS0.产品定位气缸电磁阀, 0);
                SetStep("定位气缸复位......", Mycolor.None);
                InitHomingDelay.InitialTime();
                InitHomingStep = 20;
                break;

            case 20:
                if (Gg.GetDi(0, Gg.InPutMMS0.气缸缩回位置感应器) == 1)
                {
                    SetStep("定位气缸在缩回位置", Mycolor.None);
                    InitHomingStep = 30;
                }
                else if (InitHomingDelay.TimeIsUp(2000))
                {
                    SetStep("定位气缸缩回位置信号异常!", Mycolor.ErrorRed);
                    PostTaskAlarm(XAlarmLevel.STOP, (int)AlarmCode.载具进出气缸缩回信号异常, AlarmCategory.MOTION.ToString(), "载具进出气缸缩回信号异常");
                    InitHomingStep = 8000;
                }
                break;

            case 30:
                SetStep("测试y轴开始回原点…", Mycolor.None);
                GoHome.Instance.AxisHome[0, 1].Result = false;
                GoHome.Instance.AxisHome[0, 1].Enable = true;
                GoHome.Instance.AxisHome[0, 1].Step   = 10;
                TimeOut        = API.GetTickCount();
                InitHomingStep = 40;
                break;

            case 40:
                GoHome.GotoHome(0, 1, 30, -1000, 5, 1, 10);
                if (GoHome.Instance.AxisHome[0, 1].Step == 0 && GoHome.Instance.AxisHome[0, 1].Enable)
                {
                    GoHome.Instance.AxisHome[0, 1].Enable = false;
                    if (GoHome.Instance.AxisHome[0, 1].Result)
                    {
                        SetStep("测试y轴回原点成功…", Mycolor.None);
                        InitHomingStep = 50;
                    }
                    else
                    {
                        SetStep("测试y轴回原点失败…", Mycolor.ErrorRed);
                        InitHomingStep = 8000;
                    }
                }
                break;

            case 50:    //等待位置
                Gg.AbsMotion(0, BVar.MMSY, mFunction.Pos.TeachAxis1[0, 0], PVar.ParAxis.Speed[BVar.MMSY]);
                TimeOut        = API.GetTickCount();
                InitHomingStep = 60;
                break;

            case 60:
                if (Gg.ZSPD(0, BVar.MMSY))
                {
                    SetStep("测试y轴运动到初始位置成功…", Mycolor.None);
                    InitHomingStep = 2000;
                }
                break;

            case 2000:
                InitHomingStep = 0;
                SetStep("MMS测试工站复位OK!", Mycolor.None);
                SetState(XTaskState.WAITRUN);
                SetStepNum(InitHomingStep);
                HomeOK          = true;
                PVar.LampStatus = 20;
                PostTaskAlarm(XAlarmLevel.RST, (int)AlarmCode.位, AlarmCategory.RESET.ToString(), "RST");         //for errorcode
                return(FunctionStatus.Finish);

            case 8000:
                InitHomingStep  = 0;
                PVar.LampStatus = 10;
                return(FunctionStatus.Error);
            }
            SetStepNum(InitHomingStep);
            return(FunctionStatus.Working);
        }
Exemple #11
0
        public static void S2_MotionPos1(ref bool Status, int m, int n)
        {
            if (n == 1 || (n == 2 && Frm_Engineering.fEngineering.CheckBox_NeedCCD.Checked == false))
            {
                switch (Manual_Step[m, n])
                {
                //Z轴原点位置=>X/Y/R轴初始位置=>Z轴初始位置
                case 0:
                    Status            = true;
                    Manual_Step[m, n] = Manual_Step[m, n] + 1;
                    break;

                case 1:
                    Gg.AbsMotion(0, BVar.S2_Z, 0, PVar.ParAxis.Speed[BVar.S2_Z]);
                    Manual_Step[m, n] = Manual_Step[m, n] + 1;
                    break;

                case 2:
                    if (Gg.ZSPD(0, BVar.S2_Z))
                    {
                        Manual_Step[m, n] = Manual_Step[m, n] + 1;
                    }
                    break;

                case 3:
                    disrow  = BVar.DisRow * ((PVar.Blogo.MaterialCnt - 1) % 2);   //判断所在行
                    discell = BVar.DisCell * ((PVar.Blogo.MaterialCnt - 1) / 2);  //判断所在列

                    Gg.AbsMotion(0, BVar.S2L_Z, mFunction.Pos.TeachAxis3[3, 3] - discell, PVar.ParAxis.Speed[BVar.S2L_Z]);

                    Gg.AbsMotion(0, BVar.S2_X, mFunction.Pos.TeachAxis1[m, n], PVar.ParAxis.Speed[BVar.S2_X]);
                    Gg.AbsMotion(0, BVar.S2_Y, mFunction.Pos.TeachAxis2[m, n] + disrow, PVar.ParAxis.Speed[BVar.S2_Y]);
                    Gg.AbsMotion(0, BVar.S2_R, mFunction.Pos.TeachAxis4[m, n], PVar.ParAxis.Speed[BVar.S2_R]);
                    Manual_Step[m, n] = Manual_Step[m, n] + 1;
                    break;

                case 4:
                    if (Gg.ZSPD(0, BVar.S2L_Z) && Gg.ZSPD(0, BVar.S2_X) && Gg.ZSPD(0, BVar.S2_Y) && Gg.ZSPD(0, BVar.S2_Z) && Gg.ZSPD(0, BVar.S2_R))
                    {
                        Manual_Step[m, n] = Manual_Step[m, n] + 1;
                    }
                    break;

                case 5:
                    Gg.AbsMotion(0, BVar.S2_Z, mFunction.Pos.TeachAxis3[m, n], PVar.ParAxis.Speed[BVar.S2_Z]);
                    Manual_Step[m, n] = Manual_Step[m, n] + 1;
                    break;

                case 6:
                    if (Gg.ZSPD(0, BVar.S2_Z))
                    {
                        Manual_Step[m, n] = Manual_Step[m, n] + 1;
                    }
                    break;

                case 7:
                    Manual_Step[m, n] = 1000;
                    break;

                case 1000:
                    Manual_Step[m, n] = 0;
                    Status            = false;
                    break;
                }
            }
            else if (n == 2 && Frm_Engineering.fEngineering.CheckBox_NeedCCD.Checked)//取料位置:先CCD拍照后取料
            {
                int sRtn;
                switch (Manual_Step[m, n])
                {
                //Z轴原点位置=>X/Y/R轴初始位置=>Z轴初始位置
                case 0:
                    Status            = true;
                    Manual_Step[m, n] = Manual_Step[m, n] + 1;
                    break;

                case 1:
                    Gg.AbsMotion(0, BVar.S2_Z, 0, PVar.ParAxis.Speed[BVar.S2_Z]);
                    Manual_Step[m, n] = Manual_Step[m, n] + 1;
                    break;

                case 2:
                    if (Gg.ZSPD(0, BVar.S2_Z))
                    {
                        Manual_Step[m, n] = Manual_Step[m, n] + 1;
                    }
                    break;

                case 3:
                    disrow  = BVar.DisRow * ((PVar.Blogo.MaterialCnt - 1) % 2);   //判断所在行
                    discell = BVar.DisCell * ((PVar.Blogo.MaterialCnt - 1) / 2);  //判断所在列

                    Gg.AbsMotion(0, BVar.S2L_Z, mFunction.Pos.TeachAxis3[3, 3] - discell, PVar.ParAxis.Speed[BVar.S2L_Z]);

                    //拍照位置
                    Gg.AbsMotion(0, BVar.S2_X, mFunction.Pos.TeachAxis1[m, n - 1], PVar.ParAxis.Speed[BVar.S2_X]);
                    Gg.AbsMotion(0, BVar.S2_Y, mFunction.Pos.TeachAxis2[m, n - 1] + disrow, PVar.ParAxis.Speed[BVar.S2_Y]);
                    Gg.AbsMotion(0, BVar.S2_R, mFunction.Pos.TeachAxis4[m, n - 1], PVar.ParAxis.Speed[BVar.S2_R]);
                    Manual_Step[m, n] = Manual_Step[m, n] + 1;
                    break;

                case 4:
                    if (Gg.ZSPD(0, BVar.S2L_Z) && Gg.ZSPD(0, BVar.S2_X) && Gg.ZSPD(0, BVar.S2_Y) && Gg.ZSPD(0, BVar.S2_Z) && Gg.ZSPD(0, BVar.S2_R))
                    {
                        Manual_Step[m, n] = Manual_Step[m, n] + 1;
                    }
                    break;

                case 5:
                    Gg.AbsMotion(0, BVar.S2_Z, mFunction.Pos.TeachAxis3[m, n - 1], PVar.ParAxis.Speed[BVar.S2_Z]);
                    Manual_Step[m, n] = Manual_Step[m, n] + 1;
                    break;

                case 6:
                    if (Gg.ZSPD(0, BVar.S2_Z))
                    {
                        TimeOut           = API.GetTickCount();
                        Manual_Step[m, n] = Manual_Step[m, n] + 1;
                    }
                    break;

                case 7:
                    if (API.GetTickCount() - TimeOut > 200)
                    {
                        TimeOut           = API.GetTickCount();
                        Manual_Step[m, n] = Manual_Step[m, n] + 1;
                    }
                    break;

                case 8:
                    sRtn = Command.TCP_CCD1_Send(Command.取料拍照 + "," + PVar.ParList.Data[7]);

                    if (sRtn == 1)     //命令发送成功
                    {
                        TimeOut           = API.GetTickCount();
                        Manual_Step[m, n] = Manual_Step[m, n] + 1;
                    }
                    else if (sRtn == 2)     //网络链接异常
                    {
                        TimeOut           = API.GetTickCount();
                        Manual_Step[m, n] = 1000;
                    }
                    else
                    {
                        ShowList("取料拍照命令发送失败!");
                        TimeOut           = API.GetTickCount();
                        Manual_Step[m, n] = 1000;
                    }
                    break;

                case 9:
                    if (Command.CCD1_Resule && PVar.CCD1_Data[0] == Command.取料拍照)
                    {
                        CCD_Vale.X     = Convert.ToDouble(PVar.CCD1_Data[1]);
                        CCD_Vale.Y     = Convert.ToDouble(PVar.CCD1_Data[2]);
                        CCD_Vale.T     = Convert.ToDouble(PVar.CCD1_Data[3]);
                        CCD_Vale.Judge = Convert.ToDouble(PVar.CCD1_Data[4]);

                        TimeOut           = API.GetTickCount();
                        Manual_Step[m, n] = Manual_Step[m, n] + 1;
                    }
                    else
                    {
                        if (API.GetTickCount() - TimeOut > 2000)
                        {
                            ShowList("等待取料拍照数据超时!");
                            TimeOut           = API.GetTickCount();
                            Manual_Step[m, n] = 1000;
                        }
                    }
                    Manual_Step[m, n] = 1000;
                    break;

                case 10:
                    if (CCD_Vale.Judge == 0)
                    {
                        if (CCD_Vale.X > -5 && CCD_Vale.X < 1.5 && Math.Abs(CCD_Vale.Y) < 1.5 && Math.Abs(CCD_Vale.T) < 5)
                        {
                            double tmpX;
                            double tmpY;
                            double mT;
                            double mPI   = 3.1415926535897931;
                            double L_Arm = PVar.ParList.Data[9];

                            Offset.T = CCD_Vale.T + PVar.ParList.Data[7];;
                            mT       = Offset.T * mPI / 180;
                            tmpX     = -L_Arm * (1 - System.Math.Cos(mT));
                            tmpY     = -L_Arm *System.Math.Sin(mT);

                            Offset.X          = CCD_Vale.X + tmpX + PVar.ParList.Data[5];
                            Offset.Y          = CCD_Vale.Y + tmpY + PVar.ParList.Data[6];
                            TimeOut           = API.GetTickCount();
                            Manual_Step[m, n] = Manual_Step[m, n] + 1;
                        }
                        else
                        {
                            ShowList("物料偏移值过大!");
                            TimeOut           = API.GetTickCount();
                            Manual_Step[m, n] = 1000;
                        }
                    }
                    else
                    {
                        ShowList("模型搜索错误!");
                        TimeOut           = API.GetTickCount();
                        Manual_Step[m, n] = 1000;
                    }
                    break;

                case 11:
                    disrow = BVar.DisRow * ((PVar.Blogo.MaterialCnt - 1) % 2);

                    Gg.AbsMotion(0, BVar.S2_X, mFunction.Pos.TeachAxis1[m, n] + Offset.X, PVar.ParAxis.Speed[BVar.S2_X]);
                    Gg.AbsMotion(0, BVar.S2_Y, mFunction.Pos.TeachAxis2[m, n] + disrow + Offset.Y, PVar.ParAxis.Speed[BVar.S2_Y]);
                    Gg.AbsMotion(0, BVar.S2_R, mFunction.Pos.TeachAxis4[m, n] + Offset.T, PVar.ParAxis.Speed[BVar.S2_R]);
                    TimeOut           = API.GetTickCount();
                    Manual_Step[m, n] = Manual_Step[m, n] + 1;
                    break;

                case 12:
                    if (Gg.ZSPD(0, BVar.S2_X) && Gg.ZSPD(0, BVar.S2_Y) && Gg.ZSPD(0, BVar.S2_R))
                    {
                        TimeOut           = API.GetTickCount();
                        Manual_Step[m, n] = Manual_Step[m, n] + 1;
                    }
                    break;

                case 13:
                    Gg.AbsMotion(0, BVar.S2_Z, mFunction.Pos.TeachAxis3[m, n], PVar.ParAxis.Speed[BVar.S2_Z]);
                    Manual_Step[m, n] = Manual_Step[m, n] + 1;
                    break;

                case 14:
                    if (Gg.ZSPD(0, BVar.S2_Z))
                    {
                        Manual_Step[m, n] = Manual_Step[m, n] + 1;
                    }
                    break;

                case 15:
                    Manual_Step[m, n] = 1000;
                    break;

                case 1000:
                    Manual_Step[m, n] = 0;
                    Status            = false;
                    break;
                }
            }
        }
Exemple #12
0
        //【Tag0】拍HSG角度位置、装配位置
        public static void S2_MotionPos3(ref bool Status, int m, int n)
        {
            switch (Manual_Step[m, n])
            {
            //Z轴原点位置=>X/Y/R轴初始位置=>Z轴初始位置
            case 0:
                Status            = true;
                Manual_Step[m, n] = Manual_Step[m, n] + 1;
                break;

            case 1:
                Gg.AbsMotion(0, BVar.S2_Z, 0, PVar.ParAxis.Speed[BVar.S2_Z]);
                Manual_Step[m, n] = Manual_Step[m, n] + 1;
                break;

            case 2:
                if (Gg.ZSPD(0, BVar.S2_Z))
                {
                    Manual_Step[m, n] = Manual_Step[m, n] + 1;
                }
                break;

            case 3:
                Gg.AbsMotion(0, BVar.S2_X, mFunction.Pos.TeachAxis1[m, n], PVar.ParAxis.Speed[BVar.S2_X]);
                Gg.AbsMotion(0, BVar.S2_Y, mFunction.Pos.TeachAxis2[m, n], PVar.ParAxis.Speed[BVar.S2_Y]);
                Gg.AbsMotion(0, BVar.S2_R, mFunction.Pos.TeachAxis4[m, n], PVar.ParAxis.Speed[BVar.S2_R]);
                Manual_Step[m, n] = Manual_Step[m, n] + 1;
                break;

            case 4:
                if (Gg.ZSPD(0, BVar.S2_X) && Gg.ZSPD(0, BVar.S2_Y) && Gg.ZSPD(0, BVar.S2_Z) && Gg.ZSPD(0, BVar.S2_R))
                {
                    Manual_Step[m, n] = Manual_Step[m, n] + 1;
                }
                break;

            case 5:
                Gg.AbsMotion(0, BVar.S2_Z, mFunction.Pos.TeachAxis3[m, n], PVar.ParAxis.Speed[BVar.S2_Z]);
                Manual_Step[m, n] = Manual_Step[m, n] + 1;
                break;

            case 6:
                if (Gg.ZSPD(0, BVar.S2_Z))
                {
                    Manual_Step[m, n] = Manual_Step[m, n] + 1;
                }
                break;

            case 7:
                Manual_Step[m, n] = 1000;
                break;

            case 1000:
                Manual_Step[m, n] = 0;
                Status            = false;
                break;
            }
        }
Exemple #13
0
        public static bool mServoON(short CardTag, short CardNum, short AxisIndex)
        {
            //      CardType                 CardInfo
            //控件  TabIndex  代表卡号,     Tag(A,B) A=0代表“固高”,A=1代表其它类型,B代表轴/模块序列号;
            //B代表扩展IO序号(0-15)。
            int CardType = 0;

            switch (CardTag)
            {
            case 0:     //0号卡
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                CardType = 0;     //固高运动控制卡卡
                break;

            default:     //1号卡
                CardType = 1;
                break;
            }
            try
            {
                switch (CardType)
                {
                case 0:                                                                               //固高运动控制卡卡
                    int Sts = 0;
                    PVar.Rtn = gts.GT_ClrSts(CardNum, AxisIndex, 1);                                  //清除轴的报警和限位
                    uint null_UInt32 = 0;
                    PVar.Rtn = gts.GT_GetSts(CardNum, AxisIndex, out Sts, (short)1, out null_UInt32); //读取轴状态

                    if (Convert.ToBoolean(Sts & 0x200))
                    {
                        //If ZSPD(CardNum, AxisIndex) = False Then
                        //    ShowList(CardNum & "号卡第" & AxisIndex & "轴,正在运动中")
                        //End If
                        //if (CardNum == 0 && AxisIndex == 3)
                        //{
                        //    Gg.SetDo(0, 4, 0);
                        //    Frm_Engineering.fEngineering.Button_S2_1.BackColor = Color.WhiteSmoke;
                        //}

                        //if (CardNum == 0 && AxisIndex == 8)
                        //{
                        //    Gg.SetDo(0, 5, 0);
                        //    Frm_Engineering.fEngineering.Button_S3_1.BackColor = Color.WhiteSmoke;
                        //}
                        PVar.Rtn = gts.GT_AxisOff(CardNum, AxisIndex);
                        gts.GT_Stop(CardNum, 1 << (AxisIndex - 1), 0);
                        GoHome.Instance.AxisHome[CardNum, AxisIndex].Step = 0;
                    }
                    else
                    {
                        PVar.Rtn = gts.GT_AxisOn((short)CardNum, AxisIndex);
                        PVar.Rtn = gts.GT_SetPrfPos(CardNum, AxisIndex, Gg.GetEncPos((short)CardNum, AxisIndex));
                        PVar.Rtn = gts.GT_SynchAxisPos((short)CardNum, 1 << ((AxisIndex) - 1));            //将当前轴进行位置同步
                        uint null_UInt322 = 0;
                        PVar.Rtn = gts.GT_GetSts(CardNum, AxisIndex, out Sts, (short)1, out null_UInt322); //读取轴状态
                        if ((Sts & 0x200) == 0)
                        {
                            ShowList(BVar.Axisname[CardNum * 8 + AxisIndex - 1] + "伺服ON打开失败");
                        }
                        //else
                        //{
                        //    if (CardNum == 0 && AxisIndex == 3)
                        //    {
                        //        Gg.SetDo(0, 4, 1);
                        //        Frm_Engineering.fEngineering.Button_S2_1.BackColor = Color.Gold;
                        //    }

                        //    if (CardNum == 0 && AxisIndex == 8)
                        //    {
                        //        Gg.SetDo(0, 5, 1);
                        //        Frm_Engineering.fEngineering.Button_S3_1.BackColor = Color.Gold;
                        //    }

                        //}
                    }
                    break;

                case 1:
                    break;
                }
            }
            catch (Exception)
            {
                return(false);
            }
            return(true);
        }
Exemple #14
0
        public static short mGetDi(short CardTag, short index)
        {
            //      CardIndex              CardInfo
            //控件  TabIndex  代表卡类型, Tag(A,B) A代表卡号,B代表模块序号(0-15);
            //CardType=0 固高卡自带IO,CardType=1 固高卡扩展IO。
            int    CardType    = 0;
            string CardInfo    = "0,0";
            short  CardIndex   = 0;
            short  CardNum     = 0;
            ushort ReturnStr   = 0;
            short  mGetDiValue = -1;

            switch (CardTag)
            {
            case 0:     //0号输入单元
                CardType = 0;
                CardInfo = "0,0";
                break;

            case 1:     //0号输入单元
                CardType = 0;
                CardInfo = "1,0";
                break;

            case 2:
                CardType = 1;
                CardInfo = "0,0";     //卡号,index
                break;

            case 3:
                CardType = 1;
                CardInfo = "0,1";     //卡号,index
                break;

            case 4:
                CardType = 1;
                CardInfo = "0,2";     //卡号,index
                break;
            }
            CardNum   = System.Convert.ToInt16(CardInfo.Substring(0, 1));
            CardIndex = System.Convert.ToInt16(CardInfo.Substring(CardInfo.Length - 1, 1));
            try
            {
                switch (CardType)
                {
                case 0:     //固高卡自带通用输入
                    mGetDiValue = Gg.GetDi(CardNum, index);
                    break;

                case 1:     //固高卡扩展输入
                    PVar.Rtn    = gts.GT_GetExtIoBitGts(CardNum, CardIndex, index, ref ReturnStr);
                    mGetDiValue = (short)Math.Abs(ReturnStr - 1);
                    break;
                }
            }
            catch (Exception)
            {
                mGetDiValue = -1;
            }
            return(mGetDiValue);
        }
        private void IO()
        {
            int Axisnum = (Globals.settingMachineInfo.什么机器 == WhichMachine.MMS)?1:1; //wl

            for (var i = 1; i <= Axisnum; i++)                                       //王亮修改成一个轴,原来4个
            {
                CardTmp = (int)(Conversion.Val(VB.Strings.Mid(System.Convert.ToString(this.Tag), System.Convert.ToInt32((i - 1) * 5 + 3), 1)));
                AxisTmp = (int)(Conversion.Val(VB.Strings.Mid(System.Convert.ToString(this.Tag), System.Convert.ToInt32((i - 1) * 5 + 5), 1)));


                if (AxisTmp != 0)
                {
                    long StsValue = 0;
                    StsValue = Gg.GetSts((short)CardTmp, (short)AxisTmp);

                    if ((StsValue & 0x200) == 0) //使能
                    {
                        mOvalShape[i, 1].FillColor = Color.White;
                    }
                    else
                    {
                        mOvalShape[i, 1].FillColor = Color.Lime;
                    }

                    if ((StsValue & 0x2) == 0) //报警
                    {
                        mOvalShape[i, 2].FillColor = Color.White;
                    }
                    else
                    {
                        mOvalShape[i, 2].FillColor = Color.Lime;
                    }

                    if ((StsValue & 0x20) == 0) //正限位
                    {
                        mOvalShape[i, 3].FillColor = Color.White;
                    }
                    else
                    {
                        mOvalShape[i, 3].FillColor = Color.Lime;
                    }

                    if (Gg.GetHomeDi((short)CardTmp, (short)AxisTmp) == 0) //原点
                    {
                        mOvalShape[i, 4].FillColor = Color.White;
                    }
                    else
                    {
                        mOvalShape[i, 4].FillColor = Color.Lime;
                    }

                    if ((StsValue & 0x40) == 0) //负限位
                    {
                        mOvalShape[i, 5].FillColor = Color.White;
                    }
                    else
                    {
                        mOvalShape[i, 5].FillColor = Color.Lime;
                    }

                    if ((StsValue & 0x400) == 0) //运动标志
                    {
                        mOvalShape[i, 6].FillColor = Color.White;
                    }
                    else
                    {
                        mOvalShape[i, 6].FillColor = Color.Lime;
                    }

                    if ((StsValue & 0x10) == 0) //误差标志
                    {
                        mOvalShape[i, 7].FillColor = Color.White;
                    }
                    else
                    {
                        mOvalShape[i, 7].FillColor = Color.Lime;
                    }
                }
                else
                {
                    if ((int)i == 1)
                    {
                        X_Axis_Name.Visible = false;
                    }
                    else if ((int)i == 2)
                    {
                        Y_Axis_Name.Visible = false;
                    }
                    else if ((int)i == 3)
                    {
                        Z_Axis_Name.Visible = false;
                    }
                    else if ((int)i == 4)
                    {
                        R_Axis_Name.Visible = false;
                    }
                    for (var j = 1; j <= 7; j++)
                    {
                        mOvalShape[i, j].Visible = false;
                    }
                }
            }
        }
Exemple #16
0
        /// <summary>
        /// safe door /axis alarm
        /// </summary>
        private void AlarmReport()
        {
            #region 急停
            Globals.Invoker.SetCtl_BckColor(this.Btn_EMG, Gg.GetDi(0, Gg.InPutMMS0.紧急停止) == 1 ? Mycolor.Red : Color.LimeGreen);
            if (EmgSt.Bool_LDP(Gg.GetDi(0, Gg.InPutMMS0.紧急停止) == 1))
            {
                EMG();
                if (ShowList != null)
                {
                    ShowList("紧急停止按下!");
                }
            }
            EmgSt.Update(Gg.GetDi(0, Gg.InPutMMS0.紧急停止) == 1);
            if (EmgSt.PLF)
            {
                //PVar.LampStatus = 50;
                Globals.addList("紧急停止松开!", Mycolor.Red);
            }
            #endregion

            #region 实时扫描 安全门 等
            Globals.Invoker.SetCtl_BckColor(this.CurtionSts, Gg.GetDi(0, Gg.InPutMMS0.安全光幕) == 1 ? Mycolor.Red : Color.LimeGreen);
            Globals.Invoker.SetCtl_BckColor(this.AirSts, Gg.GetDi(0, Gg.InPutMMS0.正气源感应表) == 1 ? Color.LimeGreen : Mycolor.Red);
            if (Globals.settingFunc.打开安全门 && PVar.Stop_Flag == false && PVar.MacHold == false && PVar.AutoRunFlag)
            {
                string tempStr  = "";
                string tempStr1 = "";
                if (Gg.GetDi(0, Gg.InPutMMS0.后安全门感应器) == 0)
                {
                    tempStr = "后安全门";
                }
                if (Gg.GetDi(0, Gg.InPutMMS0.左安全门感应器) == 0)
                {
                    tempStr = "左安全门";
                }
                if (Gg.GetDi(0, Gg.InPutMMS0.右安全门感应器) == 0)
                {
                    tempStr = "右安全门";
                }
                if (!string.IsNullOrEmpty(tempStr))
                {
                    PVar.MacHold   = true;
                    PVar.Stop_Flag = false;
                    if (ShowList != null)
                    {
                        ShowList("请关闭" + tempStr);
                    }
                    if (PauseClick != null)
                    {
                        PauseClick(true);
                    }
                    PVar.LampStatus = 20;
                }
                if (CurtionLDPF.Bool_LDP(Gg.GetDi(0, Gg.InPutMMS0.安全光幕) == 1))
                {
                    tempStr1 = "光栅触发!";
                }
                if (!string.IsNullOrEmpty(tempStr1))
                {
                    PVar.MacHold   = true;
                    PVar.Stop_Flag = false;
                    Globals.addList(tempStr1, Mycolor.ErrorRed);
                    if (ShowList != null)
                    {
                        ShowList(tempStr1);
                    }
                    if (PauseClick != null)
                    {
                        PauseClick(true);
                    }
                    PVar.LampStatus = 20;
                }
                //this.SafeDoorSts.Checked = string.IsNullOrEmpty(tempStr);
                this.CurtionSts.BackColor = string.IsNullOrEmpty(tempStr1) ? Mycolor.LimeGreen : Color.Red;
                this.AirSts.BackColor     = (Gg.GetDi(0, Gg.InPutMMS0.正气源感应表) == 1) ? Mycolor.LimeGreen : Color.Red;
            }

            #endregion

            #region 轴报警

            if (Gg.Get_AlarmDi(0, Gg.InAlarmMMS0.测试Y轴) == 1)
            {
                Globals.PostAlarmMachine(XAlarmLevel.STOP, (int)AlarmCode.Y伺服电机驱动器报警, AlarmCategory.SYSTEM.ToString(), "Y伺服电机驱动器报警");
            }
            if (Gg.GetLimitDi_F(0, (short)Gg.InAlarmMMS0.测试Y轴) == 1 && GoHome.Instance.Reset.Result)
            {
                Globals.PostAlarmMachine(XAlarmLevel.STOP, (int)AlarmCode.Y伺服电机驱动器报警, AlarmCategory.SYSTEM.ToString(), "Y伺服电机负极限报警");
            }
            if (Gg.GetLimitDi_Z(0, (short)Gg.InAlarmMMS0.测试Y轴) == 1 && GoHome.Instance.Reset.Result)
            {
                Globals.PostAlarmMachine(XAlarmLevel.STOP, (int)AlarmCode.Y伺服电机驱动器报警, AlarmCategory.SYSTEM.ToString(), "Y伺服电机正极限报警");
            }
            #endregion
        }
Exemple #17
0
        public static void AutoRun(ref PVar.WorkType StaWork)
        {
            try
            {
                switch (StaWork.Step)
                {
                case 10:
                    if (PVar.Stop_Flag == false)
                    {
                        StaWork.State = false;
                        TimeOut       = API.GetTickCount();
                        StaWork.Step  = 20;
                    }
                    break;

                case 20:
                    //本站工作状态,工站使能,本站是否有产品,转盘工作状态
                    if (PVar.ParList.CheckSts[17] == false)
                    {
                        if (StaWork.State == false && StaWork.Enable && StaWork.Result && StaWork.IsHaveHSG && PVar.Sta_Work[1].State == false)
                        {
                            StaWork.State  = true;
                            StaWork.Result = false;
                            //清空缓存的压力值
                            for (int i = PVar.Press.Count() - 1; i > 0; i--)
                            {
                                PVar.Press[i] = 0;
                            }
                            Command.Com2_Send(Command.压力控制打开);
                            Gg.SetExDo(0, 0, Gg.OutPut2.保压升降气缸, 1);
                            AddList("复检开始开始!");
                            TimeOut      = API.GetTickCount();
                            StaWork.Step = 30;
                        }
                        else
                        {
                            StaWork.Step = 10;
                        }
                    }
                    else
                    {
                        if (StaWork.State == false && StaWork.Enable && StaWork.IsHaveHSG && PVar.Sta_Work[1].State == false)
                        {
                            StaWork.State  = true;
                            StaWork.Result = false;
                            //清空缓存的压力值
                            for (int i = PVar.Press.Count() - 1; i > 0; i--)
                            {
                                PVar.Press[i] = 0;
                            }
                            Command.Com2_Send(Command.压力控制打开);
                            Gg.SetExDo(0, 0, Gg.OutPut2.保压升降气缸, 1);
                            AddList("复检开始开始!");
                            TimeOut      = API.GetTickCount();
                            StaWork.Step = 30;
                        }
                    }
                    break;

                case 30:
                    if (Gg.GetExDi(0, Gg.InPut2.保压升降气缸缩回) == 0 && Gg.GetExDi(0, Gg.InPut2.保压升降气缸伸出) == 1)
                    {
                        //AddList("保压升降气缸复位OK!");
                        Frm_Production.fProduction.Chart_Time.Enabled = true;
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 40;
                    }
                    else
                    {
                        if (API.GetTickCount() - TimeOut > 2000)
                        {
                            AddList("保压升降气缸伸出信号异常!");
                            ShowList("保压升降气缸伸出信号异常!");
                            TimeOut      = API.GetTickCount();
                            StaWork.Step = 1000;
                        }
                    }
                    break;

                case 40:
                    if (API.GetTickCount() - TimeOut > 100)
                    {
                        Gg.AbsMotion(0, 8, mFunction.Pos.TeachAxis1[1, 1], PVar.ParAxis.Speed[BVar.S3_Z]);
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 50;
                    }
                    break;

                case 50:
                    if (Gg.ZSPD(0, BVar.S3_Z))
                    {
                        Gg.SetExDo(0, 0, Gg.OutPut2.保压升降气缸, 0);
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 60;
                    }
                    break;

                case 60:
                    if (PVar.IsCOM2_Working)
                    {
                        //**保压位置+偏移值=终点最大行程
                        Gg.AbsMotion(0, 8, mFunction.Pos.TeachAxis1[1, 1] + PVar.ParList.Data[22], PVar.ParList.Data[23]);
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 70;
                    }
                    else
                    {
                        AddList("保压站压力传感器异常!");
                        ShowList("保压站压力传感器异常!");
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 1000;
                    }
                    break;

                case 70:
                    if (Gg.ZSPD(0, BVar.S3_Z))
                    {
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 80;
                    }
                    break;

                case 80:
                    if (API.GetTickCount() - TimeOut > PVar.ParList.Data[41] * 1000)
                    {
                        Gg.AbsMotion(0, 8, mFunction.Pos.TeachAxis1[1, 0], PVar.ParAxis.Speed[BVar.S3_Z]);
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 90;
                    }
                    break;

                case 90:
                    if (Gg.ZSPD(0, BVar.S3_Z))
                    {
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 800;
                    }
                    break;

                case 800:
                    Frm_Production.fProduction.Chart_Time.Enabled = false;
                    StaWork.Enable = false;
                    StaWork.Result = true;
                    StaWork.State  = false;
                    StaWork.Step   = 10;
                    break;

                case 1000:
                    StaWork.Enable = false;
                    StaWork.Result = false;
                    StaWork.State  = false;
                    StaWork.Step   = 10;
                    break;

                //严重错误,急停处理
                case 10000:
                    Frm_Engineering.fEngineering.MacStop();
                    break;
                }
            }
            catch (Exception exc)
            {
                string Error_Str  = "";
                string Error_Str1 = "";
                Frm_Engineering.fEngineering.MacStop();
                MessageBox.Show(exc.Message);
                Error_Str  = PVar.BZ_LogPath + DateTime.Now.ToString("yyyyMMdd") + "\\" + DateTime.Now.ToString("yyyyMMdd") + "_代码异常记录" + ".txt";
                Error_Str1 = "\r\n" + "※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※" + "\r\n" +
                             "[" + DateTime.Now.ToString("HH:mm:ss") + "]" + "\r\n" + exc.ToString();
                FileRw.WriteDattxt(Error_Str, Error_Str1);
            }
        }
Exemple #18
0
        /// <summary>
        /// 自动运行
        /// </summary>

        private void AutoRun()
        {
            #region Switch
            switch (AutoRunstep)
            {
            case 10:
                SetStep("CLEAR", Mycolor.None);
                TaskIsWorking = true;
                EventShowResult(EnumShowResult.Empty);
                SetStep("测试工站开始...", Mycolor.None);
                AutoRunstep = 20;
                break;

                #region run to test postion
            case 20:    //运动到测试位置
                Gg.AbsMotion(0, BVar.MMSY, mFunction.Pos.TeachAxis1[0, 2], PVar.ParAxis.Speed[BVar.MMSY]);
                TimeOut = API.GetTickCount();
                SetStep("测试Y轴运动到测试点开始", Mycolor.None);
                AutoRunstep = 30;
                break;

            case 30:
                if (Gg.ZSPD(0, BVar.MMSY))
                {
                    SetStep("测试Y轴运动到达测试位置", Mycolor.None);
                    TimeOut     = API.GetTickCount();
                    AutoRunstep = (Globals.settingMachineInfo.什么机器 == WhichMachine.IPDM) ? 70 : 40;
                }
                break;

            case 40:
                Gg.SetDo(0, Gg.OutPutMMS0.产品定位气缸电磁阀, 1);
                SetStep("定位气缸打开", Mycolor.None);
                TimeOut     = API.GetTickCount();
                AutoRunstep = 50;
                break;

            case 50:
                if (Gg.GetDi(0, Gg.InPutMMS0.气缸到位感应器) == 1)
                {
                    SetStep("定位气缸到定位位置", Mycolor.None);
                    TimeOut     = API.GetTickCount();
                    AutoRunstep = 60;
                }
                else if (API.GetTickCount() - TimeOut > 2000)
                {
                    SetStep("定位气缸缩到定位位置信号异常!", Mycolor.ErrorRed);
                    PostTaskAlarm(XAlarmLevel.STOP, (int)AlarmCode.载具进出气缸伸出信号异常, AlarmCategory.MOTION.ToString(), "载具进出气缸伸出信号异常");
                    AutoRunstep = 8000;
                }
                break;

            case 60:
                if (API.GetTickCount() - TimeOut > 300)
                {
                    SetStep("延时300ms", Mycolor.None);
                    AutoRunstep = 70;
                }
                break;

                #endregion
                #region start test & collect data
            case 70:
                //if (Globals.settingFunc.打开SSH通信 && Globals.SSHconnSt)//SSH打开,且SSH连接成功!
            {
                //SSH.Instance.ExecuteCommand("/Users/gdlocal/Desktop/MMS/" + Globals.settingPara.SSH脚本名字);//运行mini脚本
                SetStep("Send SSH command-start to move Motor!", Mycolor.None);
                DAQ.Instance.PCI9222StartCollect();        //开始收集高度数据
                SetStep("测试开始,开始收集数据", Mycolor.None);
                TimeOut     = API.GetTickCount();
                AutoRunstep = 80;
            }
                //else
                //{
                //    SetStep("SSH功能没打开,或SSH连接失败!", Mycolor.ErrorRed);
                //    SetStep("请确定SSH,退出测试!", Mycolor.ErrorRed);
                //    TimeOut = API.GetTickCount();
                //    AutoRunstep = 290;
                //}
                break;

            case 80:
                //if (API.GetTickCount() - TimeOut > Globals.settingPara.测试超时)
                if (API.GetTickCount() - TimeOut > 2000)
                {
                    SetStep("测试超时,退出测试!", Mycolor.ErrorRed);
                    TimeOut = API.GetTickCount();
                    DAQ.Instance.PCI9222StopCollect();
                    AutoRunstep = 90;
                }
                //if (Globals.SSHstring.Contains("Motor Run Complete"))//SSH feedback string
                //{
                //    SetStep("收到SSH的Motor Run Complete,测试结束!", Mycolor.None);
                //    DAQ.Instance.PCI9222Clear();//stop collect the 9222 data
                //    TimeOut = API.GetTickCount();
                //    AutoRunstep = 90;
                //}
                break;

            case 90:    //save the raw data
                ls.Clear();
                string[] stringheader = new string[] { "Time", "laer_p0", "laer_p1", "laer_p2", "laer_p3", "laer_p4" };
                ls.Add(stringheader);
                for (int i = 0; i < DAQ.Instance.listArray[0].Count - 2; i++)            //最后两组数据不要
                {
                    string[] strarr = new string[6];
                    strarr[0] = DAQ.Instance.listArray[0][i].X.ToString();    //time
                    strarr[1] = DAQ.Instance.listArray[0][i].Y.ToString();    //laser_p0
                    strarr[2] = DAQ.Instance.listArray[1][i].Y.ToString();    //laser_p1
                    strarr[3] = DAQ.Instance.listArray[2][i].Y.ToString();    //laser_p2
                    strarr[4] = DAQ.Instance.listArray[3][i].Y.ToString();    //laser_p3
                    strarr[5] = DAQ.Instance.listArray[4][i].Y.ToString();    //laser_p4
                    ls.Add(strarr);
                }
                string path = PVar.BZ_DataPath + "MMS Data-" + Globals.settingMachineInfo.机器编号 + "\\RAW Displacement Data\\"
                              + DateTime.Now.ToString("yyyyMMdd") + "\\";
                if (System.IO.Directory.Exists(path) == false)
                {
                    System.IO.Directory.CreateDirectory(path);
                }
                Globals.csv.WriteCSV(path + DataManager.Instance.CurrentCheckData.SN + "_" + DateTime.Now.ToString("HH_mm_ss_fff") + "_raw.csv", ls);
                ls.Clear();
                AutoRunstep = 100;
                break;

            case 100:
                AutoRunstep = 110;
                break;

            case 110:
                AutoRunstep = 120;
                break;

            case 120:
                AutoRunstep = 200;
                break;

            case 200:
                AutoRunstep = 210;
                break;

            case 210:
                SetStep("显示测试数据", Mycolor.None);
                #region 产生数据 1tray
                //  "装配时间", "产品条码", "Result", "X", "Y", "A", "Dis"
                DataManager.Instance.CurrentCheckData.StartDate = DateTime.Now.ToString("yyyy-MM-dd");
                DataManager.Instance.CurrentCheckData.StartTime = DateTime.Now.ToString("HH:mm:ss");
                Random rd   = new Random();
                double m_A  = DataManager.Instance.CurrentCheckData.Mod_Brc_A = rd.Next(-1, 1) / 10.0 + rd.Next(-1, 1) / 100.00;
                double m_cc = DataManager.Instance.CurrentCheckData.Mod_Brc_CC = 22 + rd.Next(-1, 1) / 100.0 + rd.Next(0, 1) / 1000.00;
                double m_x  = DataManager.Instance.CurrentCheckData.Mod_Brc_X = rd.Next(-1, 1) / 100.0 + rd.Next(-1, 1) / 1000.00;
                double m_y  = DataManager.Instance.CurrentCheckData.Mod_Brc_Y = rd.Next(-1, 1) / 100.0 + rd.Next(-1, 1) / 1000.00;

                if (tempi % 2 == 1)
                {
                    DataManager.Instance.CurrentCheckData.PASS     = true;
                    DataManager.Instance.CurrentCheckData.PDCAPASS = true;
                    SetStep("the result is Passed", Color.LimeGreen);
                    EventShowResult(EnumShowResult.OK);
                    DataManager.Instance.currentyield.AddOneResult(true);    //update the current yield and month yield
                }
                else
                {
                    DataManager.Instance.CurrentCheckData.PASS     = false;
                    DataManager.Instance.CurrentCheckData.PDCAPASS = false;
                    SetStep("the result is Failed", Color.Red);
                    EventShowResult(EnumShowResult.NG);
                    DataManager.Instance.currentyield.AddOneResult(false);                                                                    //update the current yield and month yield
                }
                DataManager.Instance.chartData.Adddata(m_A.ToString() + "," + m_x.ToString() + "," + m_y.ToString() + "," + m_cc.ToString()); //AddData为更新生产的CPK数据 AddNewData为UPH数据,包括很多东西
                DataManager.Instance.uph.UPHupdate();                                                                                         //UPH update by hour

                if (OnCurrentInf != null)
                {
                    OnCurrentInf(DataManager.Instance.CurrentCheckData);                          //给工程界面的数据显示
                }
                if (OnFlashDataPage != null)
                {
                    OnFlashDataPage();
                }
                tempi++;

                #endregion
                AutoRunstep = 220;
                break;

            case 220:    //PDCA
                DataManager.Instance.CurrentCheckData.Operator_ID  = "0";
                DataManager.Instance.CurrentCheckData.Mode         = "0";
                DataManager.Instance.CurrentCheckData.TestSeriesID = "'201805070859";
                DataManager.Instance.CurrentCheckData.Prioriyt     = "0";
                PDCA_data[0] = DataManager.Instance.CurrentCheckData.Mod_Brc_X.ToString();
                PDCA_data[1] = DataManager.Instance.CurrentCheckData.Mod_Brc_Y.ToString();
                PDCA_data[2] = DataManager.Instance.CurrentCheckData.Mod_Brc_A.ToString();
                PDCA_data[3] = DataManager.Instance.CurrentCheckData.Mod_Brc_CC.ToString();
                PDCA_data[4] = DataManager.Instance.CurrentCheckData.Operator_ID.ToString();
                PDCA_data[5] = DataManager.Instance.CurrentCheckData.Mode.ToString();
                PDCA_data[6] = DataManager.Instance.CurrentCheckData.TestSeriesID.ToString();
                PDCA_data[7] = DataManager.Instance.CurrentCheckData.Prioriyt.ToString();
                PDCA_Step    = 10;
                AutoRunstep  = 240;
                break;

            case 230:    //PDCA
                if (PDCA_Bali(PDCA_data) == FunctionStatus.Finish)
                {
                    DataManager.Instance.CurrentCheckData.PDCAPASS = true;
                    AutoRunstep = 240;
                }
                else if (PDCA_Bali(PDCA_data) == FunctionStatus.Error)
                {
                    DataManager.Instance.CurrentCheckData.PDCAPASS = false;
                    AutoRunstep = 240;
                }
                break;

            case 240:
                #region 从测试数据中取值,保留生产数据
                path = PVar.BZ_DataPath + "MMS Data-" + Globals.settingMachineInfo.机器编号 + "\\PDCA Data\\"
                       + DateTime.Now.ToString("yyyyMM") + "\\";
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.Clear();
                stringBuilder.Append("" + ",");
                stringBuilder.Append(DataManager.Instance.CurrentCheckData.StartDate + ",");
                stringBuilder.Append(DataManager.Instance.CurrentCheckData.StartTime + ",");
                stringBuilder.Append(DataManager.Instance.CurrentCheckData.SN + ",");
                stringBuilder.Append(DataManager.Instance.CurrentCheckData.PASS + ",");
                stringBuilder.Append(DataManager.Instance.CurrentCheckData.PDCAPASS + ",");
                stringBuilder.Append(DataManager.Instance.CurrentCheckData.Mod_Brc_X + ",");
                stringBuilder.Append(DataManager.Instance.CurrentCheckData.Mod_Brc_Y + ",");
                stringBuilder.Append(DataManager.Instance.CurrentCheckData.Mod_Brc_A + ",");
                stringBuilder.Append(DataManager.Instance.CurrentCheckData.Mod_Brc_CC + ",");
                stringBuilder.Append(DataManager.Instance.CurrentCheckData.Operator_ID + ",");
                stringBuilder.Append(DataManager.Instance.CurrentCheckData.Mode + ",");
                stringBuilder.Append(DataManager.Instance.CurrentCheckData.TestSeriesID + ",");
                stringBuilder.Append(DataManager.Instance.CurrentCheckData.Prioriyt + ",");
                string pathtemp = path + DateTime.Now.ToString("yyyyMMdd") + "_PDCA_Data.csv";
                #region save the csv header
                if (File.Exists(pathtemp) == false)
                {
                    StringBuilder stringBuilderHeader = new StringBuilder();
                    stringBuilderHeader.Clear();
                    stringBuilderHeader.Append(" ,StartDate,StartTime,SN,Result,PDCA_Result,X,Y,A,CC,Operator_ID,Mode,TestSeriesID,Prioriyt,\t\n");
                    stringBuilderHeader.Append("Upper Limit,NA,NA,NA,NA,NA,1,2,3,4,\t\n");
                    stringBuilderHeader.Append("Lower Limit,NA,NA,NA,NA,NA,-1,-2,-3,-4,\t\n");
                    stringBuilderHeader.Append("Units,NA,NA,NA,NA,NA,mm,mm,mm,mm,");
                    CsvServer.Instance.WriteLine(pathtemp, stringBuilderHeader.ToString());
                    stringBuilderHeader.Clear();
                }
                #endregion
                CsvServer.Instance.WriteLine(pathtemp, stringBuilder.ToString());
                stringBuilder.Clear();
                #endregion
                AutoRunstep = 290;
                break;

            case 290:
                DAQ.Instance.PCI9222StopCollect();
                AutoRunstep = 300;
                break;

                #endregion
                #region back to wait postion
            case 300:
                Gg.SetDo(0, Gg.OutPutMMS0.产品定位气缸电磁阀, 0);
                SetStep("定位气缸复位......", Mycolor.None);
                TimeOut     = API.GetTickCount();
                AutoRunstep = (Globals.settingMachineInfo.什么机器 == WhichMachine.IPDM) ? 320 : 310;
                break;

            case 310:
                if (Gg.GetDi(0, Gg.InPutMMS0.气缸缩回位置感应器) == 1)
                {
                    SetStep("定位气缸在缩回位置", Mycolor.None);
                    AutoRunstep = 320;
                }
                else if (API.GetTickCount() - TimeOut > 2000)
                {
                    SetStep("定位气缸缩回位置信号异常!", Mycolor.ErrorRed);
                    PostTaskAlarm(XAlarmLevel.STOP, (int)AlarmCode.载具进出气缸缩回信号异常, AlarmCategory.MOTION.ToString(), "载具进出气缸缩回信号异常");
                    AutoRunstep = 8000;
                }
                break;

            case 320:    //等待位置
                Gg.AbsMotion(0, BVar.MMSY, mFunction.Pos.TeachAxis1[0, 0], PVar.ParAxis.Speed[BVar.MMSY]);
                TimeOut     = API.GetTickCount();
                AutoRunstep = 330;
                break;

            case 330:
                if (Gg.ZSPD(0, BVar.MMSY))
                {
                    SetStep("测试y轴运动到初始位置成功…", Mycolor.None);
                    TimeOut     = API.GetTickCount();
                    AutoRunstep = 2000;
                }
                break;

                #endregion
            case 2000:
                StaStop = false;
                StopWatch_Stop();    //stop the CT count
                AutoRunstep   = 0;
                TaskIsWorking = false;
                SetStep("SAVE", Mycolor.None);
                PostTaskAlarm(XAlarmLevel.RST, (int)AlarmCode.位, AlarmCategory.RESET.ToString(), "RST");     //for errorcode
                break;

            case 8000:
                DAQ.Instance.PCI9222Clear();
                SetStep("此步为异常,退出循环", Mycolor.None);
                AutoRunstep = 0;
                StopWatch_Stop();               //stop the CT count
                TaskIsWorking = false;
                SetStep("SAVE", Mycolor.None);
                return;
            }
            SetStepNum(AutoRunstep);
            Task_StopWatchElapsedMilliseconds();//获取CT
            #endregion
        }
Exemple #19
0
        public static void AutoRun(ref PVar.WorkType StaWork)
        {
            try
            {
                switch (StaWork.Step)
                {
                case 10:
                    if (PVar.Stop_Flag == false)
                    {
                        if (Once == false)
                        {
                            if (BVar.FileRorW.ReadINI("Material_index", "是否片料", "有", PVar.PublicParPath) == "有")
                            {
                                StaWork.IsHavePianliao = true;
                            }
                            else
                            {
                                StaWork.IsHavePianliao = false;
                            }
                        }
                        StaWork.State = false;
                        TimeOut       = API.GetTickCount();
                        //StaWork.Step = 20;
                    }
                    break;

                case 20:
                    if (StaWork.State == false && StaWork.Enable)
                    {
                        StaWork.State = true;
                        TimeOut       = API.GetTickCount();
                        StaWork.Step  = 30;
                    }
                    else
                    {
                        if (API.GetTickCount() - TimeOut > 500)
                        {
                            TimeOut      = API.GetTickCount();
                            StaWork.Step = 10;
                        }
                    }
                    break;

                case 30:
                    Once = true;
                    if (StaWork.IsHavePianliao)
                    {
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 10;
                    }
                    else
                    {
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 40;
                    }
                    break;

                case 40:
                    //判断料仓有无物料
                    if (Gg.GetDi(0, Gg.InPut0.片料到位检测) == 1)
                    {
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 60;
                    }
                    else
                    {
                    }
                    break;

                case 60:
                    Gg.SetExDo(0, 0, Gg.OutPut2.夹上摸气缸, 1);
                    Gg.SetExDo(0, 0, Gg.OutPut2.撕摸升降气缸, 0);
                    Gg.SetExDo(0, 0, Gg.OutPut2.片料夹紧气缸左, 1);
                    Gg.SetExDo(0, 0, Gg.OutPut2.片料夹紧气缸右, 1);
                    Gg.SetExDo(0, 0, Gg.OutPut2.拉料无杆干气缸, 0);
                    TimeOut      = API.GetTickCount();
                    StaWork.Step = 70;
                    break;

                case 70:
                    if (Gg.GetExDi(0, Gg.InPut2.夹上摸气缸伸出) == 1 && Gg.GetExDi(0, Gg.InPut2.夹上摸气缸缩回) == 0 &&
                        Gg.GetExDi(0, Gg.InPut2.撕摸升降气缸缩回) == 1 && Gg.GetExDi(0, Gg.InPut2.撕摸升降气缸伸出) == 0 &&
                        Gg.GetExDi(0, Gg.InPut2.片料夹紧气缸左伸出) == 1 && Gg.GetExDi(0, Gg.InPut2.片料夹紧气缸右伸出) == 1 &&
                        Gg.GetExDi(0, Gg.InPut2.拉料无杆干气缸左) == 1 && Gg.GetExDi(0, Gg.InPut2.拉料无杆干气缸右) == 0)
                    {
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 80;
                    }
                    if (API.GetTickCount() - TimeOut > 2000)
                    {
                        if (Gg.GetExDi(0, Gg.InPut2.夹上摸气缸伸出) == 0 || Gg.GetExDi(0, Gg.InPut2.夹上摸气缸缩回) == 1)
                        {
                            AddList("夹上摸气缸伸出信号异常,请检查!");
                            ShowList("夹上摸气缸伸出信号异常,请检查!");
                        }
                        if (Gg.GetExDi(0, Gg.InPut2.撕摸升降气缸缩回) == 0 || Gg.GetExDi(0, Gg.InPut2.撕摸升降气缸伸出) == 1)
                        {
                            AddList("撕摸升降气缸缩回信号异常,请检查!");
                            ShowList("撕摸升降气缸缩回信号异常,请检查!");
                        }
                        if (Gg.GetExDi(0, Gg.InPut2.片料夹紧气缸左伸出) == 0)
                        {
                            AddList("片料夹紧气缸左伸出信号异常,请检查!");
                            ShowList("片料夹紧气缸左伸出信号异常,请检查!");
                        }
                        if (Gg.GetExDi(0, Gg.InPut2.片料夹紧气缸右伸出) == 0)
                        {
                            AddList("片料夹紧气缸右伸出信号异常,请检查!");
                            ShowList("片料夹紧气缸右伸出信号异常,请检查!");
                        }
                        if (Gg.GetExDi(0, Gg.InPut2.拉料无杆干气缸左) == 0 || Gg.GetExDi(0, Gg.InPut2.拉料无杆干气缸右) == 1)
                        {
                            AddList("拉料无杆干气缸左信号异常,请检查!");
                            ShowList("拉料无杆干气缸左信号异常,请检查!");
                        }
                        TimeOut      = API.GetTickCount();
                        BufferStep   = 70;
                        StaWork.Step = 8000;
                    }
                    break;

                case 80:
                    //取片料马达和拉料马达回到初始位置
                    Gg.AbsMotion(0, BVar.S2G_Y, mFunction.Pos.TeachAxis1[3, 0], PVar.ParAxis.Speed[BVar.S2G_Y]);
                    Gg.AbsMotion(0, BVar.S2L_Z, mFunction.Pos.TeachAxis3[3, 3], PVar.ParAxis.Speed[BVar.S2L_Z]);
                    TimeOut      = API.GetTickCount();
                    StaWork.Step = 90;
                    break;

                case 90:
                    if (Gg.ZSPD(0, BVar.S2G_Y) && Gg.ZSPD(0, BVar.S2L_Z))
                    {
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 100;
                    }
                    break;

                case 100:
                    Gg.SetExDo(0, 0, Gg.OutPut2.撕摸升降气缸, 1);
                    TimeOut      = API.GetTickCount();
                    StaWork.Step = 110;
                    break;

                case 110:
                    if (Gg.GetExDi(0, Gg.InPut2.撕摸升降气缸缩回) == 0 && Gg.GetExDi(0, Gg.InPut2.撕摸升降气缸伸出) == 1)
                    {
                        Gg.SetExDo(0, 0, Gg.OutPut2.取底膜破真空, 0);
                        Gg.SetExDo(0, 0, Gg.OutPut2.取片料真空吸, 1);
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 120;
                    }
                    else
                    {
                        if (API.GetTickCount() - TimeOut > 2000)
                        {
                            AddList("撕摸升降气缸伸出信号异常,请检查!");
                            TimeOut      = API.GetTickCount();
                            BufferStep   = 110;
                            StaWork.Step = 8000;
                        }
                    }
                    break;

                case 120:
                    if (Gg.GetDi(0, Gg.InPut0.取片料真空检测) == 1)
                    {
                        Gg.SetExDo(0, 0, Gg.OutPut2.夹上摸气缸, 0);
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 130;
                    }
                    else
                    {
                        if (API.GetTickCount() - TimeOut > 2000)
                        {
                            AddList("取片料真空检测信号异常,请检查!");
                            TimeOut      = API.GetTickCount();
                            BufferStep   = 120;
                            StaWork.Step = 8000;
                        }
                    }
                    break;

                case 130:
                    if (Gg.GetExDi(0, Gg.InPut2.夹上摸气缸缩回) == 1 && Gg.GetExDi(0, Gg.InPut2.夹上摸气缸伸出) == 0)
                    {
                        Gg.SetExDo(0, 0, Gg.OutPut2.撕摸升降气缸, 0);
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 140;
                    }
                    else
                    {
                        if (API.GetTickCount() - TimeOut > 2000)
                        {
                            AddList("夹上摸气缸缩回测信号异常,请检查!");
                            TimeOut      = API.GetTickCount();
                            BufferStep   = 130;
                            StaWork.Step = 8000;
                        }
                    }
                    break;

                case 140:
                    if (Gg.GetExDi(0, Gg.InPut2.撕摸升降气缸缩回) == 1 && Gg.GetExDi(0, Gg.InPut2.撕摸升降气缸伸出) == 0)
                    {
                        Gg.AbsMotion(0, BVar.S2G_Y, mFunction.Pos.TeachAxis1[3, 1], PVar.ParAxis.Speed[BVar.S2G_Y]);
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 150;
                    }
                    else
                    {
                        if (API.GetTickCount() - TimeOut > 2000)
                        {
                            AddList("撕摸升降气缸缩回信号异常,请检查!");
                            TimeOut      = API.GetTickCount();
                            BufferStep   = 140;
                            StaWork.Step = 8000;
                        }
                    }
                    break;

                case 150:
                    if (Gg.ZSPD(0, BVar.S2G_Y))
                    {
                        Gg.SetExDo(0, 0, Gg.OutPut2.撕摸升降气缸, 1);
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 160;
                    }
                    break;

                case 160:
                    if (Gg.GetExDi(0, Gg.InPut2.撕摸升降气缸缩回) == 0 && Gg.GetExDi(0, Gg.InPut2.撕摸升降气缸伸出) == 1)
                    {
                        Gg.SetExDo(0, 0, Gg.OutPut2.取底膜破真空, 0);
                        Gg.SetExDo(0, 0, Gg.OutPut2.取片料真空吸, 1);
                        TimeOut      = API.GetTickCount();
                        StaWork.Step = 120;
                    }
                    else
                    {
                        if (API.GetTickCount() - TimeOut > 2000)
                        {
                            AddList("撕摸升降气缸伸出信号异常,请检查!");
                            TimeOut      = API.GetTickCount();
                            BufferStep   = 110;
                            StaWork.Step = 8000;
                        }
                    }
                    break;


                case 23320:
                    TimeOut      = API.GetTickCount();
                    StaWork.Step = 100;
                    break;

                case 800:
                    StaWork.State = false;
                    StaWork.Step  = 10;
                    break;

                case 1000:
                    StaWork.Result = false;
                    StaWork.State  = false;
                    StaWork.Step   = 10;
                    break;

                //遇到异常,设备先暂停,确定后处理************************
                case 8000:
                    PVar.IsSystemOnPauseMode                        = true;
                    PVar.MacHold                                    = true;
                    PVar.Stop_Flag                                  = false;
                    Frm_Main.fMain.Btn_Start.Enabled                = false;
                    Frm_Main.fMain.Btn_Pause.Enabled                = true;
                    Frm_Main.fMain.Btn_Stop.Enabled                 = false;
                    Frm_Main.fMain.Btn_Start.BZ_BackColor           = PVar.BZColor_UnselectedBtn;
                    Frm_Main.fMain.Btn_Pause.BZ_BackColor           = PVar.BZColor_SelectedEndBtn;
                    Frm_Main.fMain.Btn_Stop.BZ_BackColor            = PVar.BZColor_UnselectedBtn;
                    Frm_Engineering.fEngineering.Auto_Timer.Enabled = false;
                    PVar.LampStatus                                 = 20;
                    StaWork.Step                                    = BufferStep;
                    break;
                }
            }
            catch (Exception exc)
            {
                string Error_Str  = "";
                string Error_Str1 = "";
                Frm_Engineering.fEngineering.MacStop();
                MessageBox.Show(exc.Message);
                Error_Str  = PVar.BZ_LogPath + DateTime.Now.ToString("yyyyMMdd") + "\\" + DateTime.Now.ToString("yyyyMMdd") + "_代码异常记录" + ".txt";
                Error_Str1 = "\r\n" + "※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※" + "\r\n" +
                             "[" + DateTime.Now.ToString("HH:mm:ss") + "]" + "\r\n" + exc.ToString();
                FileRw.WriteDattxt(Error_Str, Error_Str1);
            }
        }
Exemple #20
0
        private void Frm_load_Tick()
        {
            Frm_LoadProcess.Ex = "正在加载参数配置文件...    10%";
            Application.DoEvents();
            PVar.ReDimSpassWord(); //定义用户
            Frm_Engineering.fEngineering.DataGridView_par.RowCount = 12;
            ArrayInit();           //数组重新定义
            for (short i = 0; i <= 99; i++)
            {
                PVar.BarcodeArrayList[i] = BVar.FileRorW.ReadINI((i).ToString(), "SN", "", PVar.ListDataIniPath);
            }
            Frm_Engineering.ReadParAxis(PVar.ParAxisPath, PVar.ParAxis);//读取机械参数
            Frm_Par       FrmPar       = new BZGUI.Frm_Par();
            Frm_Parameter FrmParameter = new Frm_Parameter();

            FrmPar.Par_Normal("Read"); //加载参数界面参数
            if (!PVar.IsReadParData)
            {
                if (Interaction.MsgBox("ReadParData()函数读取数据失败,程序拒绝加载!", Constants.vbExclamation, "重要参数文件") == Constants.vbOK)
                {
                    ProjectData.EndApp();
                }
            }

            mFunction.ReDimData();
            mFunction.ReadPosData(PVar.BZ_ParameterPath + "\\PosData.dat", mFunction.Pos);
            if (!PVar.IsReadPosData)
            {
                if (Interaction.MsgBox("ReadPosData()函数读取数据失败,程序拒绝加载!", Constants.vbExclamation, "重要参数文件") == Constants.vbOK)
                {
                    ProjectData.EndApp();
                }
            }

            Frm_LoadProcess.Ex = "正在初始化工程界面...    70%";
            Application.DoEvents();
            MainUserNameDisplay(); //新用户添加到主界面
            if (MainUserName.Items.Count <= 0)
            {
                PVar.Login.NewGroup[1]         = "Engineering";
                PVar.Login.NewUser[0]          = "Engineering";
                PVar.Login.NewPassword[0]      = "BZ";
                PVar.Login.NewUserAuthority[0] = 2;
                MainUserName.Items.Add(PVar.Login.NewUser[0]);
                Frm_Login.fLogin.MainUserName.Items.Add(PVar.Login.NewUser[0]);
                FileRw.WriteDatFilePassWord(PVar.BZ_ParameterPath + "PassWord.dat", PVar.Login);
            }
            PVar.LampStatus       = 10;
            Btn_Stop.BZ_BackColor = PVar.BZColor_SelectedEndBtn;
            Frm_Engineering.fEngineering.Show(this);
            Frm_Engineering.fEngineering.Visible = false;
            Frm_Production FrmProduction = new Frm_Production();

            FrmProduction.Show(this);
            Frm_Production.fProduction.Visible = false;
            Btn_Pause.Enabled         = false;
            Btn_Stop.Enabled          = false;
            PVar.IsOpenFrmEngineering = false;
            PVar.IsOpenFrmProduction  = false;
            Frm_Engineering.fEngineering.TestDataGridInit(); //加载表格数据
            Frm_LoadProcess.Ex = "正在初始化运动控制卡...    95%";
            Application.DoEvents();
            Gg.GTS_MotionInit(0, 8, (new Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase()).Info.DirectoryPath + "\\GTS_Config\\GTS800-00.cfg");

            Gg.GTS_MotionInit(1, 4, (new Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase()).Info.DirectoryPath + "\\GTS_Config\\GTS400-01.cfg");

            Gg.GTS_ExtmdlInit(2, (new Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase()).Info.DirectoryPath + "\\GTS_Config\\ExtModule.cfg");
            Command.Com3_Send("LMD,4SPLN,00" + ",000,000,000,000,"); //关闭所有光源
            if (PVar.IsCOM3_Working == false)
            {
                AddList("光源控制器通信异常!");
                ShowList("光源控制器通信异常!");
            }
            else
            {
                AddList("光源控制器通信OK!");
            }
            Frm_LoadProcess.Ex = "加载完成...    100%";
            Application.DoEvents();
            PVar.WorkMode = 0;
            //WriteCsvErrorCodePRE();
            this.Show();
        }