一、步骤
1) 打开运动控制器,GT_Open();
2) 复位运动控制器,GT_Reset()。复位后默认的控制模式为“脉冲+方向”的脉冲控制方式。 若不是采用“脉冲+方向”的控制方式,则可调用 GT_StepPulse()修改;当需要还原为“脉 冲+方向”的控制方式时,则可调用 GT_StepDir()指令;
3) 检查相关轴驱动器报警信号有没有连接。(一般若采用步进电机,可能没有驱动器报警信 号),若没有连接,则应该调用 GT_AlarmOff()指令,使驱动器报警无效,默认是有效的;
4) 检查相关轴的限位开关,若没有连接,则需要通过调用 GT_LmtsOff(),使限位无效,默认 是有效的;若有连接,则要检查触发电平是否设置正确,可通过 GT_LmtSns()指令修改;
5) 在确认前面两步操作之后,调用 GT_ClrSts(),更新设置的状态;
6) 调用 GT_AxisOn(),使能驱动器,这样相应的电机便能工作了;
7) 使轴运动,运动后,若出现编码器位置和规划位置方向不一致,则可通过调用 GT_EncSns() 改变编码器的计数方向。
二、代码
将第 1 轴设定为点位运动模式,并且以速度 50pulse/ms,加速度 0.25pulse/ms2,减速度 0.125pulse/ms2,平滑时间为 25ms 的运动参数正向运动 50000 个脉冲。
#include "stdafx.h"
#include "conio.h"
#include "gts.h"
// 定义轴号
#define AXIS 1
int main(int argc, char* argv[])
{
short sRtn = 0;
TTrapPrm trap{};
long sts = 0;
double prfPos = 0;
// 打开运动控制器
sRtn = GT_Open();
// 指令返回值检测
commandhandler("GT_Open", sRtn);
// 系统复位
sRtn = GT_Reset();
commandhandler("GT_Reset", sRtn);
// 配置轴1脉冲输出方式为脉冲+方向
sRtn = GT_StepDir(1);
commandhandler("GT_StepDir", sRtn);
// 配置轴1报警输出无效
sRtn = GT_AlarmOff(1);
commandhandler("GT_AlarmOff", sRtn);
// 配置轴1正负限位无效
sRtn = GT_LmtsOff(1, -1);
commandhandler("GT_LmtsOff", sRtn);
// 配置运动控制器
// 注意:配置文件取消了各轴的报警和限位
sRtn = GT_LoadConfig("test.cfg");
commandhandler("GT_LoadConfig ", sRtn);
// 清除各轴的报警和限位
sRtn = GT_ClrSts(1, 8);
commandhandler("GT_ClrSts", sRtn);
// 伺服使能
sRtn = GT_AxisOn(AXIS);
commandhandler("GT_AxisOn", sRtn);
// 位置清零
sRtn = GT_ZeroPos(AXIS);
commandhandler("GT_ZeroPos", sRtn);
// AXIS轴规划位置清零
sRtn = GT_SetPrfPos(AXIS, 0);
commandhandler("GT_SetPrfPos", sRtn);
// 将AXIS轴设为点位模式
sRtn = GT_PrfTrap(AXIS);
commandhandler("GT_PrfTrap", sRtn);
// 读取点位运动参数
sRtn = GT_GetTrapPrm(AXIS, &trap);
commandhandler("GT_GetTrapPrm", sRtn);
trap.acc = 0.25;
trap.dec = 0.125;
trap.smoothTime = 25;
// 设置点位运动参数
sRtn = GT_SetTrapPrm(AXIS, &trap);
commandhandler("GT_SetTrapPrm", sRtn);
// 设置AXIS轴的目标位置
sRtn = GT_SetPos(AXIS, 50000L);
commandhandler("GT_SetPos", sRtn);
// 设置AXIS轴的目标速度
sRtn = GT_SetVel(AXIS, 50);
commandhandler("GT_SetVel", sRtn);
// 启动AXIS轴的运动
sRtn = GT_Update(1 << (AXIS - 1));
commandhandler("GT_Update", sRtn);
do {
// 读取AXIS轴的状态
sRtn = GT_GetSts(AXIS, &sts);
// 读取AXIS轴的规划位置
sRtn = GT_GetPrfPos(AXIS, &prfPos);
printf("sts=0x%-10lxprfPos=%-10.1lf\r", sts, prfPos);
}
while (sts & 0x400);// 等待AXIS轴规划停止
// 伺服关闭
sRtn = GT_AxisOff(AXIS);
printf("\nGT_AxisOff()=%d\n", sRtn);
getch();
return 0;
}