固高运动控制卡学习1--运动模式介绍(1)--点位,Gear,Jog,插补

        运动模式是指规划一个或多个轴运动的方式。 运动控制器支持的运动模式有点位运动模式、 Jog运动模式、电子齿轮(即 Gear) 运动模式和插补运动模式


GT_PrfTrap 设置指定轴为点位模式
GT_PrfJog 设置指定轴为 Jog 模式
GT_PrfGear 设置指定轴为电子齿轮模式
GT_GetPrfMode 查询指定轴的运动模式

        在设置或切换运动模式时,要保证轴处于规划静止状态。如果轴正在运动,请先调用GT_Stop 指令停止一个或多个轴的运动,然后再调用上表中的指令切换到想要的运动模式下。

一·、点位模式(PT)

每一个轴在规划静止时都可以设置为点位运动。在点位运动模式下,各轴可以独立设置目标位置、目标速度、加速度、减速度、起跳速度、平滑时间等运动参数,能够独立运动或停止。

GT_PrfTrap 设置指定轴为点位运动模式
GT_SetTrapPrm 设置点位运动模式下的运动参数
GT_GetTrapPrm 读取点位运动模式下的运动参数
GT_SetPos 设置目标位置
GT_GetPos 读取目标位置
GT_SetVel 设置目标速度
GT_GetVel 读取目标速度
GT_Update 启动点位运动

JOG模式关键程序步骤:

(1)配置运动控制器  --GT_LoadConfig

(2)将 AXIS 轴设为点位模式  --GT_PrfTrap

(3)设置需要修改的运动参数   --GT_GetTrapPrm

     public struct TTrapPrm
        {
            public double acc;//加速度
            public double dec;//减速度
            public double velStart;//起始速度
            public short  smoothTime;//平滑时间
        }

(4)设置 AXIS 轴的目标位置   --GT_SetPos

(5)设置 AXIS 轴的目标速度   --GT_SetVel

(6)启动AXIS轴运动     --GT_Update

(7)等待AXIS轴规划停止   

(8)电机伺服关闭     --GT_AxisOff

    例程:将第 轴设定为点位运动模式,并且以速度 50pulse/ms,加速度 0.25pulse/ms2,减速度0.125pulse/ms2,平滑时间为 25ms 的运动参数正向运动 50000 个脉冲。 

固高运动控制卡学习1--运动模式介绍(1)--点位,Gear,Jog,插补_第1张图片

int main(int argc, char* argv[])
{ 
short sRtn;
TTrapPrm trap;
long sts;
double prfPos;
// 1、打开运动控制器
sRtn = GT_Open();

//2、复位运动控制器
sRtn = GT_Reset();
commandhandler("GT_Reset", sRtn);
//3、 配置运动控制器
// 注意:配置文件取消了各轴的报警和限位
sRtn = GT_LoadConfig("test.cfg");

// 4、清除各轴的报警和限位
sRtn =GT_ClrSts(1, 8);

///5、伺服使能
sRtn =GT_AxisOn(AXIS);

// 位置清零
sRt6、n = GT_ZeroPos(AXIS);

//7、将 AXIS 轴设为点位模式
sRtn = GT_PrfTrap(AXIS);

//8、读取点位运动参数(需要读取所有运动参数到上位机变量)
sRtn = GT_GetTrapPrm(AXIS, &trap);

//9、设置需要修改的运动参数
trap.acc = 0.25;
trap.dec = 0.125;
trap.smoothTime = 25;
//10、设置点位运动参数
sRtn = GT_SetTrapPrm(AXIS, &trap);

//11、设置 AXIS 轴的目标位置
sRtn = GT_SetPos(AXIS, 50000L);

//12、设置AXIS轴的目标速度
sRtn = GT_SetVel(AXIS, 50);

//13、启动AXIS轴的运动
sRtn = GT_Update(1<<(AXIS-1));

do
{
// 读取AXIS轴的状态
sRtn = GT_GetSts(AXIS, &sts);
// 读取AXIS轴的规划位置
sRtn = GT_GetPrfPos(AXIS, &prfPos);
printf("sts=0x%-10lxprfPos=%-10.1lf\r", sts, prfPos);
}while(sts&0x400); 
//14、等待AXIS轴规划停止
//15、伺服关闭
sRtn = GT_AxisOff(AXIS);
printf("\nGT_AxisOff()=%d\n", sRtn);
getch();
return 0;
}

