📄 func.cpp
字号:
// func.cpp: implementation of the func class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
//#include "beihang.h"
#include "func.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
func::func()
{
}
func::~func()
{
}
void error(short rtn) //返回值处理函数,rtn 为函数的返回值
{
switch (rtn){
case -1:
AfxMessageBox("错误: 运动控制器通讯错误");
break;
case 0:
/*no error, continue */ break;
case 1:
//AfxMessageBox("error: command error\n");
break;
case 2:
case 3:
case 4:
case 5:
case 7:
AfxMessageBox("运动参数错误");
break;
case 6:
//AfxMessageBox("error: map is error\n");
break;
default:
break;
}
}
void GTInitialISA() //运动控制器初始化函数
{short rtn;
unsigned long PortBase=0x300; //赋值基地址
unsigned long irq=0; //赋值中断号
//rtn=GT_Open(PortBase,irq ); error(rtn); //打开运动控制器设备
rtn=GT_Reset( ); error(rtn); //复位运动控制器
rtn=GT_SetSmplTm(200); error(rtn); //设置控制周期为200us
}
void GTInitial() //运动控制器初始化函数
{
short rtn;
rtn=GT_Open( ); //error(rtn); //打开运动控制器设备
rtn=GT_Reset( ); //error(rtn); //复位运动控制器
/* 将1 号卡设为当前卡(仅对于多卡系统,单卡系统可取消该行)*/
//rtn=GT_SwitchtoCardNo(1);// error(rtn);
rtn=GT_SetSmplTm(600); //error(rtn); //设置控制周期为200us
for(int i=1; i<=2; i++) //屏蔽每一轴的中断
{
//rtn=GT_Axis(i);
//rtn=GT_SetIntrMsk(0);
}
rtn=rtn;
}
void InputCfg() //专用输入信号参数设置
{ short rtn;
unsigned short LmtSense = 0; //赋值限位开关参数为高电平触发
unsigned int EncSense = 0xF; /* 赋值1~4 轴编码器反向,1、2 辅助编
码器方向不变*/
rtn=GT_LmtSns(LmtSense); //error(rtn); /* 设置1~4 轴正、负限位开关为高电平触发*/
rtn=GT_EncSns(EncSense);
rtn=rtn;//error(rtn); //设置编码器方向
}
void AxisInitial() //控制轴初始化函数(SD 、SE 、SG 、SP 卡)
{short rtn;
for(int i=1;i<=2;i++)
{
rtn=GT_Axis(i); //error(rtn); //设置第i 轴为当前轴
rtn=GT_ClrSts(); //error(rtn); //清除当前轴不正确状态
rtn=GT_StepPulse();// error(rtn); //设置输出正负脉冲信号
rtn=GT_AxisOn(); //error(rtn); //驱动使能
rtn=rtn;
}
}
void AxisInitialSV() //控制轴初始化函数(SV )
{
short rtn;
rtn=GT_Axis(1); error(rtn); //设置第一轴为当前轴
rtn=GT_ClrSts(); error(rtn); //清除当前轴不正确状态
rtn=GT_CtrlMode(2); error(rtn); //设置为输出模拟量
rtn=GT_CloseLp(); error(rtn); //设置为闭环控制
rtn=GT_SetKp(20); error(rtn); //设置比例增益20
rtn=GT_SetKi(0); error(rtn); //设置积分增益0
rtn=GT_SetKd(10); error(rtn); //设置微分增益10
rtn=GT_SetKvff(0); error(rtn); //设置速度前馈0
rtn=GT_SetKaff(0); error(rtn); //设置加速度前馈0
rtn=GT_SetMtrBias(10); error(rtn); //设置输出零点偏移值为10
rtn=GT_Update(); error(rtn); //参数刷新(参数生效)
rtn=GT_AxisOn(); error(rtn); //驱动使能
rtn=GT_Axis(2); error(rtn); //设置第二轴为当前轴
rtn=GT_ClrSts(); error(rtn); //清除当前轴不正确状态
rtn=GT_CtrlMode(0); error(rtn); //设置为输出模拟量
rtn=GT_OpenLp(); error(rtn); //设置为开环控制
rtn=GT_AxisOn(); error(rtn); //驱动使能
/*rtn=GT_Axis(3); error(rtn); //设置第三轴为当前轴
//第四章单轴运动
rtn=GT_ClrSts(); error(rtn); //清除当前轴不正确状态
rtn=GT_CtrlMode(1); error(rtn); //设置输出脉冲量
rtn=GT_StepDir(); error(rtn); //设置输出脉冲+方向信号
rtn=GT_AxisOn(); error(rtn); //驱动使能
rtn=GT_Axis(4); error(rtn); //设置第四轴为当前轴
rtn=GT_ClrSts(); error(rtn); //清除当前轴不正确状态
rtn=GT_CtrlMode(1); error(rtn); //设置输出脉冲量
rtn=GT_StepPulse(); error(rtn); //设置输出正负脉冲信号
rtn=GT_AxisOn(); error(rtn); //驱动使能*/
}
void SMotion(int sit,float aa,float a,float v)//S-曲线模式运动函数
{
short rtn;
rtn=GT_Axis(1);
rtn=GT_PrflS(); //error(rtn); // 设置运动模式为S 曲线模式
rtn=GT_SetJerk(aa);// error(rtn); /* 设置最大加加速度为0.00000002 */
rtn=GT_SetMAcc(a); //error(rtn); // 设置最大加速度为0.004
rtn=GT_SetVel(v); //error(rtn); // 设置目标速度为4
rtn=GT_SetPos(sit); //error(rtn); // 设置目标位置为80000
rtn=GT_Update(); error(rtn); // 刷新参数
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -