固高运动卡的使用 <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

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理

在线客服
在线客服
QQ客服