二、JOG运动模式

Jog 运动模式下,各轴可以独立设置目标速度、加速度、减速度、平滑系数等运动参数,能够独立运动或停止

GT_PrfJog 设置指定轴为 Jog 运动模式
GT_SetJogPrm 设置 Jog 运动模式下的运动参数
GT_GetJogPrm 读取 Jog 运动模式下的运动参数
GT_SetVel 设置目标速度
GT_GetVel 读取目标速度
GT_Update 启动 Jog 运动

JOG模式关键程序步骤:

(1)配置运动控制器  --GT_LoadConfig

(2)将 AXIS 轴设为JOG模式  --GT_PrfJog

(3)设置JOG运动参数  --GT_SetJogPrm
     public struct TJogPrm

        {
            public double acc;
            public double dec;
            public double smooth;

        }

(4)设目标速度    --GT_SetVel

(5)启动 AXIS 轴的运动    --GT_Update

(6)在运动过程中可以更改运动速度     --GT_SetVel   GT_Update

(7)伺服关闭      --GT_AxisOff

例程: 1 运动在 Jog 模式下,初始目标速度为 100pulse/ms 。动态改变目标速度,当规划位置超过 100000pulse 时,修改目标速度为 50 pulse/ms
固高运动控制卡学习1--运动模式介绍(1)--点位,Gear,Jog,插补_第2张图片
int main(int argc, char* argv[])
{
short sRtn;
TJogPrm jog;
long sts;
double prfPos, prfVel;
// 打开运动控制器
sRtn = GT_Open();
// 指令返回值检测,请查阅例程 3-1

// 复位运动控制器
sRtn = GT_Reset();

// 配置运动控制器
// 注意:配置文件取消了各轴的报警和限位
sRtn = GT_LoadConfig("test.cfg");

// 清除各轴的报警和限位
sRtn =GT_ClrSts(1, 8);

// 伺服使能
sRtn = GT_AxisOn(AXIS);

// 位置清零
sRtn = GT_ZeroPos(AXIS);

// 将 AXIS 轴设为 Jog 模式
sRtn = GT_PrfJog(AXIS);

// 读取 Jog 运动参数(需要读取全部运动参数到上位机变量)
sRtn =GT_GetJogPrm(AXIS, &jog);

//设置需要修改的运动参数
jog.acc = 0.0625;
jog.dec = 0.0625;
// 设置 Jog 运动参数
sRtn = GT_SetJogPrm(AXIS, &jog);

// 设置 AXIS 轴的目标速度
sRtn = GT_SetVel(AXIS, 100);

// 启动 AXIS 轴的运动
sRtn = GT_Update(1<<(AXIS-1));

while(1)
{
// 读取AXIS轴的状态
sRtn = GT_GetSts(AXIS, &sts);
// 读取AXIS轴的规划位置
sRtn = GT_GetPrfPos(AXIS, &prfPos);
// 读取AXIS轴的规划速度
sRtn = GT_GetPrfVel(AXIS, &prfVel);
printf("sts=0x%-10lxprfPos=%-10.1lfprfVel=%-10.1lf\r", sts, prfPos, prfVel);
if(prfPos>= 100000)
{
// 设置AXIS轴新的目标速度
sRtn = GT_SetVel(AXIS, 50);

// AXIS轴新的目标速度生效
sRtn = GT_Update(1<<(AXIS-1));

break;
}
}
while(!kbhit())
{
// 读取AXIS轴的状态
sRtn = GT_GetSts(AXIS, &sts);
// 读取AXIS轴的规划位置
sRtn = GT_GetPrfPos(AXIS, &prfPos);
// 读取AXIS轴的规划速度
sRtn = GT_GetPrfVel(AXIS, &prfVel);
printf("sts=0x%-10lxprfPos=%-10.1lfprfVel=%-10.1lf\r", sts, prfPos, prfVel);
}
// 伺服关闭
sRtn = GT_AxisOff (AXIS);
printf("\nGT_AxisOff()=%d\n", sRtn);
getch();
return 0;
}

