예제 #1
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);
        }
예제 #2
0
파일: Form1.cs 프로젝트: yisea123/smtm
        private void button1_Click(object sender, EventArgs e)
        {
            double start_vel, max_vel, acc, dec;
            int    dist;
            int    rc = 0;

            start_vel = Convert.ToDouble(textBox1.Text);
            max_vel   = Convert.ToDouble(textBox2.Text);
            acc       = Convert.ToDouble(textBox3.Text);
            dec       = Convert.ToDouble(textBox4.Text);
            dist      = Convert.ToInt32(textBox5.Text);
            CPci9014.p9014_set_t_profile(m_axis, start_vel, max_vel, acc, dec);

            switch (m_type)
            {
            case 0:
            {
                CPci9014.p9014_pmove(m_axis, dist, 0, 2);
                break;
            }

            case 1:
            {
                CPci9014.p9014_vmove(m_axis, 1, 2);
                break;
            }

            case 2:
            {
                CPci9014.p9014_vmove(m_axis, 0, 2);
                break;
            }
            }

            if (rc != 0)
            {
                MessageBox.Show("Stop Axis fail,return code:" + Convert.ToString(rc));
            }
        }
예제 #3
0
        /// <summary>
        /// 距离间的运动;
        /// </summary>
        /// <param name="axinfo"></param>
        /// <param name="VStart"></param>
        /// <param name="VMax"></param>
        /// <param name="MovePosition"></param>
        /// <param name="MovedDistance"></param>
        /// <returns></returns>
        public override ErrorInfo SectionMotion(PCI9014AxisInfo axinfo, int VStart, int VMax, int MovePosition, int MovedDistance)
        {
            int requesttimes = 0;

            while (CPci9014.p9014_set_t_profile(axinfo.No, VStart, VMax, axinfo.AccTime, axinfo.DecTime) != 0)
            {
                Thread.Sleep(10);
            }
            while (CPci9014.p9014_pmove(axinfo.No, MovePosition, 0, 2) != 0)
            {
                Thread.Sleep(10);
            }
            //Thread.Sleep(10);
            while (true)
            {
                if (IsMotionDone(axinfo) == 0)
                {
                    break;
                }
                Thread.Sleep(50);
            }
            while (GetCurrentPos(axinfo) != 0)
            {
                Thread.Sleep(10);
                requesttimes++;
                if (requesttimes == 100)
                {
                    Log.GetInstance().ErrorWrite("获取当前位置失败!");
                    return(ErrorInfo.ErrorCmdExcuteFail);
                }
            }
            if (System.Math.Abs((double)axinfo.curPos - (double)MovedDistance) > 1000)     //实际位置和期望位置误差太大,超过了1000
            {
                Log.GetInstance().ErrorWrite("运动完成了,但实际位置和期望位置误差大于1000脉冲!");
                return(ErrorInfo.ErrorNotMoveToCorrectPos);
            }
            return(ErrorInfo.ErrorSucceed);
        }
예제 #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);
        }
예제 #5
0
 /// <summary>
 /// 点位绝对运动(单个轴点到点的驱动,根据不同模式做出不同的加减速)
 /// </summary>
 /// <param name="axinfo"></param>
 /// <returns></returns>
 public override int PAbsoluteMove(SingleDemura.PCI9014AxisInfo axinfo)
 {
     return(CPci9014.p9014_pmove(axinfo.No, axinfo.cmdPos, 1, 2));
 }