⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtcardapi.cpp

📁 关于固高卡的包装的api函数和轴状态以及坐标系状态下的状态实时读取及显示
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			rtn = 1;
		}
	} 

	return rtn;
}

// 功  能:立即停止指定轴
//
//
// 参  数: axis的取值 (1) axis  <= 0 立即停止所有的轴
//					  (2) 1 , 2 , 3 ,4 时使指定的轴
//
// 返回值: 1表示有错误发生
//			0表示命令执行成功
int Gt_Card_Api::set_axis_estop(int axis)
{
	int i;
	int k;
	int rtn = 0;

	if(axis > Sys_Max_Axis_Num)
		return -1;

	if(axis <= 0)
	{
		i = 1;
		k = Sys_Max_Axis_Num;
	}
	else
		{
			i = axis;
			k = axis;
		}

	for( ; i <= k  ; i++) 
	{ 
		if(GT_Axis(i))//设置第i 轴为当前轴
		{
			rtn = 1;
		}

		if(GT_AbptStp())
		{
			rtn = 1;
		}
	} 

	return rtn;
}

// 功  能:获取当前轴的实际位置,以um为单位
//
//
// 参  数: axis的取值 (1) axis  <= 0 无效的参数
//					  (2) 1 , 2 , 3 ,4 时使指定的轴
//			pos	存放位置信息缓冲区
//
// 返回值: 1表示有错误发生
//			0表示命令执行成功
int Gt_Card_Api::get_axis_pos(int axis , long *pos)
{
	int rtn = 0;

	if(check_axis_user(axis))
		return 1;

	if(GT_Axis(axis))//设置第i 轴为当前轴
		rtn = 1;

	if(GT_GetAtlPos(pos)) 
		rtn = 1;

	*pos = motion_to_cmd_pos(axis,*pos);

	return rtn;
}

// 功  能:调用该函数将当前轴的实际位置和目标位置以及控制当前控制
//		   周期的规划位置修改为设定值
//
//
// 参  数: axis的取值 (1) axis  <= 0 无效的参数
//					  (2) 1 , 2 , 3 ,4 时使指定的轴
//			pos	设置的位置信息
//
// 返回值: 1表示有错误发生
//			0表示命令执行成功
int Gt_Card_Api::set_axis_pos(int axis , long pos)
{
	int rtn = 0;

	if(check_axis_user(axis))
		return 1;

	if(GT_Axis(axis))//设置第i 轴为当前轴
		rtn = 1;

	pos = cmd_to_motion_pos(axis,pos);

	if(GT_SetAtlPos(pos)) 
		rtn = 1;

	return rtn;
}

// 功  能:该函数获得当前轴要运动到的目标位置位置值
//
//
// 参  数: axis的取值 (1) axis  <= 0 无效的参数
//					  (2) 1 , 2 , 3 ,4 时使指定的轴
//			pos	存放位置信息缓冲区
//
// 返回值: 1表示有错误发生
//			0表示命令执行成功
int Gt_Card_Api::get_dest_pos(int axis , long *pos)
{
	int rtn = 0;

	if(check_axis_user(axis))
		return 1;

	if(GT_Axis(axis))//设置第i 轴为当前轴
		rtn = 1;

	if(GT_GetPos(pos)) 
		rtn = 1;

	*pos = motion_to_cmd_pos(axis,*pos);

	return rtn;
}

// 功  能:该函数设置当前轴要运动到的目标位置位置值,
//		   系统此时并不立刻运动除非马上调用GT_Update
//
//
// 参  数: axis的取值 (1) axis  <= 0 无效的参数
//					  (2) 1 , 2 , 3 ,4 时使指定的轴回参考点
//			pos	设置的位置信息
//
// 返回值: 1表示有错误发生
//			0表示命令执行成功
int Gt_Card_Api::set_dest_pos(int axis , long pos)
{
	int rtn = 0;

	if(check_axis_user(axis))
		return 1;

	if(GT_Axis(axis))//设置第i 轴为当前轴
		rtn = 1;

	pos = cmd_to_motion_pos(axis,pos);

	if(GT_SetPos(pos)) 
		rtn = 1;

	return rtn;
}