三、电子齿轮模式(Gear)

        电子齿轮模式能够将两轴或多轴联系起来,实现精确的同步运动,从而替代传统的机械齿轮连接。
        我们把被跟随的轴叫主轴,把跟随的轴叫从轴。电子齿轮模式下,
1 个主轴能够驱动多个从轴,从轴可以跟随主轴的规划位置、编码器位置。

        传动比:主轴速度与从轴速度的比例。电子齿轮模式能够灵活的设置传动比,节省机械系统的安装时间。当主轴速度变化时,从轴会根据设定好的传动比自动改变速度。电子齿轮模式也能够在运动过程中修改传动比。

GT_PrfGear 设置指定轴为电子齿轮运动模式
GT_SetGearMaster 设置电子齿轮运动跟随主轴
GT_GetGearMaster 读取电子齿轮运动跟随主轴
GT_SetGearRatio 设置电子齿轮比
GT_GetGearRatio 读取电子齿轮比
GT_GearStart 启动电子齿轮运动

Gear模式关键程序步骤:

1、控制卡配置

(1)配置运动控制器  --GT_LoadConfig

2、主轴配置

(1)将 AXIS 轴设为JOG模式  --GT_PrfJog 

(2)设置JOG运动参数  --GT_SetJogPrm 
     public struct TJogPrm
        {
            public double acc;
            public double dec; 
           public double smooth;
        }

(3)设目标速度    --GT_SetVel

(4)启动主轴的运动    --GT_Update

3、从轴配置

(1)将从轴设为 Gear 模式   --GT_PrfGear 

(2)设置主轴,默认跟随主轴规划位置  --GT_SetGearMaster(SLAVE, MASTER)

(3)设置从轴的传动比和离合区   --GT_SetGearRatio(SLAVE, 2, 1, 100000)  
  说明:
          1) 调 用 GT_SetGearRatio(short profile, long masterEven, long slaveEven, long masterSlope)
              指令来设置传动比和离合区。 profile 是从轴轴号; masterEven 是主轴位
              移,
slaveEven 是从轴位移, masterEven/slaveEven 等于传动比; slope 是主轴离合
              区位移,即主轴在离合区内走过的位移,用户应自行计算出来。
          2) 如果从轴轴号为 slave,当主轴位移 alpha 时从轴位移 beta,主轴运动 slope 位移后从

              轴到达设定传动比,应当调用以下指令:GT_SetGearRatio(slave, alpha, beta, slope); 

(4)启动从轴   --GT_GearStart

        示例:主轴为 Jog 模式,从轴为电子齿轮模式,传动比为主轴速度:从轴速度=21,主轴运动离合区位移后(图中阴影部分的区域),从轴达到设定的传动比

固高运动控制卡学习1--运动模式介绍(1)--点位,Gear,Jog,插补_第3张图片
int main(int argc, char* argv[])
{
short sRtn;
double prfVel[8];
TJogPrm jog;
// 打开运动控制器
sRtn = GT_Open();

// 复位运动控制器
sRtn = GT_Reset();

// 配置运动控制器
// 注意:配置文件 test.cfg 取消了各轴的报警和限位
sRtn = GT_LoadConfig("test.cfg");

// 清除各轴的报警和限位
sRtn =GT_ClrSts(1, 8);

// 伺服使能
sRtn = GT_AxisOn(MASTER);

sRtn = GT_AxisOn(SLAVE);

// 位置清零
sRtn = GT_ZeroPos(MASTER);
sRtn = GT_ZeroPos(SLAVE);

// 1、将主轴设为 Jog 模式
sRtn = GT_PrfJog(MASTER);

//2、设置主轴运动参数
sRtn =GT_GetJogPrm(MASTER, &jog);
jog.acc = 1;
sRtn = GT_SetJogPrm(MASTER, &jog);
sRtn = GT_SetVel(MASTER, 100);

//3、启动主轴
sRtn = GT_Update(1<<(MASTER-1));

// 将从轴设为 Gear 模式
sRtn = GT_PrfGear(SLAVE);

// 设置主轴,默认跟随主轴规划位置
sRtn = GT_SetGearMaster(SLAVE, MASTER);

// 设置从轴的传动比和离合区
sRtn = GT_SetGearRatio(SLAVE, 2, 1, 100000);

// 启动从轴
sRtn =GT_GearStart(1<<(SLAVE-1));

while(!kbhit())
{
// 查询各轴的规划速度
sRtn = GT_GetPrfVel(1, prfVel, 8);
printf("master vel=%-10.2lf\tslave vel=%-10.2lf\r",
prfVel[MASTER-1], prfVel[SLAVE-1]);
}
// 伺服关闭
sRtn = GT_AxisOff (MASTER);
printf("\nGT_AxisOff()=%d, Axis:%d\n", sRtn, MASTER);
sRtn = GT_AxisOff (SLAVE);
printf("\nGT_AxisOff()=%d, Axis:%d\n", sRtn, SLAVE);
getch();
return 0;
}

