功能描述

实现CNC应用中常用的双轴(XY轴)或三轴(XYZ轴)伺服插补控制功能,目前指令支持包含直线和圆弧插补功能。

(1) 指令格式

指令

名称

图形表现

ST表现

IMC_IpoController

直线圆弧插补指令

image.png

IMC_IpoController(

              apAxis:= ,

              bExecute:= ,

              bEmergencyStop:= ,

              astuProfInfo:= ,

              diProfSum:= ,

              dAngleTol:= ,

              bLoop:= ,

              bDone=> ,

              bBusy=> ,

              bCommandAborted=> ,

              bError=> ,

              uiErrorID=> );

(2) 相关变量

² 输入输出变量

输入输出变量

名称

数据类型

有效范围

初始值

描述

apAxis

控制轴

指针

ARRAY[0..2] OF POINTER TO AXIS_REF_SM3

-

-

映射到XYZ轴的指针数组

² 输入变量

输入变量

名称

数据类型

有效范围

初始值

描述

bExecute

指令执行

BOOL

TRUEFALSE

FALSE

上升沿:启动插补功能

下降沿:结束插补功能

bEmergencyStop

急停

BOOL

TRUEFALSE

FALSE

TRUE:急停使能,插补轴停止动作,复位后继续执行剩余动作

astuProfInfo

路径信息

ARRAY[0..99] OF PROFILEINFO

-

-

路径信息列表,其中包含按照执行顺序排列的路径段元素

diProfSum

路径段数

DINT

-

0

有效路径段数,不大于100

dAngleTol

速度约束拐角

LREAL

-

0.001

设置检测路径的尖锐段速度方向变化的角度(单位:deg),用于处理轴在路径尖锐处的速度平滑过渡。若某段路径的拐角大于等于该值,该位置的速度将减至0。若设置为负角,内部自动转换成正角(范围在0~360内的补角)

² 输出变量

输出变量

名称

数据类型

有效范围

初始值

描述

bDone

指令完成标志

BOOL

TRUEFALSE

FALSE

TRUE:指令执行完成

bBusy

指令执行标志

BOOL

TRUEFALSE

FALSE

TRUE:当前指令正在执行中

bCommandAborted

指令中断标志

BOOL

TRUEFALSE

FALSE

TRUE:当前指令被中断

bError

错误标志

BOOL

TRUEFALSE

FALSE

TRUE:指令运行异常

uiErrorID

错误代码

UINT

-

0

发生异常时,输出错误代码

(3) 功能说明

本指令涵盖的主要功能:

1.       根据用户设置的坐标位置和插补周期实现直线或圆弧插补功能,目前支持G00,G01,G02,G03指令;

2.       支持两个轴(二维平面)和三个轴(三维立体)的插补运动,支持在XY/ZX/YZ参考平面(G17/G18/G19)的圆弧插补运动;

3.       支持多个指令路径同时输入,功能块将按照指令路径的队列顺序依次执行;

4.       支持对路径进行预处理,实现对不同指令路径之间衔接位置的路径段进行包括位置曲线和速度曲线的光滑处理。

插补运行过程中的路径信息需要用户事先给出,每段的路径信息被定义为一个结构体,通过对结构体相关属性进行配置,并将结构体放入队列中,即可实现多路段连续执行的插补运动。路径结构体包括成员参数如下:

成员名称

参数类型

参数说明

eMoveType

SMC_MOVTYP

指定路径移动曲线类型:

G00(快速定位): 100

G01(直线插补): 1

G02(顺时针圆弧插补): 2

G03(逆时针圆弧插补): 3

eDimension

IMC_DIMTYP

绘制圆弧时圆心的参考平面:

XY_PLANE(二维XY平面):3

ZX_PLANE(二维ZX平面):5

YZ_PLANE(二维YZ平面):6

eCoordType

IMC_COORDTYP

绝对坐标系模式:0

相对坐标系模式:1

lrTargetPosX

LREAL

X轴方向的目标位置或位置增量

lrTargetPosY

LREAL

Y轴方向的目标位置或位置增量

lrTargetPosZ

LREAL

Z轴方向的目标位置或位置增量

iArcMode

INT

圆弧生成模式:

