GEN回零调试

一.根据motionstudio软件检测各部件完备;

二.调试点位模式的CPP测试程序

        其中,配置文件如下:

         回零相关(就是轴状态同步):

 下面是相关代码:

// 例程 7-1 点位运动
//#include "stdafx.h"
#include "windows.h"
#include "conio.h"
#include "gts.h"

#include <iostream>
using namespace std;

#define AXIS		1

// 该函数检测某条GT指令的执行结果,command为指令名称,error为指令执行返回值
void commandhandler(const char* command, short error)
{
	// 如果指令执行返回值为非0,说明指令执行错误,向屏幕输出错误结果
	if (error)
	{
		printf("%s = %d\n", command, error);
	}
}
int main(int argc, char* argv[])
{
	short sRtn, rtn, status;
	TTrapPrm trap;
	long sts;
	double prfPos;

	long lAxisStatus; // 轴状态
	unsigned short sHomeSts; // 回零状态
	bool bStop = false;
	long ecatEncpos;



	// 打开运动控制器
	sRtn = GTN_Open();
	// 指令返回值检测
	commandhandler("GTN_Open", sRtn);

	rtn = GTN_InitEcatComm(1);
	if (rtn) {
		printf("EtherCAT communication error\n");
		return -1;
	}
	//*wait untill EtherCAT comminication OK*/
	do {
		rtn = GTN_IsEcatReady(1, &status);
	} while (status != 1 || rtn != 0);

	rtn = GTN_StartEcatComm(1);
	rtn = GTN_Reset(1);
	rtn = GTN_LoadConfig(1, const_cast<char*>("test.cfg"));

	// 清除各轴的报警和限位
	sRtn = GTN_ClrSts(1, 1, 8);
	commandhandler("GTN_ClrSts", sRtn);
	// 伺服使能
	sRtn = GTN_AxisOn(1, AXIS);
	commandhandler("GTN_AxisOn", sRtn);

	// 位置清零
	sRtn = GTN_ZeroPos(1, AXIS);
	commandhandler("GTN_ZeroPos", sRtn);
	// AXIS轴规划位置清零
	sRtn = GTN_SetPrfPos(1, AXIS, 0);
	commandhandler("GTN_SetPrfPos", sRtn);
	// 将AXIS轴设为点位模式
	sRtn = GTN_PrfTrap(1, AXIS);
	commandhandler("GTN_PrfTrap", sRtn);
	// 读取点位运动参数
	sRtn = GTN_GetTrapPrm(1, AXIS, &trap);
	commandhandler("GTN_GetTrapPrm", sRtn);
	trap.acc = 0.25;
	trap.dec = 0.125;
	trap.smoothTime = 50;
	// 设置点位运动参数
	sRtn = GTN_SetTrapPrm(1, AXIS, &trap);
	commandhandler("GTN_SetTrapPrm", sRtn);


	/*sRtn = GTN_GetEcatEncPos(1, 1, &ecatEncpos);
	sRtn = GTN_SetPrfPos(1, 1, ecatEncpos);
	sRtn = GTN_SetEncPos(1, 1, ecatEncpos);
	sRtn = GTN_SynchAxisPos(1, 1);*/

	// 设置AXIS轴的目标位置
	sRtn = GTN_SetPos(1, AXIS, 500000L);
	commandhandler("GTN_SetPos", sRtn);
	// 设置AXIS轴的目标速度
	sRtn = GTN_SetVel(1, AXIS, 30);
	commandhandler("GTN_SetVel", sRtn);
	// 启动AXIS轴的运动
	sRtn = GTN_Update(1, 1 << (AXIS - 1));
	commandhandler("GTN_Update", sRtn);

	 //std::cout << "ecatEncpos = " << ecatEncpos << std::endl;

	do
	{
		// 读取AXIS轴的状态
		sRtn = GTN_GetSts(1, AXIS, &sts);
		// 读取AXIS轴的规划位置
		sRtn = GTN_GetPrfPos(1, AXIS, &prfPos);
		printf("sts=0x%-10lxprfPos=%-10.1lf\r", sts, prfPos);
	} while (sts & 0x400);	// 等待AXIS轴规划停止

	sRtn = GTN_GetEcatEncPos(1, 1, &ecatEncpos);

	std::cout << "ecatEncpos = " << ecatEncpos << std::endl;

	// 伺服关闭
	sRtn = GTN_AxisOff(1, AXIS);
	printf("\nGTN_AxisOff()=%d\n", sRtn);
	_getch();
	return 0;

}

三.根据上述调试程序来调GTN中的绝对回零程序

1.首先加动态链接库的中的八个文件放入工作目录中;

 2.再将Gecat.xml配置文件放到输出目录下;

 3.清除底层下位机的相关配置(以下文件中的配置全删除)

 4.在三个文件夹中加入新的配置

5.ethcat通讯初始化

		GTN_InitEcatComm(1);

		short rtn, status;
		//*wait untill EtherCAT comminication OK*/
		do {
			rtn = GTN_IsEcatReady(1, &status);
		} while (status != 1 || rtn != 0);

		GTN_StartEcatComm(1);

6.注释以下代码;

7.用以下代码替换 

if (m_pAxises[i]->inuse() && i != 7) {
				GTN_GetEcatEncPos(1, i, &ecatEncpos);
				GTN_SetPrfPos(1, i, ecatEncpos);
				GTN_SetEncPos(1, i, ecatEncpos);
				GTN_SynchAxisPos(1, 1);
				m_pAxises[i]->move(0.0, 0.4 * m_pAxises[i]->maxVelocity(), 25/*平滑时间,单位:ms,取值范围:[0, 50]*/);

			}

8.修改代码参数

 9.轴参数配置

四.在第三点的绝对位置调零的基础上进行相对位置的回零

        相对位置的回零即是,在机器人各轴运行的过程中将当前位置设为相对零点,就是要把当前位置的脉冲量给记录下来,然后在以后各轴的运动过程中,可以在点击回零键,各轴能自动调整到那个记录的相对位置;

        1.在头文件中定义一个存储当前各轴位置脉冲量的double容器;

        2.在GTN Open状态后对其进行初始化为0.0,若后面操作时不设零点,那么各轴就回到绝对零点;

         3.在SetHome中,将当前各轴位置存入curRelZeroPos容器中;

       注意在debug模式下,可能会报curRelZeroPos空值异常,因为clear();

        所以需要在curRelZeroPos.clear();后加上curRelZeroPos.resize(AXIS_COUNT);

        4.将move函数中的位置改为存储的相对位置;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值