四、插补运动模式

GT_SetCrdPrm 设置坐标系参数,确立坐标系映射,建立坐标系
GT_GetCrdPrm 查询坐标系参数
GT_CrdData 向插补缓存区增加插补数据
GT_LnXY 缓存区指令,二维直线插补
GT_LnXYZ 缓存区指令,三维直线插补
GT_LnXYZA 缓存区指令,四维直线插补
GT_LnXYG0 缓存区指令,二维直线插补(终点速度始终为 0)
GT_LnXYZG0 缓存区指令,三维直线插补(终点速度始终为 0)
GT_LnXYZAG0 缓存区指令,四维直线插补(终点速度始终为 0)
GT_ArcXYR 缓存区指令, XY 平面圆弧插补(以终点位置和半径为输入参数)
GT_ArcXYC 缓存区指令, XY 平面圆弧插补(以终点位置和圆心位置为输入参数)
GT_ArcYZR 缓存区指令, YZ 平面圆弧插补(以终点位置和半径为输入参数)
GT_ArcYZC 缓存区指令, YZ 平面圆弧插补(以终点位置和圆心位置为输入参数)
GT_ArcZXR 缓存区指令, ZX 平面圆弧插补(以终点位置和半径为输入参数)
GT_ArcZXC 缓存区指令, ZX 平面圆弧插补(以终点位置和圆心位置为输入参数)
GT_BufIO 缓存区指令,缓存区内数字量 IO 输出设置指令
GT_BufDelay 缓存区指令,缓存区内延时设置指令
GT_BufDA 缓存区指令,缓存区内输出 DA
GT_BufLmtsOn 缓存区指令,缓存区内有效限位开关
GT_BufLmtsOff 缓存区指令,缓存区内无效限位开关
GT_BufSetStopIo 缓存区指令,缓存区内设置 axis 的停止 IO 信息
GT_BufMove 缓存区指令,实现刀向跟随功能,启动某个轴点位运动
GT_BufGear 缓存区指令,实现刀向跟随功能,启动某个轴跟随运动
GT_CrdSpace 查询插补缓存区剩余空间
GT_CrdClear 清除插补缓存区内的插补数据
GT_CrdStart 启动插补运动
GT_CrdStatus 查询插补运动坐标系状态
GT_SetUserSegNum 缓存区指令,设置自定义插补段段号
GT_GetUserSegNum 读取自定义插补段段号
GT_GetRemainderSegNum 读取未完成的插补段段数
GT_SetOverride 设置插补运动目标合成速度倍率
GT_SetCrdStopDec 设置插补运动平滑停止、急停合成加速度
GT_GetCrdStopDec 查询插补运动平滑停止、急停合成加速度
GT_GetCrdPos 查询该坐标系的当前坐标位置值
GT_GetCrdVel 查询该坐标系的合成速度值
GT_InitLookAhead 初始化插补前瞻缓存区

使用插补模式需要至少两步操作:建立坐标系向缓存区存入数据。下面分别就这两个步骤分别进行详细讲解。

(一)建立坐标系