依据给定半径生成(仅生成不大于180度的圆弧):0

依据给定圆弧角度生成:1

依据圆弧段上给定点生成:2

生成整圆:3

lrMidPosX

LREAL

圆弧段上给定点的X轴坐标

lrMidPosY

LREAL

圆弧段上给定点的Y轴坐标

lrMidPosZ

LREAL

圆弧段上给定点的Z轴坐标

lrMid2PosX

LREAL

圆弧段上额外给定点的X轴坐标,用于绘制整圆

lrMid2PosY

LREAL

圆弧段上额外给定点的Y轴坐标,用于绘制整圆

lrMid2PosZ

LREAL

圆弧段上额外给定点的Z轴坐标,用于绘制整圆

lrArcAngle

LREAL

圆弧角度(单位:°)

lrRadius

LREAL

圆弧插补半径(单位:units

lrVel

LREAL

目标速度(单位:units/sec

lrAcc

LREAL

最大加速度(单位:units/sec2

lrDec

LREAL

最大减速度(单位:units/sec2

bRoundPath

BOOL

True:路径平滑处理

lrRoundRadius

LREAL

路径衔接位置的圆弧半径(单位:units

 

(4) 注意事项

输入项apAxis指针数组中三个元素分别对应X,Y,Z轴,例如若只需控制XY轴,仅对XY轴对应元素赋值即可,Z轴对应元素无须赋值;

eMoveType为枚举输入,表示路径段的运动模式:快速定位G00LINPOS100),直线插补G01LIN1),圆弧插补G02CLW2),G03CCLW3);

eDimension为枚举输入,表示路径段在指定的参考平面执行,不同的参考平面设置会影响到绘制圆弧时的圆心坐标,例如当设置ZX平面为参考平面时,以当前位置为起点绘制的圆弧圆心与当前位置在同一个ZX平面上,即圆心的Y坐标与起点的Y坐标相同;

eCoordType为枚举输入,表示在此路径段执行绝对/相对位置控制,当设置成绝对坐标系模式时,轴将移动至指定的目标位置;当设置成相对坐标系模式时,将轴当前位置加上设置的位置值计算得到真正的目标位置后,再对轴实施控制;

lrTargetPosXlrTargetPosYlrTargetPosZ分别对应XYZ轴的输入位置信息,注意在给eCoordType设置不同值的情况下,其代表的位置物理意义有所不同(见上条);

iArcMode表示用户绘制圆弧曲线时选用的参数模式,0表示根据圆弧起始结束点以及给定的半径长生成圆弧段;1表示根据圆弧起始结束点以及给定的圆弧角度生成圆弧段;2表示根据圆弧起始结束点以及给定圆弧段上任意点生成圆弧段;3表示根据圆弧起始结束点以及圆弧段上任意两个不同点生成整圆,默认为0

lrMidPosXlrMidPosYlrMidPosZ分别对应圆弧段任意给定点在XYZ轴的输入位置信息,仅在iArcMode设置为23时有效,注意若生成的圆弧段与设置的圆弧走向(逆时针或顺时针)不匹配,以生成圆弧段为准;

lrMid2PosXlrMid2PosYlrMid2PosZ分别对应圆弧段任意给定点在XYZ轴的输入位置信息,仅在iArcMode设置为3时有效,注意该点坐标不应与上述点重叠,否则无法确定整圆位置;

lrArcAngle表示圆弧从起始点到结束点所跨过的角度,范围应大于0且小于360度,仅在iArcMode设置为1时有效;

lrRadius表示圆弧插补时的圆弧半径,若执行直线插补,无须设置此项;

lrVel表示该路径段的目标速度(单位:unit/s),lrAcclrDec分别表示最大允许的加速度和减速度(单位:unit/s2);

bRoundPath为路径平滑处理使能输入,若设置为TRUE,则将该段路径结束点与下一段路径起始点的衔接处用一小段圆弧代替,此圆弧的半径大小由lrRoundRadius给定,而圆弧起始结束位置则是由功能块内部决定,需要注意的是,若两段路径中至少存在一段为圆弧插补路径,则路径平滑功能在此处失效;

lrRoundRadius为路径平滑处理时替代圆弧的半径大小(单位:unit),若bRoundPathTRUE时该值为0,相当于不执行平滑处理功能。

(5) 范例

首先配置各个路径段的信息:

stuProfInfoQueue : ARRAY [0..99] OF IMC_PROFILEINFO;

stuProfInfoQueue[0].eMoveType:= 1;

stuProfInfoQueue[0].eCoordType:= 0;

stuProfInfoQueue[0].lrTargetPosX:= 82.9;

stuProfInfoQueue[0].lrTargetPosY:= 8.9;

stuProfInfoQueue[0].lrVel:= 20;

stuProfInfoQueue[0].lrAcc:= 100;

stuProfInfoQueue[0].lrDec:= 100;

stuProfInfoQueue[0].bRoundPath:= TRUE;

stuProfInfoQueue[0].lrRoundRadius:= 10;

 

stuProfInfoQueue[1].eMoveType:= 1;

stuProfInfoQueue[1].eCoordType:= 1;

stuProfInfoQueue[1].lrTargetPosX:= 2;       // 目标位置为84.9

stuProfInfoQueue[1].lrTargetPosY:= 75.7;     // 目标位置为84.6

stuProfInfoQueue[1].lrVel:= stuProfInfoQueue[0].lrVel;

stuProfInfoQueue[1].lrAcc:= stuProfInfoQueue[0].lrAcc;

stuProfInfoQueue[1].lrDec:= stuProfInfoQueue[0].lrDec;

stuProfInfoQueue[1].bRoundPath:= TRUE;

stuProfInfoQueue[1].lrRoundRadius:= 10;

 

stuProfInfoQueue[2].eMoveType:= 1;

stuProfInfoQueue[2].eCoordType:= 0;

stuProfInfoQueue[2].lrTargetPosX:= 6.6;

stuProfInfoQueue[2].lrTargetPosY:= 25.7;

stuProfInfoQueue[2].lrVel:= stuProfInfoQueue[0].lrVel;

stuProfInfoQueue[2].lrAcc:= stuProfInfoQueue[0].lrAcc;

stuProfInfoQueue[2].lrDec:= stuProfInfoQueue[0].lrDec;

stuProfInfoQueue[2].bRoundPath:= TRUE;

stuProfInfoQueue[2].lrRoundRadius:= 10;

 

stuProfInfoQueue[3].eMoveType:= 3;

stuProfInfoQueue[3].eCoordType:= 0;

stuProfInfoQueue[3].lrTargetPosX:= 54.6;

stuProfInfoQueue[3].lrTargetPosY:= 49.7;

stuProfInfoQueue[3].lrRadius:= 100;

stuProfInfoQueue[3].lrVel:= stuProfInfoQueue[0].lrVel;

stuProfInfoQueue[3].lrAcc:= stuProfInfoQueue[0].lrAcc;

stuProfInfoQueue[3].lrDec:= stuProfInfoQueue[0].lrDec;

stuProfInfoQueue[3].bRoundPath:= FALSE;

 

stuProfInfoQueue[4].eMoveType:= 100;

stuProfInfoQueue[4].eCoordType:= 0;

stuProfInfoQueue[4].lrTargetPosX:= 0;

stuProfInfoQueue[4].lrTargetPosY:= 0;

stuProfInfoQueue[4].lrVel:= stuProfInfoQueue[0].lrVel;

stuProfInfoQueue[4].lrAcc:= stuProfInfoQueue[0].lrAcc;

stuProfInfoQueue[4].lrDec:= stuProfInfoQueue[0].lrDec;

stuProfInfoQueue[4].bRoundPath:= FALSE;

上述例子生成的曲线预览如下:

image.png

然后定义轴指针数组apAxis : ARRAY [0..2] OF POINTER TO AXIS_REF_SM3 := [ADR(X_Drive), ADR(Y_Drive)],以及MC_PowerIMC_IpoController

image.png

dAngleTol的值默认为0.001,此处设置成100,表示若路径切换点的拐角小于或等于100°,均不作减速处理,以下为XY轴的位置和速度变化情况:

image.png

 

由上图可知,第一条曲线为路径段的标号,XY轴在第一段路径结束时接近给定的目标位置,且XY轴的合速度大小为设置的速度值,但是在第二段路径开始时两个轴的速度发