理论篇:
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