📄 gtcardapi.cpp
字号:
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 + -