// 功  能:当前轴是否在运动(判断单个轴的时候才有效,若是多个轴,不知道是哪个轴在运动)
//
// 参  数: axis的取值 (1) axis  <= 0 判断有的轴运动是否完运动
//					  (2) 1 , 2 , 3 ,4 时使指定的轴
//
// 返回值:1表示在运动
//		   0表示没有运动
//		  -1表示检测时出错
int Gt_Card_Api::get_axis_den(int axis)
{
	int i;
	int k;
	int rtn = 0;

	unsigned short status; 

	if(axis > Sys_Max_Axis_Num)
		return -1;

	if(axis <= 0)
	{
		i = 1;
		k = Sys_Max_Axis_Num;
	}
	else
		{
			i = axis;
			k = axis;
		}

	for( ; i <= k  ; i++) 
	{ 
		if(GT_Axis(i))//设置第i 轴为当前轴
		{
			rtn = -1;
			break;
		}

		if(GT_GetSts(&status)) //读取状态值
		{
			rtn = -1;
			break;
		}

		if((status&0x400)) //当前轴是否在运动
			rtn = 1;

	} 

	return rtn;
}

// 功  能:检测当前轴是否有错误
//
// 参  数: axis的取值 (1) axis  <= 0 判断有的轴是否有错误
//					  (2) 1 , 2 , 3 ,4 时使指定的轴是否有错误
//
// 返回值:(1) 返回值的低三位为1分别表示有错误发生,分别如下三种情况
//						    第一位为1,表示当前轴是电机伺服驱动器报警
//						    第二位为1,表示当前轴是运动出错
//						    第三位为1,表示当前轴是命令出错
//		   (2) 0表示没有错误
//		   (3) -1表示检测时出错
int Gt_Card_Api::check_axis_error(int axis)
{
	int i;
	int k;
	int rtn = 0;

	unsigned short status; 

	if(axis > Sys_Max_Axis_Num)
		return -1;

	if(axis <= 0)
	{
		i = 1;
		k = Sys_Max_Axis_Num;
	}
	else
		{
			i = axis;
			k = axis;
		}

	for( ; i <= k  ; i++) 
	{ 
		if(GT_Axis(i))//设置第i 轴为当前轴
		{
			rtn = -1;
			break;
		}

		if(GT_GetSts(&status)) //读取状态值
		{
			rtn = -1;
			break;
		}

		if(status&0x2) //当前轴是否电机伺服驱动器报警标志位
			rtn |= 1;

		if(status&0x10) //当前轴是否运动出错标志位
			rtn |= 2;
		
		if(status&0x80) //当前轴是否命令出错标志位
			rtn |= 4;
	} 

	return rtn;
}

// 功  能:判断当前轴运动是否完成
//
// 参  数: axis的取值 (1) axis <= 0 判断有的轴运动是否完成所
//					  (2) 1 , 2 , 3 ,4 时使指定的轴
//
// 返回值:1表示在没有完成
//		   0表示运动完成
//		  -1表示检测时出错
int Gt_Card_Api::check_axis_done(int axis)
{
	int i;
	int k;
	int rtn = 0;

	unsigned short status; 

	if(axis > Sys_Max_Axis_Num)
		return -1;

	if(axis <= 0)
	{
		i = 1;
		k = Sys_Max_Axis_Num;
	}
	else
		{
			i = axis;
			k = axis;
		}

	for( ; i <= k  ; i++) 
	{ 
		if(GT_Axis(i))//设置第i 轴为当前轴
		{
			rtn = -1;
			break;
		}

		if(GT_GetSts(&status)) //读取状态值
		{
			rtn = -1;
			break;
		}

		if(!(status&0x1)) //等待运动完成
			rtn = 1;

	} 

	return rtn;
}

// 功  能: 设置探针触发模式
//
// 返回值: 1表示有错误发生
//			0表示命令执行成功
int Gt_Card_Api::set_capt_prob(void)
{
	int i;
	int rtn = 0;
	
	for( i=1; i<=Sys_Max_Axis_Num; i++) //屏蔽每一轴的中断
	{ 
		if(GT_Axis(i))//设置第i 轴为当前轴
			rtn = 1;

		if(GT_ClrSts())//清状态
			rtn = 1;
	}

	if(GT_CaptProb()) //设置探针触发中断
		rtn = 1;

	return rtn;
}

// 功  能: 检测探针触发是否完成
//
// 返回值: 0表示触发完成
//			1表示触发没有完成
//		   -1表示检测时出错
int Gt_Card_Api::check_capt_prob_done(void)
{
	int i;
	unsigned short status; 
	int rtn = 0;
	
	for( i=1; i<=Sys_Max_Axis_Num; i++) //屏蔽每一轴的中断
	{ 
		if(GT_Axis(i))//设置第i 轴为当前轴
		{
			rtn = -1;
			break;
		}

		if(GT_GetSts(&status)) //读取状态值
		{
			rtn = -1;
			break;
		}

		if(!(status&0x4)) //等待断点到达
			rtn = 1;
	}

	return rtn;
}

// 功  能:获取当前轴的捕获位置值 当调用,GT_CaptHome,GT_CaptIndex,GT_CaptProb 
//
//
// 参  数: axis的取值 (1) axis  <= 0 无效的参数
//					  (2) 1 , 2 , 3 ,4 时使指定的轴
//			pos	存放位置信息缓冲区
//
// 返回值: 1表示有错误发生
//			0表示命令执行成功
long Gt_Card_Api::get_axis_capt_pos(int axis , long *pos)
{
	int rtn = 0;

	if(check_axis_user(axis))
		return 1;

	if(GT_Axis(axis))//设置第i 轴为当前轴
		rtn = 1;

	if(GT_GetCapt(pos)) 
		rtn = 1;

	*pos = motion_to_cmd_pos(axis,*pos);

	return rtn;
}

static char *CmdErrorMsgBuf[]=
{
	"命令输入的控制参数溢出",
	"命令输入的控制参数非法",
	"多控制轴参数更新命令的参数不能为0",
	"伺服使能状态,不能使用伺服复位命令",
	"没有中断产生,不能发送中断有关的命令",
	NULL,//Bit5 (空)
	"轴正在运动,不能修改轴的工作模式",
	"重复的编码器Index信号捕获命令",
	"重复的HOME信号捕获命令",
	"轴已经处于报警状态,不能调用驱动器使能命令",
	NULL,//Bit10 (空)
	"轴运动中,不能进行某些操作",
	"面向坐标系的命令非法",
	"定位缓冲区坐标起点命令出错",
	NULL,//Bit14 (空)
	"缓冲区满"
};

// 功  能:查询执行命令出错的第一条原因
//
// 参  数:MsgBuf指向存放错误信息的缓冲区
//         bufSize缓冲区的长度,以字节为单位
//
// 返回值: 
//			0表示没有有错误发生 
//			1表示有错误发生
//			2表示还有下一条错误发生
int Gt_Card_Api::get_cmd_error_first(char *MsgBuf , int bufSize) 
{
	unsigned short aError;
	int i;

	int flags = 0;
	error_msk = 1;

	if(GT_GetCmdSts(&aError) == 0)
	{
		for(i = 0 ; i < 16 ; i++ , error_msk<<=1)
		{
			if(aError&error_msk)
			{
				if(CmdErrorMsgBuf[i] != NULL)
				{
					strncpy(MsgBuf , CmdErrorMsgBuf[i] , bufSize);
					flags = 1;
					break;
				}
			}
		}

		if(i < 16)
			error_msk<<=1;

		if(aError >= error_msk)
			return 2;
	}

	return 	flags;
}