建立坐标系就是初始化 TCrdPrm 结构体。

 public struct TCrdPrm
        {
            public short dimension;    //表示所建立的坐标系的维数,取值范围:[1, 4] 
            public short profile1;     // 分别规划轴1~8.如果规划轴.没有对应到该坐标系,则 profile[x]的值为 0;
            public short profile2;
            public short profile3;     //如果对应到了 X 轴,则 profile[x]为 1,Y 轴对应为 2, Z 轴对应为 3, A 轴对应为 4。
            public short profile4;
            public short profile5;     //每个元素的取值范围: [0, 4]
            public short profile6;
            public short profile7;
            public short profile8;

            public double synVelMax;      //该坐标系所能承受的最大合成速度 ,取值范围: (0, 32767)
            public double synAccMax;      //该坐标系所能承受的最大合成加速度 ,取值范围: (0, 32767)
            public short evenTime;        //最小匀速时间 ,取值范围: (0, 32767)
            public short setOriginFlag;   //是否需要指定坐标系的原点坐标的规划位置.0:不需要指定原点坐标值,则坐标系
                                          //的原点在当前规划位置上。 1:需要指定原点坐标值,坐标系的原点在 originPos指
                                          //定的规划位置上。
            public int originPos1;
            public int originPos2;       //指定的坐标系原点的规划位置值
            public int originPos3;
            public int originPos4;
            public int originPos5;
            public int originPos6;
            public int originPos7;
            public int originPos8;
        }

例程:建立了一个二维坐标系,规划轴 1 对应为 x 轴,规划轴 2 对应为 y 轴,坐标系原点的规划位置是(100, 100), 单位: pulse,在此坐标系内运动的最大合成速度为 500pulse/ms,最大合成加速度为 1pulse/ms^2, 最小匀速时间为 50ms

TCrdPrm crdPrm;
// 将结构体变量初始化为0
memset(&crdPrm, 0, sizeof(crdPrm));
// 为结构体赋值
crdPrm.dimension=2; // 坐标系为二维坐标系
crdPrm.synVelMax=500; // 最大合成速度: 500pulse/ms
crdPrm.synAccMax=1; // 最大加速度: 1pulse/ms^2
crdPrm.evenTime = 50; // 最小匀速时间: 50ms
crdPrm.profile[0] = 1; // 规划器1对应到X轴
crdPrm.profile[1] = 2; // 规划器2对应到Y轴
crdPrm.setOriginFlag = 1; // 表示需要指定坐标系的原点坐标的规划位置
crdPrm.originPos[0] = 100; // 坐标系的原点坐标的规划位置为(100, 100)
crdPrm.originPos[1] = 100;
// 建立1号坐标系,设置坐标系参数
sRtn = GT_SetCrdPrm(1, &crdPrm);

固高运动控制卡学习1--运动模式介绍(1)--点位,Gear,Jog,插补_第4张图片


(二)向缓存区存入数据

步骤:

        (a)首先清除缓存区中的数据。--GT_CrdClear(坐标系号,缓冲区号)

        (b)向对应坐标系的相应缓冲区添加运行或动作数据。  --GT_ArcXYR,GT_LnXYZG0,GT_LnXY,GT_BufDelay等

        (c)启动插补运动。  --GT_CrdStart

(1)直线插补例程
        假设某数控机床刀具在 xy 平面从原点出发,走一段如图 6-12 所示的正六边形轨迹。一共需要
走七段轨迹,图中标号已标出。每走完一段轨迹会输出一次
IO 信号,并且暂停 400ms。

// 即将把数据存入坐标系1的FIFO0中,所以要首先清除此缓存区中的数据
sRtn = GT_CrdClear(1, 0);
// 向缓存区写入第一段插补数据
sRtn = GT_LnXY(
    1, // 该插补段的坐标系是坐标系1
    200000, 0, // 该插补段的终点坐标(200000, 0)
    100, // 该插补段的目标速度: 100pulse/ms
    0.1, // 插补段的加速度: 0.1pulse/ms^2
    0, // 终点速度为0
    0); // 向坐标系1的FIFO0缓存区传递该直线插补数据
