SMC_SmoothPath

这个功能块 CODESYS SoftMotion 函数库 SM3_CNCSMC_SmoothPath功能块可以用于路径预处理。此功能块将圆滑给定路径的转角并且创建一个圆滑路径 (相似路径)。这样一个相似路径对应用程序来说是必须的但是与恒定速度运动的精确的路径还是有差别的。因此,在角度转化过程中需要将速度值设为 0 以减少差别。

为了实现平滑目的路径将会被剪切为一定长度转化为倒角和一个曲线被插入。另一方面距离是由第一个对象的SMC_GEOINFO结构定义的圆滑。另一方面距离可以通过dEdgeDistance输入给出。所有的变量用于描述圆周的半径,位于拐点路径上的中心点。

SMC_SmoothPath的处理

所有输入OUTQUEUE结构体中的SMC_GEOINFO对象都将会一个接一个的进行检查。SMC_NCDecoder模块按照语句 G51/G50 中描述的设置相应的启动停止位。另一方面:路径圆滑功能将对位于G51 与 G50之间的所有对象进行处理。

Function block SMC_SmoothPath

名称

类型

初始值

描述

VAR_IN

     

bExecute

BOOL

FALSE

当 TRUE 时,功能块被激活

bAbort

BOOL

FALSE

如果为 TRUE ,功能块当前的处理将会被中断

bAppend

BOOL

FALSE

只要输入一直为 FALSE, DataOutQueue 将会在每次复位时都被清除。一旦保持为 TRUE,新增加的数据将会被写入到 DataOutQueue 的结尾

poqDataIn

POINTER TO SMC_OUTQUEUE

NULL

这个变量指向 SMC_OUTQUEUE 结构体对象,其中包含路径的 SMC_GEOINFO-对象;通常情况下他指向预处理模块(例如:SMC_NCDecoder)的 DataOut 输出。 SMC_OUTQUEUE应该定义一个适当的尺寸大小(见上文)!

dEdgeDistance

LREAL

0

该输入变量包含值 – 可以添加到SMC_GEOINFO对象中的道具补偿中 – 确定倒角的(最小)距离,在特定的对象上将会被切断并被一个圆弧代替(参阅上文)。这个变量可以在线修改,因此,可以在在线状态下(通过 SMC_GEOINFO 结构体)进行修改。

dAngleTol

LREAL

0.001

这个输入定义角度公差,定义路径弯曲的最大半径值。

nSizeOutQueue

UDINT

0

这个变量定义数据缓冲区大小,GEOINFO 结构体对象列表将会被写入。这个缓冲区至少应为 GEOINFO 结构体本身的五倍大小。否则,SMC_NCDecoder 将不会进行任何动作的执行。尺寸大小可以预先定义,但是在下次复位之前不能被修改。可以通过以下方法创建缓冲区

ExampleBuf: Array[ 1..50] of SMC_GeoInfo

定义的缓冲区大小可以通过sizeof(ExampleBuf)操作进行读取。

pbyBufferOutQueue

POINTER TO ARRAY[0..0] OF SMC_GEOINFO

NULL

这个输入必须指向 OUTQUEUE-结构体定义的内存区域的第一个字节地址。定义的这个区域至少与 nSizeOutQueue 定义的一样大。通常情况下IEC中存储区域的定义是通过定义一个 SMC_GEOINFO 数组实现的 (例如:BUF: BUF: ARRAY[1..50] OF SMC_GEOINFO这个缓冲区可以存储50个路径元素)。变量值可以预定义,但是在下次复位前不能被修改。

eMode

SMC_SMOOTHPATHMODE

SP_SPLINE3

这个输入定义用于轴圆滑的枚举类型

bSymmetricalDistances

BOOL

TRUE

如果 bSymmetricalDistances 被设置,那么将进行检测对象激活的角是否比参数 D 定义的角度值要小。如果为 TRUE,那么较短的距离值将会被使用,如果为 FALSE,参数D中定义的角度值将会被使用。

eAddAxMode

SMC_SMOOTHPATHADDAXMODE

SPAA_LATE

这个输入定义附加轴路径圆滑的元素类型

VAR_OUT

     

bDone

BOOL

FALSE

如果输入数据...DataIn 被完全处理,那么这个变量将=会被设置为 TRUE 。因此在复位之前此模块不会执行其他动作。如果输入 bExecute 为 FALSE, bDone 将会被复位为 FALSE。

bBusy

BOOL

FALSE

TRUE,功能块的处理没有完成

bError

BOOL

FALSE

功能块内部发生错误信号

wErrorID

SMC_ERROR

SMC_NOERROR

错误ID

poqDataOut

POINTER TO SMC_OUTQUEUE

NULL

这个变量指向 SMC_OUTQUEUE-结构体,用于管理循环路径中的 SMC_GEOINFO-对象 “SMC_OUTQUEUE ”

样条平滑

G-code

N000 G01 X10 Y0 F100 
N010 G51 D2 (smoothing angles with angle distance 2 on) 
N020 G01 X10 Y20 
N030 G01 X20 Y20 
N040 G01 X20 Y0 
N050 G50 (smoothing angels off)
N060 G01 X30
 
插图 142: 具有倒角的路径

这个图片显示了具有倒角的一条路径。路径圆滑在位置 10/0 被打开并且在位置 20/0 被关闭。然后所有位于两者之间的位置都将会被样条曲线进行圆滑。

输入 bSymmetricalDistances

G-code

N000 G01 X10 Y0 F100 
N010 G51 D10 (smoothing angles with angle distance 2 on) 
N020 G01 X10 Y20 
N030 G01 X20 Y20 
N040 G01 X20 Y0 
N050 G50 (smoothing angels off)
N060 G01 X30
 
插图 143: 通过bSymmetricalDistances=FALSE圆滑路径

以上示例显示了功能块的完全,当角度值比对象的一半还要大时的情况。这个图片显示了 bSymmetricalDistances=FALSE的情况。因为对象太短了,所以从角度的中间开始进行圆滑(参阅水平方向)。

插图 144: 通过bSymmetricalDistances=TRUE进行路径圆滑

这里bSymmetricalDistances被设置。当完成定义的第一个角,对象长度的一般比参数D中定义的值 (10) 要大。因此所有对象的倒角距离都为 5 。到达第二个角时,线元素缩小到 5, 剩下的对象倒角距离为 2.5 并且倒角距离 2.5 将应用到所有对象。

Input eMode

G-code

N000 G51 D10 (smoothing angles with angle distance 2 on) 
N010 G01 X0 Y10 
N020 G01 X10 Y10 
N030 G01 X10 Y0 
N040 G50 (smoothing angels off)
 

通过设置功能块SMC_SmoothPath的输入eMode,用户可以定义用于路径圆滑的元素类型。默认类型为 "Spline3" (SP_SPLINE3),即三阶多项式。这可以变为 "Spline5",然而,五阶多项式具有更多的优势,可以通过第二个推导上一个 /下一个对象,并保证连接的连续性。这将会影响一个限制的加加速度。缺点是此过程要比使用三阶圆滑耗费更多的时间。

 插图 145: 使用eMode=Spline3对 X-轴进行的动态分析
 插图 146: 使用eMode=Spline5对 X-轴进行的动态分析