// 功  能:查询执行命令出错的下一条原因
//
// 参  数:MsgBuf指向存放错误信息的缓冲区
//         bufSize缓冲区的长度,以字节为单位
//
// 返回值: 
//			0表示没有有错误发生 
//			1表示有错误发生
//			2表示还有下一条错误发生
int Gt_Card_Api::get_cmd_error_next(char *MsgBuf , int bufSize) 
{
	unsigned short aError;
	unsigned short k;
	int i;

	int flags = 0;

	if(GT_GetCmdSts(&aError) == 0)
	{
		for(k = 1 , i = 0 ; i < 16 ; i++ , k<<=1)
		{
			if(k < error_msk)
				continue;

			error_msk <<=1;

			if(aError&k)
			{
				if(CmdErrorMsgBuf[i] != NULL)
				{
					strncpy(MsgBuf , CmdErrorMsgBuf[i] , bufSize);
					flags = 1;
					break;
				}
			}
		}

		if(i < 16)
			if(aError >= error_msk)
				return 2;
	}

	return 	flags;
}

// 功  能:专用输入信号参数设置
//
// 返回值: 1表示有错误发生
//			0表示命令执行成功
int Gt_Card_Api::input_singl_cfg(void) //专用输入信号参数设置
{ 
	int rtn = 0; 
	unsigned short LmtSense = 0; //赋值限位开关参数为高电平触发
	//unsigned int EncSense = 0xF; /* 赋值1~4 轴编码器反向,1、2 辅助编码器方向不变 */ 

	if(GT_LmtSns(LmtSense)) /* 设置1~4 轴正、负限位开关为高电平触发*/ 
		rtn = 1;

	/*if(GT_EncSns(EncSense))//设置编码器方向(仅SV 卡)
		rtn = 1;*/

	return rtn;
} 

// 功  能:该函数获得运动控制器通用数字量输入的状态
//
// 参  数: *inData 返回该状态,其各位与通用数字量输入口对应
//
// 返回值: 1表示有错误发生
//			0表示命令执行成功
int Gt_Card_Api::get_IO_input(unsigned short *inData)
{
	int rtn = 0;
	
	if(GT_ExInpt(inData))
		rtn = 1;

	return rtn;
}

// 功  能:该函数设置运动控制器通用数字量输出的状态
//
// 参  数: outData 是所要设置的状态,其各位与通用数字输出口对应
//
// 返回值: 1表示有错误发生
//			0表示命令执行成功
int Gt_Card_Api::get_IO_output(unsigned short outData)
{
	int rtn = 0;
	
	if(GT_ExOpt(outData))
		rtn = 1;

	return rtn;
}

// 功  能:设置指定的轴在坐标系运动中步进或者单轴运动时的运动参数
//
// 参  数: speed的取值(1) speed > 0 指定的轴向以speed的速度运动0 --0.1 最大速度为 30m
//		   acc的取值  (1) 指定的轴加速度 0 -- 0.0000003 最大速度为 27m/min2
int Gt_Card_Api::set_syn_para(double speed ,double acc)
{
	if( acc < 0.0 || acc > 0.0000003)
		acc_syn = 0.0000001;
	else
		acc_syn = acc;

	if(GT_SetSynAcc(acc_syn))
		return 1;

	if( speed < 0.0 || speed > 0.1)
		speed_syn = 0.05;
	else
		speed_syn = acc;

	if(GT_SetSynVel(speed_syn))
		return 1;

	return 0;
}

// 功  能:设置当前运动模式为坐标系运动模式或者缓冲区运动模式
//
// 参  数: mode的取值(1) mode > 0 指定当前运动模式为缓冲区连续运动模式
//					 (2) mode = 0 指定当前运动模式为坐标系单段运动模式
int Gt_Card_Api::init_conti_run_mode(int mode)
{
	double axisMapBuf[Sys_Max_Axis_Num+1];
	//long Pos;
	int i;

	for(i = 0 ; i< Sys_Max_Axis_Num ; i++)
	{
		memset(axisMapBuf , 0 , sizeof(axisMapBuf));
		axisMapBuf[i] = m_axis_ratio[i]*1000;//转换成以毫米为单位

		if((i+1 , axisMapBuf))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -