固高运动卡的使用 <4> 运动之PT(点位)运动

 

理论篇:

PT运动是机器轴运动中的一种模式,它具备独立性,可以独立设置某个轴脉冲距离。相比Jog运动,PT运动具有一定目的性,一般跑完一次规划的脉冲段就会停下来。

调用 GT_Update 指令启动点位运动以后,控制器根据设定的运动参数自动生成相应的梯形曲线 速度规划,并且在运动过程中可以随时修改目标位置和目标速度。

关于参数中的平滑时间:相比Jog运动,PT运动没有平滑系数,但它具有平滑时间这个参数。这个平滑时间可以改变变速运动的变速时间,从而达到轴相对平滑地运动。

对于PT运动,固高提供了以下方法进行调用:

建立PT运动步骤:

1、设置轴为PT运动模式

2、打开伺服驱动

3、设置PT运动参数

4、设置轴运动速度

5、启动PT运动

 

代码实战:

前台设计:

C#代码:

 public partial class Form1 : Form
    {
        //控制卡卡号
        static short _cardNum = 0;
        //当前轴
        short _axis;
        //目标脉冲距离
        int _distance;
        //速度
        double _vel;
        //加速度
        double _acc;
        //减速度
        double _dec;
        //平滑时间
        short _smoothTime;
        public Form1()
        {
            InitializeComponent();
            //启动固高运动控制卡
            new GT.GTS_Start(0, Application.StartupPath + "\\GTS800_1.cfg", -1, false, Application.StartupPath + "\\ExtModule.cfg");
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //添加默认值
            this.textBox1.Text = "1";

            this.textBox3.Text = "15";
            this.textBox4.Text = "0.1";
            this.textBox5.Text = "0.1";
            this.textBox6.Text = "25";

            //添加but事件
            this.button1.Click += button_Click;
            this.button2.Click += button_Click;
        }
        private void button_Click(object sender, EventArgs e)
        {
            string text = (sender as Button).Text;
            //轴号
            _axis = short.Parse(this.textBox1.Text);
            //目标脉冲距离
            _distance = int.Parse(this.textBox2.Text);
            //目标速度
            _vel = double.Parse(this.textBox3.Text);
            //加速度
            _acc = double.Parse(this.textBox4.Text);
            //减速度
            _dec = double.Parse(this.textBox5.Text);
            //平滑系数
            _smoothTime = short.Parse(this.textBox6.Text);
            if (text == "反向")
            {
                _distance = -_distance;
            }
            PT(_axis, _distance, _vel, _acc, _dec, _smoothTime);
        }
        //点位运动
        public void PT(short _axis, int _distance, double _vel, double _acc, double _dec, short _smoothTime) {
            //清除各轴的报警和限位
            GTS.GT_ClrSts(_cardNum, _axis,1);
            //打开伺服使能
            GTS.GT_AxisOn(_cardNum, _axis);
            //位置清零
            GTS.GT_ZeroPos(_cardNum, _axis,1);
            //当前轴规划位置清零
            GTS.GT_SetPrfPos(_cardNum, _axis, 0);
            //将当前轴设为点位模式
            GTS.GT_PrfTrap(_cardNum, _axis);
            GTS.TTrapPrm prm = new GTS.TTrapPrm();
            //读取点位运动参数
            GTS.GT_GetTrapPrm(_cardNum, _axis, out prm);
            //修改点位运动参数
            prm.acc = _acc;
            prm.dec = _dec;
            prm.smoothTime = _smoothTime;
            //设置点位运动参数
            GTS.GT_SetTrapPrm(_cardNum, _axis, ref prm);
            //设置当前轴的目标位置
            GTS.GT_SetPos(_cardNum, _axis, _distance);
            //设置当前轴的目标速度
            GTS.GT_SetVel(_cardNum, _axis, _vel);
            //启动当前轴的运动
            GTS.GT_Update(_cardNum, (1 << (_axis - 1)));
            //监听轴状态
            int pSts = 0;
            uint pClock;
            do
            {

                GTS.GT_GetSts(_cardNum, _axis, out pSts, 1, out pClock);
                //检测轴运动是否到达规划位置
            } while (Convert.ToBoolean(pSts & (int)0x400));
            //运动完毕后关闭伺服
            //GTS.GT_AxisOff(_cardNum, _axis);
        }
    }

注意:由于每个轴的丝杆导程不同,需要进行实际运动距离与脉冲量换算。

           关于所需环境,参见:https://blog.csdn.net/weixin_44490080/article/details/101468746

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值