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

📄 gtcardapi.cpp

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

	axis_mode = 1;

	if(mode)
	{
		if(GT_StrtList())
			return 1;

		/*for(i = 0 ; i< Sys_Max_Axis_Num ; i++)
		{
			if(get_axis_pos(i+1 , &Pos))
				return 1;

			axisMapBuf[i] = Pos;
			axisMapBuf[i] /= 1000.0;
		}

		if(GT_MvXYZA(axisMapBuf[0] , axisMapBuf[1] , axisMapBuf[2] ,axisMapBuf[3] , speed_syn , acc_syn))
			return 1;*/
	}

	return 0;
}

// 功  能:该函数设置运动控制器以圆弧插补(圆心角度)方式运动
//
// 参  数: 是所要运动到指定的位置,单位为mm
//
// 返回值: 1表示有错误发生
//			0表示命令执行成功
int Gt_Card_Api::add_conti_blk_circle_center(double xC=0 , double yC=0 , double zC=0 ,double angle=0 , int direction=1, int circle_cb_mode=2, double synvel=0, double synacc=0 )
{	
	int rtn=0;
	rtn=GT_SetSynVel(synvel);
	rtn=GT_SetSynAcc(synacc);
	switch(circle_cb_mode)
	{
		case 2 :
			rtn=(GT_ArcXY(xC,yC,direction*angle));
			break;
		case 3 :
			rtn=(GT_ArcYZ(yC,zC,direction*angle));
			break;
		case 4 :
			rtn=(GT_ArcZX(zC,xC,direction*angle));
			break;
	
	}
	
	return rtn;
}
// 功  能:该函数设置运动控制器以圆弧插补(终点半径)方式运动
//
// 参  数: 是所要运动到指定的位置,单位为mm
//
// 返回值: 1表示有错误发生
//			0表示命令执行成功
int Gt_Card_Api::add_conti_blk_circle_radius(double xT=0 , double yT=0 , double zT=0 , double radius=0 ,int direction=1, int circle_cb_mode=5, double synvel=0, double synacc=0)
{
		int rtn=0;
		rtn=GT_SetSynVel(synvel);
		rtn=GT_SetSynAcc(synacc);
		switch(circle_cb_mode)
		{	case 5 :
				rtn=(GT_ArcXYP(xT,yT,radius,direction));
				break;
			case 6 :
				rtn=(GT_ArcYZP(yT,zT,radius,direction));
				break;
			case 7 :
				rtn=(GT_ArcZXP(zT,xT,radius,direction));
				break;
		}
		return rtn;
}
// 功  能:该函数设置运动控制器以XYZ插补方式运动到指定的位置
//
// 参  数: xyz是所要运动到指定的位置,单位为mm
//
// 返回值: 1表示有错误发生
//			0表示命令执行成功
int Gt_Card_Api::add_conti_blk_XYZ(double x=0 , double y=0 ,double z=0 , int line_cb_mode=0)
{	
	int rtn=0;
	//rtn=GT_SetSynVel(synvel);
	//rtn=GT_SetSynAcc(acc);
	if(line_cb_mode)
		rtn=GT_LnXYZ(x , y ,z);
	else
		rtn=GT_LnXY(x , y );	
	return rtn;
}

// 功  能:在当前运动模式为缓冲区连续运动模式时启动缓冲区命令的执行
//
// 返回值: 1表示有错误发生
//			0表示命令执行成功
int Gt_Card_Api::run_conti_mode(void)
{
	if(GT_StrtMtn())
		return 1;

	return 0;
}

// 功  能:在当前运动模式为缓冲区连续运动模式时重新打开命令缓冲区
//
// 返回值: 1表示有错误发生
//			0表示命令执行成功
int Gt_Card_Api::add_conti_mode(void)
{
	if(GT_AddList())
		return 1;

	return 0;
}

// 功  能: 该函数按照当前的合成速度减速策略停止基于坐标系的多轴协调运动命令
//			在当前运动模式为缓冲区连续运动模式时暂停缓冲区命令的执行
//
// 返回值: 1表示有错误发生
//			0表示命令执行成功
int Gt_Card_Api::stop_conti_mode(void)
{
	if(GT_StpMtn())
		return 1;

	return 0;
}

