コード例 #1
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
        }
コード例 #2
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;
                }
            }
        }