Beispiel #1
0
        /// <summary>
        /// 单轴回原点;
        /// </summary>
        /// <param name="axisinfo"></param>
        /// <param name="BitNum"></param>
        /// <returns></returns>
        public override int SingleAxisHomeBack(PCI9014AxisInfo axisinfo, uint BitNum)
        {
            int waittime         = 0;
            int res              = 0;
            int FindORLCondition = 0;

            res = CPci9014.p9014_set_t_profile(axisinfo.No, axisinfo.HomeBackSpeed, axisinfo.HomeBackSpeed, axisinfo.AccTime, axisinfo.DecTime);
            res = CPci9014.p9014_home_move(axisinfo.No, FindORLCondition);//设置为反向查找;
            if (res != 0)
            {
                Log.GetInstance().ErrorWrite("回原点失败!!");
                return(res);
            }
            while (true)
            {
                if (waittime == 50)
                {
                    Log.GetInstance().ErrorWrite(string.Format("{0}回原点超时!!", axisinfo.AxisName));
                    Global.AxisControlCard.Stop(axisinfo);
                    return(res);
                }
                waittime++;
                res = (int)Global.AxisControlCard.GetInBit(0, BitNum);
                if (res == 2)
                {
                    continue;
                }
                else if (res == 1 && axisinfo.AxisName == "检测相机")
                {
                    Log.GetInstance().ErrorWrite(string.Format("{0}-运动轴报警!!!", axisinfo.AxisName));
                    Global.AxisControlCard.Stop(axisinfo);
                    return(res);
                }
                else if (res == 0 && axisinfo.AxisName == "遮光幕布")
                {
                    Log.GetInstance().ErrorWrite(string.Format("{0}-运动轴报警!!!", axisinfo.AxisName));
                    Global.AxisControlCard.Stop(axisinfo);
                    return(res);
                }
                res = (int)IsMotionDone(axisinfo);
                if (res == 2)
                {
                    Log.GetInstance().ErrorWrite("获取运动状态失败!!");
                    break;
                }
                else if (res == 0)
                {
                    Log.GetInstance().NormalWrite(string.Format("{0}轴的运动状态已停止!!", axisinfo.AxisName));
                    break;
                }
                Thread.Sleep(1000);
            }
            return(res);
        }
Beispiel #2
0
        /// <summary>
        /// 单轴回负极线位置;
        /// </summary>
        /// <param name="axisinfo"></param>
        /// <returns></returns>
        public override int SingleAxisBackWorkPos(PCI9014AxisInfo axisinfo)
        {
            int res = 0;

            if (IsORG(axisinfo) != 1)
            {
                res = CPci9014.p9014_set_t_profile(axisinfo.No, axisinfo.HomeBackSpeed, axisinfo.HomeBackSpeed, axisinfo.AccTime, axisinfo.DecTime);
                res = CPci9014.p9014_home_move(axisinfo.No, 0);//设置为反向查找;
                while (true)
                {
                    if (IsMotionDone(axisinfo) == 0)
                    {
                        break;
                    }
                    Thread.Sleep(100);
                }
                if (res != 0)
                {
                    Log.GetInstance().ErrorWrite("测试完成后回原点失败!!");
                    return(res);
                }
                res = IsORG(axisinfo);
                if (res != 1)
                {
                    Log.GetInstance().ErrorWrite("测试完成回后原点失败!!");
                    return(res);
                }
            }

            axisinfo.cmdPos = axisinfo.WorkPosition1;
            res             = CPci9014.p9014_set_t_profile(axisinfo.No, axisinfo.startSpeed, axisinfo.maxSpeed, axisinfo.AccTime, axisinfo.DecTime);
            res             = CPci9014.p9014_pmove(axisinfo.No, axisinfo.cmdPos, 0, 2);
            //检查运动是否完成,且检查运动轴是否报警;

            while (true)
            {
                if (IsMotionDone(axisinfo) == 0)
                {
                    break;
                }
                Thread.Sleep(50);
            }

            if (Global.AxisControlCard.GetCurrentPos(axisinfo) == 0)
            {
                if (System.Math.Abs(axisinfo.curPos - axisinfo.cmdPos) > 1000)
                {
                    Log.GetInstance().ErrorWrite("与目标位置相差大于1000个脉冲!!");
                    res = 2;
                }
            }
            return(res);
        }
Beispiel #3
0
 public override int HomeMove(SingleDemura.PCI9014AxisInfo axinfo, int dir)
 {
     return(CPci9014.p9014_home_move(axinfo.No, dir));
 }
Beispiel #4
0
        /// <summary>
        /// 回原运动
        /// </summary>
        /// <param name="axbase"></param>
        /// <returns></returns>
        public override int HomeAllAxis(PCI9014AxisInfo SetAxis)
        {
            Log.GetInstance().WarningWrite("正在回原点,请等待......");

            //当处于原点时,需要往正向移动一定距离,然后再进行复位动作,保证每次复位位置一致
            int res = 0;

            res = IsORG(SetAxis);
            if (res == 1)
            {
                Log.GetInstance().WarningWrite(string.Format("{0}--已经在原点位置无需回原运动!", SetAxis.AxisName));
                goto WorkPos;
            }
            else if (res == 2)
            {
                return((int)(ErrorInfo.ErrorCmdExcuteFail));
            }

            CPci9014.p9014_set_t_profile(SetAxis.No, SetAxis.startSpeed, SetAxis.maxSpeed, SetAxis.AccTime, SetAxis.DecTime);
            CPci9014.p9014_pmove(SetAxis.No, SetAxis.StartBackHomeDis, 0, 2);

            while (true)
            {
                if (IsMotionDone(SetAxis) == 0)
                {
                    break;
                }
                Thread.Sleep(50);
            }
            //固定回原速度,起止速度相同;
            CPci9014.p9014_set_t_profile(SetAxis.No, SetAxis.HomeBackSpeed, SetAxis.HomeBackSpeed, SetAxis.AccTime, SetAxis.DecTime);
            CPci9014.p9014_home_move(SetAxis.No, 0);

            while (true)
            {
                if (IsMotionDone(SetAxis) == 0)
                {
                    break;
                }
                Thread.Sleep(50);
            }

            Thread.Sleep(100);
            res = IsORG(SetAxis);
            if (res == 1)
            {
                Log.GetInstance().WarningWrite("回原点成功!!");
            }
            else
            {
                Log.GetInstance().ErrorWrite("回原点失败!!");
                return((int)ErrorInfo.ErrorCmdExcuteFail);
            }

            Log.GetInstance().WarningWrite(string.Format("{0}--准备运动到工作位置!", SetAxis.AxisName));

            res = Global.AxisControlCard.GetCurrentPos(SetAxis);
            if (res != 0)
            {
                Log.GetInstance().ErrorWrite("获取当前位置失败!!");
                return((int)ErrorInfo.ErrorCmdExcuteFail);
            }

            WorkPos : SetAxis.cmdPos = SetAxis.WorkPosition1 - SetAxis.curPos;

            res = Global.AxisControlCard.PRelativeMove(SetAxis);

            if (res != (int)ErrorInfo.ErrorSucceed)
            {
                Log.GetInstance().ErrorWrite(string.Format("{0}运动失败!!", SetAxis.AxisName));
                return((int)ErrorInfo.ErrorCmdExcuteFail);
            }

            return((int)ErrorInfo.ErrorSucceed);
        }