// 功  能:该函数立即停止基于坐标系的多轴协调运动命令。该函数执行后没有减速过
//		   程,当前运动合成速度和目标合成速度立即为零。
//		   在当前运动模式为缓冲区连续运动模式时暂停缓冲区命令的执行
//		   在立即命令输入执行状态,运动停止后将丢弃当前运动信息。
//
// 返回值: 1表示有错误发生
//			0表示命令执行成功
int Gt_Card_Api::Estop_conti_mode(void)
{
	if(GT_EStpMtn())
		return 1;

	return 0;
}

// 功  能:在当前运动模式为缓冲区连续运动模式时关闭缓冲区
//
// 返回值: 1表示有错误发生
//			0表示命令执行成功
int Gt_Card_Api::end_conti_mode(void)
{
	if(GT_EndList())
		return 1;

	return 0;
}

// 功  能:检查连续插补缓冲区是否空
//
// 返回值:1表示没有空
//		   0表示空
//		  -1表示检测时出错
int Gt_Card_Api::check_conti_buffer_done(void)
{
	unsigned short status;

	if(GT_GetCrdSts(&status))
		return -1;

	if(status & 0x2000)
		return 0;

	return 1;
}

// 功  能:检查坐标系模式运动时是否出错
//
// 返回值:1表示出错
//		   0表示没有出错
//		  -1表示检测时出错
int Gt_Card_Api::check_conti_run_error(void)
{
	unsigned short status;

	if(GT_GetCrdSts(&status))
		return -1;

	if(status & 0x404)	//2 1=伺服周期过小,引起运动错误(该位置1 时, 请立即修改伺服周期) 
		return 1;		//10 1=坐标系运动发生异常错误(正常情况下该标志不会置起,除非运动

	return 0;
}

// 功  能:获取系统当前的运行速度(合成速度)
//
// 参  数: *aCurSpeed 返回当前的合成速度
//
// 返回值:1表示出错
//		   0表示没有出错
int Gt_Card_Api::get_cur_speed(double * aCurSpeed)
{
	int i;
	double Speed = 0.0;

	*aCurSpeed = 0.0;

	if(axis_mode)
	{
		;//GT_GetSynVel(aCurSpeed);
	}
	else
	{
		for( i =1 ; i <= Sys_Max_Axis_Num ; i++) 
		{ 
			if(GT_Axis(i))//设置第i 轴为当前轴
			{
				*aCurSpeed = 0.0;
				return 1;
			}

			if(GT_GetVel(&Speed))
			{
				*aCurSpeed = 0.0;
				return 1;
			}

			*aCurSpeed += Speed*Speed;
		} 

		*aCurSpeed = sqrt(*aCurSpeed);
	}

	return 0;
}

//功  能:获得轴状态字
//
// 参  数: *pAxis_state 返回坐标系状态字
//
// 返回值:-1表示出错
//		   0表示没有出错
int Gt_Card_Api::get_cur_axis_state(int axis, unsigned short *pAxis_state)
{
     *pAxis_state = 0;
	if(GT_Axis(axis+1))
		return -1;
	if(GT_GetSts(pAxis_state))
		return -1;
	return 0;
}
//功  能:获得坐标系状态字
//
// 参  数: *axis_state 返回坐标系状态字
//
// 返回值:-1表示出错
//		   0表示没有出错
int Gt_Card_Api::get_cur_cordinate_state(unsigned short *axis_state)
{
	*axis_state=0;
	if(GT_GetCrdSts(axis_state))
	return -1;
	return 0;
}

int Gt_Card_Api::Outport(unsigned short wOutport)
{
	return GT_ExOpt(wOutport);
}
//将轴模式寄存器中的运动出错自动停止标志位置1
//参数
//返回值:1表示出错
//		  0表示没有出错
int Gt_Card_Api::AuStopOn(int axis)
{
	short rtn;
	rtn=GT_Axis(axis);
	rtn=GT_AuStpOn();
return rtn;
}
//参数自动更新
//参数Mask各位表示0:1号轴;1:2号轴;2:3号轴
//返回值:1表示出错
//		  0表示没有出错
int Gt_Card_Api::MultiUpdate(unsigned short Mask)
{
  short rtn;
  rtn=GT_MltiUpdt(Mask);
  return rtn;
}


//设置坐标系状态下轴异常自动停止有效
//映射到各轴的运动全部停止
//返回值:1表示出错
//		  0表示没有出错
int Gt_Card_Api::SetAutoAbruptOn()
{
	return (GT_CrdAuStpOn());
}
//设置坐标系状态下轴异常自动停止关闭
//映射到各轴的运动不自动全部停止
//返回值:1表示出错
//		  0表示没有出错
int Gt_Card_Api::SetAutoAbruptOff()
{
	return (GT_CrdAuStpOff());
}
//设置坐标系状态下缓冲区内起始点XY位置和参数
//x为起点x坐标,y起点y坐标,vel为速度,acc为加速度
//返回值:1表示出错
//		  0表示没有出错
int Gt_Card_Api::SetXYOriginPointInCordinates(double x=0, double y=0, double vel=0, double acc=0)
{
	return (GT_MvXY(x,y,vel,acc));
}
//设置坐标系状态下缓冲区内起始点XYZ位置和参数
//x为起点x坐标,y起点y坐标,z起点z坐标,vel为速度,acc为加速度
//返回值:1表示出错
//		  0表示没有出错
int Gt_Card_Api::SetXYZOriginPointInCordinates(double x=0, double y=0, double z=0, double vel=0, double acc=0)
{
	return (GT_MvXYZ(x,y,z,vel,acc));
}


/////Gt_Card_Api Implemantation///////////////////////////////////////////////////


//设置通讯窗口句柄.
void Gt_Card_Api::SetMainWnd(HWND hWnd)
{
}

//初始系统参数
int Gt_Card_Api::InitSystem()
{
	return 0;
}

//找某轴的限位值,nAixs=1为X轴,2为Y轴,3为Z轴
int Gt_Card_Api::FindLimit(int nAixs)
{
	return 0;
}

//找系统的三轴光栅的RI点,找到后并将该点作为系统的机械坐标系原点
int Gt_Card_Api::FindRI()
{
	return 0;
}

//得到X,Y,Z三轴的光栅尺的Counter
void Gt_Card_Api::GetXYZCounter(long &x,long &y,long &z)
{

}

//得到X,Y,Z三轴的坐标值
void Gt_Card_Api::GetXYZCrd(double &dX,double &dY,double &dZ)
{
	return ;
}

//以合成的速度和加速度运动到(dX,dY,dZ)点,注:该点为坐标系下的值
int Gt_Card_Api::MoveTo(double dX,double dY,double dZ,double dAcc,double dSpeed)
{
	return 0;
}

//设置合成的加速度
int Gt_Card_Api::SetCombAcc(double dAcc )
{
	return 0;
}

//设置合成的速度
int	Gt_Card_Api::SetCombSpeed(double dSpeed )
{
	return 0;
}

//以设置的速度和加速度运动到(x,y,z)点,注:该点为机械坐标系下的值
int Gt_Card_Api::MoveTo(double x,double y,double z)
{
	return 0;
}

//禁止操纵杆
void Gt_Card_Api::DisableJoyStick()
{
	return ;
}

//使能操纵杆
void Gt_Card_Api::EnableJoyStick()
{
	return ;
}

//得到光源的各灯的亮度值,pData为亮度值,nLength为数据长度
void Gt_Card_Api::GetNightData(BYTE *pData,int nLength)
{
	return ;
}

//设置光源的各灯的亮度值,pData为亮度值,nLength为数据长度
void Gt_Card_Api::SetNightData(BYTE *pData,int nLength)
{
	return ;
}

//得到系统状态
CNCMSTATE Gt_Card_Api::GetSysState()
{
	CNCMSTATE temp;
	return temp;
}

//设置光栅的计数方向,1为正向,-1为负向,注意只有1和-1
void Gt_Card_Api::SetLinearDirect(int nX,int nY,int nZ)
{
	return ;
}

//设置X轴的软件限位值,dZ为正限位值,dF为负限位值,注意dZ和dF都是机械坐标系下坐标值
BOOL Gt_Card_Api::SetSoftLimit_X(double dZ,double dF)
{
	return 0;
}