// 向缓存区写入第二段插补数据
sRtn = GT_LnXY(1, 100000, 173205, 100, 0.1, 0, 0);
// 缓存区数字量输出
sRtn =GT_BufIO(
    1, // 坐标系是坐标系1
    MC_GPO, // 数字量输出类型:通用输出
    0xffff, // bit0~bit15全部都输出
    0x55, // 输出的数值为0x55
    0); // 向坐标系1的FIFO0缓存区传递该数字量输出
// 缓存区延时指令
sRtn =GT_BufDelay(
    1, // 坐标系是坐标系1
    400, // 延时400ms
    0); // 向坐标系1的FIFO0缓存区传递该延时
// 启动坐标系1的FIFO0的插补运动
sRtn = GT_CrdStart(1, 0);
do
{
    // 查询坐标系1的FIFO的插补运动状态
    sRtn = GT_CrdStatus(
        1, // 坐标系是坐标系1
        &run, // 读取插补运动状态
        &segment, // 读取当前已经完成的插补段数
        0); // 查询坐标系1的FIFO0缓存区
 // 坐标系在运动, 查询到的run的值为1
}while(run == 1);
......

固高运动控制卡学习1--运动模式介绍(1)--点位,Gear,Jog,插补_第5张图片

(2)圆弧插补指令分为两种:

    a) 半径描述方法   --GT_ArcXYRGT_ArcYZRGT_ArcZXR 

    b) 圆心坐标描述方法   -- GT_ArcXYC、 GT_ArcYZC、 GT_ArcZXC 

// 即将把数据存入坐标系1的FIFO0中,所以要首先清除此缓存区中的数据
sRtn = GT_CrdClear(1, 0);

// 向缓存区写入第一段插补数据
sRtn = GT_LnXY(
    1, // 该插补段的坐标系是坐标系1
    200000, 0, // 该插补段的终点坐标(200000, 0)
    100, // 该插补段的目标速度: 100pulse/ms
    0.1, // 插补段的加速度: 0.1pulse/ms^2
    0, // 终点速度为0
    0); // 向坐标系1的FIFO0缓存区传递该直线插补数据

// 向缓存区写入第二段插补数据,该段数据是以圆心描述方法描述了一个整圆
sRtn = GT_ArcXYC(
    1, // 坐标系是坐标系1
    200000, 0, // 该圆弧的终点坐标(200000, 0)
    -100000, 0, // 圆弧插补的圆心相对于起点位置的偏移量(-100000, 0)
    0, // 该圆弧是顺时针圆弧
    100, // 该插补段的目标速度: 100pulse/ms
    0.1, // 该插补段的加速度: 0.1pulse/ms^2
    0, // 终点速度为0
    0); // 向坐标系1的FIFO0缓存区传递该直线插补数据

// 向缓存区写入第三段插补数据,该段数据是以半径描述方法描述了一个1/4圆弧
sRtn = GT_ArcXYR(
    1, // 坐标系是坐标系1
    0, 200000, // 该圆弧的终点坐标(0, 200000)
    200000, // 半径: 200000pulse
    1, // 该圆弧是逆时针圆弧
    100, // 该插补段的目标速度: 100pulse/ms
    0.1, // 该插补段的加速度: 0.1pulse/ms^2
    0, // 终点速度为0
    0); // 向坐标系1的FIFO0缓存区传递该直线插补数据

// 向缓存区写入第四段插补数据,回到原点位置
sRtn = GT_LnXY(1, 0, 0, 100, 0.1, 0, 0);

//启动坐标系1的FIFO0的插补运动
sRtn = GT_CrdStart(1, 0);

do
{
// 查询坐标系1的FIFO的插补运动状态
sRtn = GT_CrdStatus(
    1, // 坐标系是坐标系1
    &run, // 读取插补运动状态
    &segment, // 读取当前已经完成的插补段数
    0); // 查询坐标系1的FIFO0缓存区
// 坐标系在运动, 查询到的run的值为1
}while(run == 1);
固高运动控制卡学习1--运动模式介绍(1)--点位,Gear,Jog,插补_第6张图片


你可能感兴趣的:(运动控制卡)