//设置Y轴的软件限位值,dZ为正限位值,dF为负限位值,注意dZ和dF都是机械坐标系下坐标值
BOOL Gt_Card_Api::SetSoftLimit_Y(double dZ,double dF)
{
	return 0;
}

//设置Z轴的软件限位值,dZ为正限位值,dF为负限位值,注意dZ和dF都是机械坐标系下坐标值
BOOL Gt_Card_Api::SetSoftLimit_Z(double dZ,double dF)
{
	return 0;
}

//如果出错时,得到错误代码
int Gt_Card_Api::GetErrorCode()
{
	return 0;
}

//该函数为在软件上通过鼠标快速移动XYZ三轴,dXSpeed,dYSpeed,dZSpeed分别为速度大小,正负为方向,单位为mm/s
int Gt_Card_Api::QuickMove(double dXSpeed,double dYSpeed,double dZSpeed)
{
	return 0;
}

//得到系统的类型,0:HuaGong_1,1:WanHao_1,2:WanHao_2,.....
int Gt_Card_Api::GetSysType()
{
	return 0;
}
short Gt_Card_Api::SetLmtsOn(int axis)
{
	return 0;
}

//功  能:获得获得当前轴模式状态字
//
// 参  数: *pMode 返回当前轴状态字
//
// 返回值:-1表示出错
//		   0表示没有出错
int Gt_Card_Api::GetAxisMode(int axis,unsigned short *pMode)
{
	*pMode=0;
	if(GT_Axis(axis+1))
		return -1;
	if(GT_GetMode(pMode))
		return -1;
	return 0;
}

// 功  能:关闭运动控制器设备
//
// 返回值: 非0表示有错误发生
//			0表示没有有错误发生 
int Gt_Card_Api::CloseCard()
{
	int rtn = 0; 

	if( GT_Close( ) )//关闭运动控制器设备
		rtn = 1;

	return rtn;
}
int Gt_Card_Api::InitialAxis(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;
	}
		
	//if(GT_EncOn())
	//	rtn = 1;

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

		if(GT_ClrSts())		//清除当前轴不正确状态
			rtn = 1;

		if(GT_AuStpOff())	//设置当前轴运动出错时电机自动停止标识
			rtn = 1;

		if(GT_AuUpdtOn())	//该函数使当前轴模式寄存器的自动刷新标志位置1
			rtn = 1;

		if(GT_CrdAuStpOff()) //该函数设置坐标系状态寄存器的轴异常自动停止允许标志
			rtn = 1;
 
		if(GT_BrkOff())		//该函数清除当前轴已设置的但未被触发的断点
			rtn = 1;

		if(GT_StepPulse())	//设置输出正负脉冲信号 
			rtn = 1;
 
		if(GT_LmtsOn())		//函数使运动控制器开始监视当前轴的限位开关状态
			rtn = 1;

		if(GT_LmtSns(0xFFFF))		//函数使运动控制器开始监视当前轴的限位开关状态
			rtn = 1;
 
		if(GT_SynchPos())	//指令位置和实际位置同步
			rtn = 1;

		if(GT_Update()) //刷新参数 
			rtn = 1;

	//	while(i==1)//如果电机伺服驱动器报警标志位为1,则复位驱动器
	//	{
			if(GT_GetSts(&status))
			{
				rtn = 1;
		//		continue;
			}
				
			if(status&0x2) 
			{ 
				if(GT_DrvRst())	//调用该函数后,控制器向轴驱动器发出复位信号使驱动器复位
					rtn = 1;
				
			}
		//	else
		//		break;

			if(GT_Update()) //刷新参数 
				rtn = 1;
	//	}
		
		if(set_axis_on_off(i, Axis_On_Mode))//打开轴
			rtn = 1;
	} 

	return rtn;
}
//设置坐标系映射参数
//参数axis为欲映射的轴,MapPara为映射参数
//返回值:1表示出错
//		  0表示没有出错
int Gt_Card_Api::SetMapAxis(int axis ,double *MapPara)
{
  short rtn=0;
  rtn=GT_MapAxis(axis,MapPara);
  return rtn;
}








///////////////////////////////////////////////////////////


⌨️ 快捷键说明

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